#[derive(Clone, Debug, PartialEq)]
pub struct ViewportAtRule
{
pub vendor_prefix: Option<VendorPrefix>,
pub declarations: Vec<ViewportDescriptorDeclaration>
}
impl ViewportAtRule
{
pub(crate) fn parse_body<'i, 't>(vendor_prefix: Option<VendorPrefix>, context: &ParserContext, input: &mut Parser<'i, 't>) -> Result<Self, ParseError<'i, CustomParseError<'i>>>
{
let parser = ViewportAtRuleParser { context };
let mut declarations = Vec::new();
let mut parser = DeclarationListParser::new(input, parser);
while let Some(result) = parser.next()
{
match result
{
Ok(viewportDescriptorDeclaration) =>
{
declarations.push(viewportDescriptorDeclaration);
}
Err(preciseParseError) => return Err(preciseParseError.error),
}
}
Ok(Self { vendor_prefix, declarations })
}
}
impl ToCss for ViewportAtRule
{
fn to_css<W: fmt::Write>(&self, dest: &mut W) -> fmt::Result
{
dest.write_char('@')?;
if let Some(ref vendorPrefix) = self.vendor_prefix
{
vendorPrefix.to_css(dest)?;
}
dest.write_str("viewport{")?;
let mut iter = self.declarations.iter();
iter.next().unwrap().to_css(dest)?;
for declaration in iter
{
declaration.to_css(dest)?;
}
dest.write_char('}')
}
}
impl HasVendorPrefix for ViewportAtRule
{
#[inline(always)]
fn isNotVendorPrefixed(&self) -> bool
{
self.vendor_prefix.is_none()
}
}