json_ld/algorithms/compaction/
document.rs1use json_syntax::JsonValue;
2
3use crate::{
4 JsonLdBacktraceBuilder, JsonLdExpandedDocument, JsonLdFlattenedDocument, JsonLdLocatedError,
5 JsonLdProcessedContext,
6 algorithms::{AsyncJsonLdEnvironment, compaction::CompactFragment},
7 context::JsonLdEmbedContext,
8};
9
10use super::{Compactor, JsonLdCompact, JsonLdCompactionOptions};
11
12impl JsonLdExpandedDocument {
13 pub async fn compact_with(
16 &self,
17 env: impl AsyncJsonLdEnvironment,
18 context: &JsonLdProcessedContext<'_>,
19 options: JsonLdCompactionOptions,
20 location: JsonLdBacktraceBuilder<'_>,
21 ) -> Result<JsonValue, JsonLdLocatedError> {
22 let compactor = Compactor::new(context, options);
23
24 let compact = self
25 .objects()
26 .compact_fragment(&env, &compactor, location)
27 .await?;
28
29 let mut compact = compactor.wrap_in_graph(compact)?;
30 compact.embed_context(context.unprocessed())?;
31
32 Ok(compact)
33 }
34
35 pub async fn compact(
38 &self,
39 env: impl AsyncJsonLdEnvironment,
40 context: &JsonLdProcessedContext<'_>,
41 location: JsonLdBacktraceBuilder<'_>,
42 ) -> Result<JsonValue, JsonLdLocatedError> {
43 self.compact_with(env, context, JsonLdCompactionOptions::default(), location)
44 .await
45 }
46}
47
48impl JsonLdCompact for JsonLdExpandedDocument {
49 async fn compact_with(
50 &self,
51 env: impl AsyncJsonLdEnvironment,
52 context: &JsonLdProcessedContext<'_>,
53 options: JsonLdCompactionOptions,
54 location: JsonLdBacktraceBuilder<'_>,
55 ) -> Result<JsonValue, JsonLdLocatedError> {
56 self.compact_with(env, context, options, location).await
57 }
58}
59
60impl JsonLdCompact for JsonLdFlattenedDocument {
61 async fn compact_with(
62 &self,
63 env: impl AsyncJsonLdEnvironment,
64 context: &JsonLdProcessedContext<'_>,
65 options: JsonLdCompactionOptions,
66 location: JsonLdBacktraceBuilder<'_>,
67 ) -> Result<JsonValue, JsonLdLocatedError> {
68 let compactor = Compactor::new(context, options);
69
70 let compact = self.compact_fragment(&env, &compactor, location).await?;
71
72 let mut compact = compactor.wrap_in_graph(compact)?;
73 compact.embed_context(context.unprocessed())?;
74
75 Ok(compact)
76 }
77}