Skip to main content

json_ld/algorithms/serialization/
mod.rs

1use 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}