json_ld/algorithms/serialization/object/
mod.rs1use linked_data::{DeserializeLinkedData, LinkedDataDeserializer};
2use rdf_syntax::Term;
3
4use crate::JsonLdObject;
5
6mod list;
7mod node;
8mod value;
9
10use list::*;
11use node::*;
12use value::*;
13
14impl DeserializeLinkedData for JsonLdObject {
15 fn deserialize_rdf<D>(mut deserializer: D, graph: Option<&Term>) -> Result<Self, D::Error>
16 where
17 D: LinkedDataDeserializer,
18 {
19 let subject = match deserializer.deserialize_resource(graph.cloned())? {
20 Some(subject) => {
21 if let Some(other) = deserializer.deserialize_resource(graph.cloned())? {
22 return Err(linked_data::de::Error::unexpected_resource(&other));
23 }
24
25 subject
26 }
27 None => return Err(linked_data::de::Error::missing_resource()),
28 };
29
30 deserialize_object(&mut deserializer, &subject, graph)
31 }
32}
33
34pub fn deserialize_object<R, D>(
35 deserializer: &mut D,
36 subject: &R,
37 graph: Option<&R>,
38) -> Result<JsonLdObject, D::Error>
39where
40 R: Clone + PartialEq,
41 D: LinkedDataDeserializer<R>,
42{
43 if let Some(value) = try_deserialize_value_object(deserializer, subject)? {
44 return Ok(JsonLdObject::Value(value));
45 }
46
47 if let Some(list) = try_deserialize_list_object(deserializer, subject, graph)? {
48 return Ok(JsonLdObject::List(list));
49 }
50
51 deserialize_node_object(deserializer, subject, graph).map(JsonLdObject::node)
52}
53
54fn deserialize_object_ref<R, D>(
55 deserializer: &mut D,
56 subject: &R,
57 graph: Option<&R>,
58) -> Result<JsonLdObject, D::Error>
59where
60 R: Clone + PartialEq,
61 D: LinkedDataDeserializer<R>,
62{
63 if let Some(value) = try_deserialize_value_object(deserializer, subject)? {
64 return Ok(JsonLdObject::Value(value));
65 }
66
67 if let Some(list) = try_deserialize_list_object(deserializer, subject, graph)? {
68 return Ok(JsonLdObject::List(list));
69 }
70
71 deserialize_node_object_ref(deserializer, subject).map(JsonLdObject::node)
72}