schema_org_types/schemas/properties/
value_reference.rs

1use super::*;
2/// <https://schema.org/valueReference>
3#[cfg_attr(feature = "derive-debug", derive(Debug))]
4#[cfg_attr(feature = "derive-clone", derive(Clone))]
5pub enum ValueReferenceProperty {
6	/// <https://schema.org/DefinedTerm>
7	DefinedTerm(DefinedTerm),
8	/// <https://schema.org/Enumeration>
9	Enumeration(Enumeration),
10	/// <https://schema.org/PropertyValue>
11	PropertyValue(PropertyValue),
12	/// <https://schema.org/QualitativeValue>
13	QualitativeValue(QualitativeValue),
14	/// <https://schema.org/QuantitativeValue>
15	QuantitativeValue(QuantitativeValue),
16	/// <https://schema.org/StructuredValue>
17	StructuredValue(StructuredValue),
18	/// <https://schema.org/MeasurementTypeEnumeration>
19	MeasurementTypeEnumeration(MeasurementTypeEnumeration),
20	/// <https://schema.org/Text>
21	Text(Text),
22	#[cfg(any(all(feature = "fallible", feature = "serde"), doc))]
23	SerdeFail(crate::fallible::FailValue),
24}
25#[cfg(feature = "serde")]
26mod serde {
27	use std::{fmt, fmt::Formatter};
28
29	use ::serde::{
30		de, de::Visitor, ser::SerializeStruct, Deserialize, Deserializer, Serialize, Serializer,
31	};
32
33	use super::*;
34	impl Serialize for ValueReferenceProperty {
35		fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
36		where
37			S: Serializer,
38		{
39			match *self {
40				ValueReferenceProperty::DefinedTerm(ref inner) => inner.serialize(serializer),
41				ValueReferenceProperty::Enumeration(ref inner) => inner.serialize(serializer),
42				ValueReferenceProperty::PropertyValue(ref inner) => inner.serialize(serializer),
43				ValueReferenceProperty::QualitativeValue(ref inner) => inner.serialize(serializer),
44				ValueReferenceProperty::QuantitativeValue(ref inner) => inner.serialize(serializer),
45				ValueReferenceProperty::StructuredValue(ref inner) => inner.serialize(serializer),
46				ValueReferenceProperty::MeasurementTypeEnumeration(ref inner) => {
47					inner.serialize(serializer)
48				}
49				ValueReferenceProperty::Text(ref inner) => inner.serialize(serializer),
50				#[cfg(all(feature = "fallible", feature = "serde"))]
51				ValueReferenceProperty::SerdeFail(ref inner) => inner.serialize(serializer),
52			}
53		}
54	}
55	impl<'de> Deserialize<'de> for ValueReferenceProperty {
56		fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
57		where
58			D: Deserializer<'de>,
59		{
60			let content =
61				<::serde::__private::de::Content as Deserialize>::deserialize(deserializer)?;
62			let deserializer =
63				::serde::__private::de::ContentRefDeserializer::<D::Error>::new(&content);
64			if let Ok(ok) = Result::map(
65				<DefinedTerm as Deserialize>::deserialize(deserializer),
66				ValueReferenceProperty::DefinedTerm,
67			) {
68				return Ok(ok);
69			}
70			if let Ok(ok) = Result::map(
71				<Enumeration as Deserialize>::deserialize(deserializer),
72				ValueReferenceProperty::Enumeration,
73			) {
74				return Ok(ok);
75			}
76			if let Ok(ok) = Result::map(
77				<PropertyValue as Deserialize>::deserialize(deserializer),
78				ValueReferenceProperty::PropertyValue,
79			) {
80				return Ok(ok);
81			}
82			if let Ok(ok) = Result::map(
83				<QualitativeValue as Deserialize>::deserialize(deserializer),
84				ValueReferenceProperty::QualitativeValue,
85			) {
86				return Ok(ok);
87			}
88			if let Ok(ok) = Result::map(
89				<QuantitativeValue as Deserialize>::deserialize(deserializer),
90				ValueReferenceProperty::QuantitativeValue,
91			) {
92				return Ok(ok);
93			}
94			if let Ok(ok) = Result::map(
95				<StructuredValue as Deserialize>::deserialize(deserializer),
96				ValueReferenceProperty::StructuredValue,
97			) {
98				return Ok(ok);
99			}
100			if let Ok(ok) = Result::map(
101				<MeasurementTypeEnumeration as Deserialize>::deserialize(deserializer),
102				ValueReferenceProperty::MeasurementTypeEnumeration,
103			) {
104				return Ok(ok);
105			}
106			if let Ok(ok) = Result::map(
107				<Text as Deserialize>::deserialize(deserializer),
108				ValueReferenceProperty::Text,
109			) {
110				return Ok(ok);
111			}
112			#[cfg(all(feature = "fallible", feature = "serde"))]
113			if let Ok(ok) = Result::map(
114				<crate::fallible::FailValue as Deserialize>::deserialize(deserializer),
115				ValueReferenceProperty::SerdeFail,
116			) {
117				return Ok(ok);
118			}
119			#[cfg(all(feature = "fallible", feature = "serde"))]
120			const CUSTOM_ERROR: &str = "data did neither match any variant of schema.org property valueReference or was able to be deserialized into a generic value";
121			#[cfg(any(not(feature = "fallible"), not(feature = "serde")))]
122			const CUSTOM_ERROR: &str =
123				"data did not match any variant of schema.org property valueReference";
124			Err(de::Error::custom(CUSTOM_ERROR))
125		}
126	}
127}