use super::*;
#[cfg_attr(feature = "derive-debug", derive(Debug))]
#[cfg_attr(feature = "derive-clone", derive(Clone))]
pub enum TermsOfServiceProperty {
Url(Url),
Text(Text),
#[cfg(any(all(feature = "fallible", feature = "serde"), doc))]
SerdeFail(crate::fallible::FailValue),
}
#[cfg(feature = "serde")]
mod serde {
use std::{fmt, fmt::Formatter};
use ::serde::{
de, de::Visitor, ser::SerializeStruct, Deserialize, Deserializer, Serialize, Serializer,
};
use super::*;
impl Serialize for TermsOfServiceProperty {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
match *self {
TermsOfServiceProperty::Url(ref inner) => inner.serialize(serializer),
TermsOfServiceProperty::Text(ref inner) => inner.serialize(serializer),
#[cfg(all(feature = "fallible", feature = "serde"))]
TermsOfServiceProperty::SerdeFail(ref inner) => inner.serialize(serializer),
}
}
}
impl<'de> Deserialize<'de> for TermsOfServiceProperty {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: Deserializer<'de>,
{
let content =
<::serde::__private::de::Content as Deserialize>::deserialize(deserializer)?;
let deserializer =
::serde::__private::de::ContentRefDeserializer::<D::Error>::new(&content);
if let Ok(ok) = Result::map(
<Url as Deserialize>::deserialize(deserializer),
TermsOfServiceProperty::Url,
) {
return Ok(ok);
}
if let Ok(ok) = Result::map(
<Text as Deserialize>::deserialize(deserializer),
TermsOfServiceProperty::Text,
) {
return Ok(ok);
}
#[cfg(all(feature = "fallible", feature = "serde"))]
if let Ok(ok) = Result::map(
<crate::fallible::FailValue as Deserialize>::deserialize(deserializer),
TermsOfServiceProperty::SerdeFail,
) {
return Ok(ok);
}
#[cfg(all(feature = "fallible", feature = "serde"))]
const CUSTOM_ERROR: &str = "data did neither match any variant of schema.org property termsOfService or was able to be deserialized into a generic value";
#[cfg(any(not(feature = "fallible"), not(feature = "serde")))]
const CUSTOM_ERROR: &str =
"data did not match any variant of schema.org property termsOfService";
Err(de::Error::custom(CUSTOM_ERROR))
}
}
}