#[derive(hard_xml::XmlWrite, hard_xml::XmlRead, Default, PartialEq, Clone, Debug)]
#[xml(tag = "Ad", strict(unknown_attribute, unknown_element))]
pub struct Ad<'a> {
#[xml(attr = "id", default)]
pub id: Option<std::borrow::Cow<'a, str>>,
#[xml(attr = "sequence", default)]
pub sequence: Option<i32>,
#[deprecated(since = "VAST 4.1")]
#[xml(attr = "conditionalAd", default)]
pub conditional_ad: Option<bool>,
#[xml(attr = "adType", default)]
pub ad_type: Option<std::borrow::Cow<'a, str>>,
#[xml(child = "InLine", default)]
pub in_line: Option<crate::InLine<'a>>,
#[xml(child = "Wrapper", default)]
pub wrapper: Option<crate::Wrapper<'a>>,
}
#[derive(Default, PartialEq, Clone, Copy, Debug)]
pub enum AdType {
#[default]
Video,
Audio,
Hybrid,
}
impl std::str::FromStr for AdType {
type Err = crate::VastParseError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
Ok(match s {
"video" => Self::Video,
"audio" => Self::Audio,
"hybrid" => Self::Hybrid,
_ => return Err(crate::VastParseError::new(format!("ad type parsing error: '{s}'"))),
})
}
}
impl std::fmt::Display for AdType {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
AdType::Video => write!(f, "video"),
AdType::Audio => write!(f, "audio"),
AdType::Hybrid => write!(f, "hybrid"),
}
}
}