use {
super::{Parse, ParserContext},
crate::{
domain::at_rules::font_face::{FontFaceAtRule, FontLanguageOverride},
CustomParseError,
},
cssparser::{
AtRuleParser,
CowRcStr,
DeclarationParser,
ParseError,
Parser,
},
};
pub(crate) struct FontFaceAtRuleParser<'a> {
pub(crate) context: &'a ParserContext,
pub(crate) rule: &'a mut FontFaceAtRule,
}
impl<'a, 'i> AtRuleParser<'i> for FontFaceAtRuleParser<'a> {
type Prelude = ();
type AtRule = ();
type Error = CustomParseError<'i>;
}
impl<'a, 'i> DeclarationParser<'i> for FontFaceAtRuleParser<'a> {
type Declaration = ();
type Error = CustomParseError<'i>;
fn parse_value<'t>(
&mut self,
name: CowRcStr<'i>,
input: &mut Parser<'i, 't>,
) -> Result<Self::Declaration, ParseError<'i, CustomParseError<'i>>> {
match_ignore_ascii_case! {
&name,
"font-family" => self.rule.family = Some(input.parse_entirely(|i| Parse::parse(self.context, i))?),
"src" => self.rule.sources = Some(input.parse_entirely(|i| Parse::parse(self.context, i))?),
"font-style" => self.rule.style = Some(input.parse_entirely(|i| Parse::parse(self.context, i))?),
"font-weight" => self.rule.weight = Some(input.parse_entirely(|i| Parse::parse(self.context, i))?),
"font-stretch" => self.rule.stretch = Some(input.parse_entirely(|i| Parse::parse(self.context, i))?),
"font-display" => self.rule.display = Some(input.parse_entirely(|i| Parse::parse(self.context, i))?),
"unicode-range" => self.rule.unicode_range = Some(input.parse_entirely(|i| Parse::parse(self.context, i))?),
"font-feature-settings" => self.rule.feature_settings = Some(input.parse_entirely(|i| Parse::parse(self.context, i))?),
"font-language-override" => self.rule.language_override = Some(input.parse_entirely(FontLanguageOverride::parse)?),
_ => return Err(ParseError::from(CustomParseError::UnsupportedFontFaceProperty(name.clone())))
}
Ok(())
}
}