linked_data_next/
reference.rs

1use 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}