1use rdfx::Interpretation;
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);
13
14impl<T> From<T> for Ref<T> {
15 fn from(value: T) -> Self {
16 Self(value)
17 }
18}
19
20impl<I: Interpretation, T: LinkedDataResource<I>> LinkedDataResource<I> for Ref<T> {
21 fn interpretation(&self, interpretation: &mut I) -> crate::ResourceInterpretation<'_, I> {
22 T::reference_interpretation(&self.0, interpretation)
23 }
24}
25
26impl<I: Interpretation, T> LinkedDataSubject<I> for Ref<T> {
27 fn visit_subject<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
28 where
29 S: crate::SubjectVisitor<I>,
30 {
31 serializer.end()
32 }
33}
34
35impl<I: Interpretation, T: LinkedDataResource<I>> LinkedDataPredicateObjects<I> for Ref<T> {
36 fn visit_objects<S>(&self, mut visitor: S) -> Result<S::Ok, S::Error>
37 where
38 S: crate::PredicateObjectsVisitor<I>,
39 {
40 visitor.object(self)?;
41 visitor.end()
42 }
43}
44
45impl<I: Interpretation, T: LinkedDataResource<I>> LinkedDataGraph<I> for Ref<T> {
46 fn visit_graph<S>(&self, mut visitor: S) -> Result<S::Ok, S::Error>
47 where
48 S: crate::GraphVisitor<I>,
49 {
50 visitor.subject(self)?;
51 visitor.end()
52 }
53}
54
55impl<I: Interpretation, T: LinkedDataResource<I>> LinkedData<I> for Ref<T> {
56 fn visit<S>(&self, mut visitor: S) -> Result<S::Ok, S::Error>
57 where
58 S: crate::Visitor<I>,
59 {
60 visitor.default_graph(self)?;
61 visitor.end()
62 }
63}