use {
super::PageSelectorPseudoClass,
crate::domain::{
properties::{Importance, PropertyDeclaration, PropertyDeclarations},
HasPropertyDeclarations,
},
cssparser::ToCss,
std::fmt,
};
#[derive(Default, Debug, Clone, Ord, PartialOrd, Eq, PartialEq, Hash)]
pub struct PageAtRule {
pub page_selector_pseudo_class: Option<PageSelectorPseudoClass>,
pub property_declarations: PropertyDeclarations<Importance>,
}
impl ToCss for PageAtRule {
fn to_css<W: fmt::Write>(&self, dest: &mut W) -> fmt::Result {
dest.write_str("@page")?;
if let Some(ref page_selector_pseudo_class) =
self.page_selector_pseudo_class
{
dest.write_char(' ')?;
page_selector_pseudo_class.to_css(dest)?;
}
dest.write_char('{')?;
self.property_declarations.to_css(dest)?;
dest.write_char('}')
}
}
impl HasPropertyDeclarations<Importance> for PageAtRule {
#[inline(always)]
fn property_declarations(&self) -> &PropertyDeclarations<Importance> {
&self.property_declarations
}
#[inline(always)]
fn property_declarations_mut(
&mut self,
) -> &mut PropertyDeclarations<Importance> {
&mut self.property_declarations
}
#[inline(always)]
fn property_declarations_slice(
&self,
) -> &[PropertyDeclaration<Importance>] {
&self.property_declarations.0[..]
}
#[inline(always)]
fn property_declarations_vec(
&self,
) -> &Vec<PropertyDeclaration<Importance>> {
&self.property_declarations.0
}
#[inline(always)]
fn property_declarations_vec_mut(
&mut self,
) -> &mut Vec<PropertyDeclaration<Importance>> {
&mut self.property_declarations.0
}
}