schema_org_types/schemas/properties/
default_value.rs

1use super::*;
2/// <https://schema.org/defaultValue>
3#[cfg_attr(feature = "derive-debug", derive(Debug))]
4#[cfg_attr(feature = "derive-clone", derive(Clone))]
5pub enum DefaultValueProperty {
6	/// <https://schema.org/Thing>
7	Thing(Thing),
8	/// <https://schema.org/Text>
9	Text(Text),
10	#[cfg(any(all(feature = "fallible", feature = "serde"), doc))]
11	SerdeFail(crate::fallible::FailValue),
12}
13#[cfg(feature = "serde")]
14mod serde {
15	use std::{fmt, fmt::Formatter};
16
17	use ::serde::{
18		de, de::Visitor, ser::SerializeStruct, Deserialize, Deserializer, Serialize, Serializer,
19	};
20
21	use super::*;
22	impl Serialize for DefaultValueProperty {
23		fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
24		where
25			S: Serializer,
26		{
27			match *self {
28				DefaultValueProperty::Thing(ref inner) => inner.serialize(serializer),
29				DefaultValueProperty::Text(ref inner) => inner.serialize(serializer),
30				#[cfg(all(feature = "fallible", feature = "serde"))]
31				DefaultValueProperty::SerdeFail(ref inner) => inner.serialize(serializer),
32			}
33		}
34	}
35	impl<'de> Deserialize<'de> for DefaultValueProperty {
36		fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
37		where
38			D: Deserializer<'de>,
39		{
40			let content =
41				<::serde::__private::de::Content as Deserialize>::deserialize(deserializer)?;
42			let deserializer =
43				::serde::__private::de::ContentRefDeserializer::<D::Error>::new(&content);
44			if let Ok(ok) = Result::map(
45				<Thing as Deserialize>::deserialize(deserializer),
46				DefaultValueProperty::Thing,
47			) {
48				return Ok(ok);
49			}
50			if let Ok(ok) = Result::map(
51				<Text as Deserialize>::deserialize(deserializer),
52				DefaultValueProperty::Text,
53			) {
54				return Ok(ok);
55			}
56			#[cfg(all(feature = "fallible", feature = "serde"))]
57			if let Ok(ok) = Result::map(
58				<crate::fallible::FailValue as Deserialize>::deserialize(deserializer),
59				DefaultValueProperty::SerdeFail,
60			) {
61				return Ok(ok);
62			}
63			#[cfg(all(feature = "fallible", feature = "serde"))]
64			const CUSTOM_ERROR: &str = "data did neither match any variant of schema.org property defaultValue or was able to be deserialized into a generic value";
65			#[cfg(any(not(feature = "fallible"), not(feature = "serde")))]
66			const CUSTOM_ERROR: &str =
67				"data did not match any variant of schema.org property defaultValue";
68			Err(de::Error::custom(CUSTOM_ERROR))
69		}
70	}
71}