parcel_css/rules/
namespace.rs

1//! The `@namespace` rule.
2
3use super::Location;
4use crate::error::PrinterError;
5use crate::printer::Printer;
6use crate::traits::ToCss;
7use crate::values::string::CowArcStr;
8use cssparser::*;
9
10/// A [@namespace](https://drafts.csswg.org/css-namespaces/#declaration) rule.
11#[derive(Debug, PartialEq, Clone)]
12#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
13pub struct NamespaceRule<'i> {
14  /// An optional namespace prefix to declare, or `None` to declare the default namespace.
15  #[cfg_attr(feature = "serde", serde(borrow))]
16  pub prefix: Option<CowArcStr<'i>>,
17  /// The url of the namespace.
18  #[cfg_attr(feature = "serde", serde(borrow))]
19  pub url: CowArcStr<'i>,
20  /// The location of the rule in the source file.
21  pub loc: Location,
22}
23
24impl<'i> ToCss for NamespaceRule<'i> {
25  fn to_css<W>(&self, dest: &mut Printer<W>) -> Result<(), PrinterError>
26  where
27    W: std::fmt::Write,
28  {
29    dest.add_mapping(self.loc);
30    dest.write_str("@namespace ")?;
31    if let Some(prefix) = &self.prefix {
32      serialize_identifier(&prefix, dest)?;
33      dest.write_char(' ')?;
34    }
35
36    serialize_string(&self.url, dest)?;
37    dest.write_char(';')
38  }
39}