1use rdf_syntax::{
2 GenInterpretation, IndexedBTreeDataset, Quad, Term, TryInterpretationMut,
3 TryReverseInterpretation, generator::BlankIdGenerator,
4};
5
6use crate::{
7 DeserializeLinkedData,
8 de::{
9 DatasetDeserializer, DatasetDeserializerError, DeserializeLinkedDataWith,
10 ResourcesDeserializer,
11 },
12};
13
14pub type QuadsDeserializationFailed = DatasetDeserializerError;
15
16pub fn from_rdf_quads<T>(
18 quads: impl IntoIterator<Item = Quad<Term>>,
19 resources: impl IntoIterator<Item = Term>,
20) -> Result<T, QuadsDeserializationFailed>
21where
22 T: DeserializeLinkedData,
23{
24 from_rdf_quads_interpretation(
25 quads,
26 resources,
27 GenInterpretation::new(BlankIdGenerator::new()),
28 )
29}
30
31pub fn from_rdf_quads_with<Q, T>(
33 quads: impl IntoIterator<Item = Quad<Term>>,
34 resources: impl IntoIterator<Item = Term>,
35 state: Q,
36) -> Result<T, QuadsDeserializationFailed>
37where
38 T: DeserializeLinkedDataWith<Q>,
39{
40 from_rdf_quads_interpretation_with(
41 quads,
42 resources,
43 GenInterpretation::new(BlankIdGenerator::new()),
44 state,
45 )
46}
47
48pub fn from_rdf_quads_interpretation<I, T>(
51 quads: impl IntoIterator<Item = Quad<I::Resource>>,
52 resources: impl IntoIterator<Item = I::Resource>,
53 interpretation: I,
54) -> Result<T, QuadsDeserializationFailed>
55where
56 I: TryInterpretationMut + TryReverseInterpretation,
57 I::Resource: Clone + Ord,
58 T: DeserializeLinkedData<I::Resource>,
59{
60 let dataset: IndexedBTreeDataset<I::Resource> = quads.into_iter().collect();
61 T::deserialize_rdf(
62 ResourcesDeserializer::new(DatasetDeserializer::new(dataset, interpretation), resources),
63 None,
64 )
65}
66
67pub fn from_rdf_quads_interpretation_with<Q, I, T>(
70 quads: impl IntoIterator<Item = Quad<I::Resource>>,
71 resources: impl IntoIterator<Item = I::Resource>,
72 interpretation: I,
73 state: Q,
74) -> Result<T, QuadsDeserializationFailed>
75where
76 I: TryInterpretationMut + TryReverseInterpretation,
77 I::Resource: Clone + Ord,
78 T: DeserializeLinkedDataWith<Q, I::Resource>,
79{
80 let dataset: IndexedBTreeDataset<I::Resource> = quads.into_iter().collect();
81 T::deserialize_rdf_with(
82 state,
83 ResourcesDeserializer::new(DatasetDeserializer::new(dataset, interpretation), resources),
84 None,
85 )
86}