json_ld/algorithms/serialization/
mod.rs1use linked_data::{DeserializeLinkedData, LinkedDataDeserializer};
2use rdf_syntax::{Quad, Term};
3
4use crate::{JsonLdExpandedDocument, JsonLdIndexed};
5
6mod object;
7
8use object::*;
9
10impl<R> DeserializeLinkedData<R> for JsonLdExpandedDocument
11where
12 R: Clone + Ord,
13{
14 fn deserialize_rdf<D>(mut deserializer: D, graph: Option<&R>) -> Result<Self, D::Error>
15 where
16 D: LinkedDataDeserializer<R>,
17 {
18 let mut result = Self::new();
19
20 while let Some(Quad(subject, _, _, _)) =
21 deserializer.peek_quad(Quad(None, None, None, Some(graph)))?
22 {
23 let subject = subject.clone();
24 result.insert(JsonLdIndexed::unindexed(deserialize_object(
25 &mut deserializer,
26 &subject,
27 graph,
28 )?));
29 }
30
31 Ok(result)
32 }
33}
34
35impl<T: DeserializeLinkedData> DeserializeLinkedData for JsonLdIndexed<T> {
36 fn deserialize_rdf<D>(deserializer: D, graph: Option<&Term>) -> Result<Self, D::Error>
37 where
38 D: LinkedDataDeserializer<Term>,
39 {
40 T::deserialize_rdf(deserializer, graph).map(Self::unindexed)
41 }
42}