parcel_css/rules/
viewport.rs

1//! The `@viewport` rule.
2
3use super::Location;
4use crate::declaration::DeclarationBlock;
5use crate::error::PrinterError;
6use crate::printer::Printer;
7use crate::traits::ToCss;
8use crate::vendor_prefix::VendorPrefix;
9
10/// A [@viewport](https://drafts.csswg.org/css-device-adapt/#atviewport-rule) rule.
11#[derive(Debug, PartialEq, Clone)]
12#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
13pub struct ViewportRule<'i> {
14  /// The vendor prefix for this rule, e.g. `@-ms-viewport`.
15  pub vendor_prefix: VendorPrefix,
16  /// The declarations within the `@viewport` rule.
17  #[cfg_attr(feature = "serde", serde(borrow))]
18  pub declarations: DeclarationBlock<'i>,
19  /// The location of the rule in the source file.
20  pub loc: Location,
21}
22
23impl<'i> ToCss for ViewportRule<'i> {
24  fn to_css<W>(&self, dest: &mut Printer<W>) -> Result<(), PrinterError>
25  where
26    W: std::fmt::Write,
27  {
28    dest.add_mapping(self.loc);
29    dest.write_char('@')?;
30    self.vendor_prefix.to_css(dest)?;
31    dest.write_str("viewport")?;
32    self.declarations.to_css_block(dest)
33  }
34}