linked_data_next/
reference.rs1use rdf_types::{Interpretation, Vocabulary};
2
3use crate::{
4 LinkedData, LinkedDataGraph, LinkedDataPredicateObjects, LinkedDataResource, LinkedDataSubject,
5};
6
7#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
8#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
9#[cfg_attr(feature = "serde", serde(transparent))]
10pub struct Ref<T>(pub T);
11
12impl<T> From<T> for Ref<T> {
13 fn from(value: T) -> Self {
14 Self(value)
15 }
16}
17
18impl<I: Interpretation, V: Vocabulary, T: LinkedDataResource<I, V>> LinkedDataResource<I, V>
19 for Ref<T>
20{
21 fn interpretation(
22 &self,
23 vocabulary: &mut V,
24 interpretation: &mut I,
25 ) -> crate::ResourceInterpretation<I, V> {
26 T::reference_interpretation(&self.0, vocabulary, interpretation)
27 }
28}
29
30impl<I: Interpretation, V: Vocabulary, T> LinkedDataSubject<I, V> for Ref<T> {
31 fn visit_subject<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
32 where
33 S: crate::SubjectVisitor<I, V>,
34 {
35 serializer.end()
36 }
37}
38
39impl<I: Interpretation, V: Vocabulary, T: LinkedDataResource<I, V>> LinkedDataPredicateObjects<I, V>
40 for Ref<T>
41{
42 fn visit_objects<S>(&self, mut visitor: S) -> Result<S::Ok, S::Error>
43 where
44 S: crate::PredicateObjectsVisitor<I, V>,
45 {
46 visitor.object(self)?;
47 visitor.end()
48 }
49}
50
51impl<I: Interpretation, V: Vocabulary, T: LinkedDataResource<I, V>> LinkedDataGraph<I, V>
52 for Ref<T>
53{
54 fn visit_graph<S>(&self, mut visitor: S) -> Result<S::Ok, S::Error>
55 where
56 S: crate::GraphVisitor<I, V>,
57 {
58 visitor.subject(self)?;
59 visitor.end()
60 }
61}
62
63impl<I: Interpretation, V: Vocabulary, T: LinkedDataResource<I, V>> LinkedData<I, V> for Ref<T> {
64 fn visit<S>(&self, mut visitor: S) -> Result<S::Ok, S::Error>
65 where
66 S: crate::Visitor<I, V>,
67 {
68 visitor.default_graph(self)?;
69 visitor.end()
70 }
71}