json_ld/algorithms/deserialization/
mod.rs1use linked_data::{LinkedDataSerializer, SerializeLinkedData, ser::SerializeLinkedDataWith};
2use rdf_syntax::{Id, Term};
3
4use crate::{JsonLdExpandedDocument, JsonLdLenient, JsonLdValidate};
5
6mod object;
7
8#[derive(Clone, Default)]
10pub struct RdfSerializationOptions {
11 pub produce_generalized_rdf: bool,
17}
18
19impl SerializeLinkedDataWith<RdfSerializationOptions> for JsonLdExpandedDocument {
20 fn serialize_rdf_with<S>(
21 &self,
22 opts: RdfSerializationOptions,
23 mut serializer: S,
24 graph: Option<&Term>,
25 ) -> Result<S::Ok, S::Error>
26 where
27 S: LinkedDataSerializer<Term>,
28 {
29 for object in self {
30 object.serialize_rdf_with(opts.clone(), serializer.as_dyn_mut(), graph)?;
31 }
32
33 serializer.end()
34 }
35}
36
37impl SerializeLinkedData for JsonLdExpandedDocument {
38 fn serialize_rdf<S>(&self, serializer: S, graph: Option<&Term>) -> Result<S::Ok, S::Error>
39 where
40 S: LinkedDataSerializer<Term>,
41 {
42 self.serialize_rdf_with(RdfSerializationOptions::default(), serializer, graph)
43 }
44}
45
46impl JsonLdLenient<Id> {
47 pub fn serialize_rdf_term<S>(&self, serializer: &mut S) -> Result<Term, S::Error>
48 where
49 S: LinkedDataSerializer,
50 {
51 match self {
52 Self::Valid(id) => Ok(id.clone().into()),
53 Self::Invalid(_) => serializer.interpret(None),
54 }
55 }
56}
57
58impl<T, Q> SerializeLinkedDataWith<Q> for JsonLdLenient<T>
59where
60 T: JsonLdValidate + SerializeLinkedDataWith<Q>,
61{
62 fn serialize_rdf_with<S>(
63 &self,
64 state: Q,
65 serializer: S,
66 graph: Option<&Term>,
67 ) -> Result<S::Ok, S::Error>
68 where
69 S: LinkedDataSerializer<Term>,
70 {
71 match self {
72 Self::Valid(t) => t.serialize_rdf_with(state, serializer, graph),
73 Self::Invalid(_) => serializer.end(),
74 }
75 }
76}
77
78impl<T> SerializeLinkedData for JsonLdLenient<T>
79where
80 T: JsonLdValidate + SerializeLinkedData,
81{
82 fn serialize_rdf<S>(&self, serializer: S, graph: Option<&Term>) -> Result<S::Ok, S::Error>
83 where
84 S: LinkedDataSerializer<Term>,
85 {
86 match self {
87 Self::Valid(id) => id.serialize_rdf(serializer, graph),
88 Self::Invalid(_) => serializer.end(),
89 }
90 }
91}