Skip to main content

ld_core/
reference.rs

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))]
10/// Wrapper serializing its value as a reference: the subject is emitted
11/// as an object, without its own properties.
12pub 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}