use {
super::Atom,
crate::CustomParseError,
cssparser::{CowRcStr, ParseError, ToCss},
std::fmt,
};
#[derive(Clone, Debug, Eq, Hash, PartialEq)]
pub struct CustomIdent(pub Atom);
impl CustomIdent {
pub(crate) fn from_ident<'i>(
ident: &CowRcStr<'i>,
excluding: &[&str],
) -> Result<Self, ParseError<'i, CustomParseError<'i>>> {
match_ignore_ascii_case! {
ident,
"initial" | "inherit" | "unset" | "default" => return Err(ParseError::from(CustomParseError::UnexpectedCustomIdent(ident.clone()))),
_ =>
{
}
};
if excluding.iter().any(|s| ident.eq_ignore_ascii_case(s)) {
Err(ParseError::from(CustomParseError::CustomIdentWasExcluded(
ident.clone(),
)))
} else {
Ok(CustomIdent(Atom::from(ident)))
}
}
}
impl ToCss for CustomIdent {
fn to_css<W: fmt::Write>(&self, dest: &mut W) -> fmt::Result {
self.0.to_css(dest)
}
}