schema_org_types/schemas/properties/
exchange_rate_spread.rs

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