jsonld_serialization/
lib.rs1use std::hash::Hash;
12
13use jsonld_core::{ExpandedDocument, Node, Object};
14
15use ld_core::{LinkedData, LinkedDataResource, LinkedDataSubject};
16use rdfx::{
17 Interpretation,
18 interpretation::{ReverseInterpretation, ReverseLocalInterpretation},
19 vocabulary::Vocabulary,
20};
21
22mod expanded;
23
24use expanded::SerializeExpandedDocument;
25
26pub use expanded::{serialize_node_with, serialize_object_with};
27
28#[derive(Debug, thiserror::Error)]
29pub enum Error {
31 #[error("invalid graph label")]
32 InvalidGraph,
34
35 #[error("invalid predicate")]
36 InvalidPredicate,
38
39 #[error("invalid node object")]
40 InvalidNode,
42
43 #[error("reverse properties on lists are not supported")]
44 ListReverseProperty,
46
47 #[error("included nodes on lists are not supported")]
48 ListInclude,
50}
51
52type DefaultInterpretation = rdfx::generator::LocalGeneratorInterpretation<rdfx::generator::Blank>;
53
54fn default_interpretation() -> DefaultInterpretation {
55 rdfx::generator::LocalGeneratorInterpretation::new(rdfx::generator::Blank::new())
56}
57
58pub fn serialize(value: &impl LinkedData<DefaultInterpretation>) -> Result<ExpandedDocument, Error> {
64 serialize_with(&mut (), &mut default_interpretation(), value)
65}
66
67pub fn serialize_with<V, I>(vocabulary: &mut V, interpretation: &mut I, value: &impl LinkedData<I>) -> Result<ExpandedDocument<V::Iri, V::BlankId>, Error>
74where
75 V: Vocabulary + rdfx::vocabulary::VocabularyMut,
76 V::Iri: Clone + Eq + Hash,
77 V::BlankId: Clone + Eq + Hash,
78 I: Interpretation + ReverseInterpretation + ReverseLocalInterpretation,
79{
80 let serializer = SerializeExpandedDocument::new(vocabulary, interpretation);
81
82 value.visit(serializer)
83}
84
85pub fn serialize_object(value: &(impl LinkedDataSubject<DefaultInterpretation> + LinkedDataResource<DefaultInterpretation>)) -> Result<Object, Error> {
91 serialize_object_with(&mut (), &mut default_interpretation(), value)
92}
93
94pub fn serialize_node(value: &(impl LinkedDataSubject<DefaultInterpretation> + LinkedDataResource<DefaultInterpretation>)) -> Result<Node, Error> {
100 serialize_node_with(&mut (), &mut default_interpretation(), value)
101}