#[derive(hard_xml::XmlWrite, hard_xml::XmlRead, Default, PartialEq, Clone, Debug)]
#[xml(tag = "CompanionAds")]
pub struct CompanionAds<'a> {
#[xml(attr = "required", default)]
pub required: Option<CompanionRequirement>,
#[xml(child = "Companion", default)]
pub companions: Vec<Companion<'a>>,
}
#[derive(PartialEq, Clone, Copy, Debug)]
pub enum CompanionRequirement {
All,
Any,
None,
}
impl std::str::FromStr for CompanionRequirement {
type Err = crate::VastParseError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
Ok(match s {
"all" => Self::All,
"any" => Self::Any,
"none" => Self::None,
_ => {
return Err(crate::VastParseError::new(format!(
"required attribute parsing error: '{s}'"
)));
}
})
}
}
impl std::fmt::Display for CompanionRequirement {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::All => write!(f, "all"),
Self::Any => write!(f, "any"),
Self::None => write!(f, "none"),
}
}
}
#[derive(hard_xml::XmlWrite, hard_xml::XmlRead, Default, PartialEq, Clone, Debug)]
#[xml(tag = "Companion")]
pub struct Companion<'a> {
#[xml(attr = "id", default)]
pub id: Option<std::borrow::Cow<'a, str>>,
#[xml(attr = "width", default)]
pub width: i32,
#[xml(attr = "height", default)]
pub height: i32,
#[xml(attr = "assetWidth", default)]
pub asset_width: Option<i32>,
#[xml(attr = "assetHeight", default)]
pub asset_height: Option<i32>,
#[xml(attr = "expandedWidth", default)]
pub expanded_width: Option<i32>,
#[xml(attr = "expandedHeight", default)]
pub expanded_height: Option<i32>,
#[xml(attr = "apiFramework", default)]
pub api_framework: Option<std::borrow::Cow<'a, str>>,
#[xml(attr = "adSlotId", default)]
pub ad_slot_id: Option<std::borrow::Cow<'a, str>>,
#[xml(attr = "pxratio", default)]
pub pxratio: Option<f32>,
#[xml(attr = "renderingMode", default)]
pub rendering_mode: Option<RenderingMode>,
#[xml(flatten_text = "HTMLResource", cdata, default)]
pub html_resources: Vec<std::borrow::Cow<'a, str>>,
#[xml(flatten_text = "IFrameResource", cdata, default)]
pub iframe_resources: Vec<std::borrow::Cow<'a, str>>,
#[xml(child = "StaticResource", default)]
pub static_resources: Vec<crate::StaticResource<'a>>,
#[xml(child = "AdParameters", default)]
pub ad_parameters: Option<crate::AdParameters<'a>>,
#[xml(flatten_text = "AltText", default)]
pub alt_text: Option<std::borrow::Cow<'a, str>>,
#[xml(flatten_text = "CompanionClickThrough", cdata, default)]
pub companion_click_through: Option<std::borrow::Cow<'a, str>>,
#[xml(child = "CompanionClickTracking", default)]
pub companion_click_trackings: Vec<CompanionClickTracking<'a>>,
#[xml(child = "CreativeExtensions", default)]
pub creative_extensiosn: Option<crate::CreativeExtensions>,
#[xml(child = "TrackingEvents", default)]
pub tracking_events: Option<crate::TrackingEvents<'a>>,
}
#[derive(Default, PartialEq, Clone, Copy, Debug)]
pub enum RenderingMode {
#[default]
Default,
EndCard,
Concurrent,
}
impl std::str::FromStr for RenderingMode {
type Err = crate::VastParseError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
Ok(match s {
"default" => Self::Default,
"end-card" => Self::EndCard,
"concurrent" => Self::Concurrent,
_ => {
return Err(crate::VastParseError::new(format!(
"rendering mode parsing error: '{s}'",
)));
}
})
}
}
impl std::fmt::Display for RenderingMode {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
RenderingMode::Default => write!(f, "default"),
RenderingMode::EndCard => write!(f, "end-card"),
RenderingMode::Concurrent => write!(f, "concurrent"),
}
}
}
#[derive(hard_xml::XmlWrite, hard_xml::XmlRead, Default, PartialEq, Clone, Debug)]
#[xml(tag = "CompanionClickTracking")]
pub struct CompanionClickTracking<'a> {
#[xml(attr = "id", default)]
pub id: std::borrow::Cow<'a, str>,
#[xml(text, cdata, default)]
pub uri: std::borrow::Cow<'a, str>,
}