Skip to main content

linked_data/ser/
properties.rs

1use rdf_syntax::Term;
2
3use crate::LinkedDataSerializer;
4
5pub trait SerializeLinkedDataPropertiesWith<Q, R: Clone + Ord = Term> {
6	fn serialize_rdf_properties_with<S>(
7		&self,
8		state: Q,
9		serializer: S,
10		graph: Option<&R>,
11		subject: &R,
12	) -> Result<S::Ok, S::Error>
13	where
14		S: LinkedDataSerializer<R>;
15}
16
17pub trait SerializeLinkedDataProperties<R: Clone + Ord = Term> {
18	fn serialize_rdf_properties<S>(
19		&self,
20		serializer: S,
21		graph: Option<&R>,
22		subject: &R,
23	) -> Result<S::Ok, S::Error>
24	where
25		S: LinkedDataSerializer<R>;
26}
27
28impl<Q, R: Clone + Ord, T: SerializeLinkedDataPropertiesWith<Q, R>>
29	SerializeLinkedDataPropertiesWith<Q, R> for &T
30{
31	fn serialize_rdf_properties_with<S>(
32		&self,
33		state: Q,
34		serializer: S,
35		graph: Option<&R>,
36		subject: &R,
37	) -> Result<S::Ok, S::Error>
38	where
39		S: LinkedDataSerializer<R>,
40	{
41		T::serialize_rdf_properties_with(*self, state, serializer, graph, subject)
42	}
43}
44
45impl<R: Clone + Ord, T: SerializeLinkedDataProperties<R>> SerializeLinkedDataProperties<R> for &T {
46	fn serialize_rdf_properties<S>(
47		&self,
48		serializer: S,
49		graph: Option<&R>,
50		subject: &R,
51	) -> Result<S::Ok, S::Error>
52	where
53		S: LinkedDataSerializer<R>,
54	{
55		T::serialize_rdf_properties(*self, serializer, graph, subject)
56	}
57}
58
59impl<Q, R: Clone + Ord, T: SerializeLinkedDataPropertiesWith<Q, R>>
60	SerializeLinkedDataPropertiesWith<Q, R> for Option<T>
61{
62	fn serialize_rdf_properties_with<S>(
63		&self,
64		state: Q,
65		serializer: S,
66		graph: Option<&R>,
67		subject: &R,
68	) -> Result<S::Ok, S::Error>
69	where
70		S: LinkedDataSerializer<R>,
71	{
72		match self {
73			Some(t) => t.serialize_rdf_properties_with(state, serializer, graph, subject),
74			None => serializer.end(),
75		}
76	}
77}
78
79impl<R: Clone + Ord, T: SerializeLinkedDataProperties<R>> SerializeLinkedDataProperties<R>
80	for Option<T>
81{
82	fn serialize_rdf_properties<S>(
83		&self,
84		serializer: S,
85		graph: Option<&R>,
86		subject: &R,
87	) -> Result<S::Ok, S::Error>
88	where
89		S: LinkedDataSerializer<R>,
90	{
91		match self {
92			Some(t) => t.serialize_rdf_properties(serializer, graph, subject),
93			None => serializer.end(),
94		}
95	}
96}