use super::*;
#[cfg_attr(feature = "derive-debug", derive(Debug))]
#[cfg_attr(feature = "derive-clone", derive(Clone))]
pub enum IsRelatedToProperty {
Product(Product),
Service(Service),
#[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 IsRelatedToProperty {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
match *self {
IsRelatedToProperty::Product(ref inner) => inner.serialize(serializer),
IsRelatedToProperty::Service(ref inner) => inner.serialize(serializer),
#[cfg(all(feature = "fallible", feature = "serde"))]
IsRelatedToProperty::SerdeFail(ref inner) => inner.serialize(serializer),
}
}
}
impl<'de> Deserialize<'de> for IsRelatedToProperty {
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(
<Product as Deserialize>::deserialize(deserializer),
IsRelatedToProperty::Product,
) {
return Ok(ok);
}
if let Ok(ok) = Result::map(
<Service as Deserialize>::deserialize(deserializer),
IsRelatedToProperty::Service,
) {
return Ok(ok);
}
#[cfg(all(feature = "fallible", feature = "serde"))]
if let Ok(ok) = Result::map(
<crate::fallible::FailValue as Deserialize>::deserialize(deserializer),
IsRelatedToProperty::SerdeFail,
) {
return Ok(ok);
}
#[cfg(all(feature = "fallible", feature = "serde"))]
const CUSTOM_ERROR: &str = "data did neither match any variant of schema.org property isRelatedTo 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 isRelatedTo";
Err(de::Error::custom(CUSTOM_ERROR))
}
}
}