oxc_css_parser/parser/at_rule/
custom_media.rs1use super::Parser;
2use crate::{
3 Parse,
4 ast::*,
5 error::PResult,
6 peek,
7 pos::{Span, Spanned},
8 tokenizer::Token,
9};
10
11impl<'cmt, 's: 'cmt> Parse<'cmt, 's> for CustomMedia<'s> {
13 fn parse(input: &mut Parser<'cmt, 's>) -> PResult<Self> {
14 let name = input.parse_dashed_ident()?;
15 let value = input.parse::<CustomMediaValue>()?;
16 let span = Span {
17 start: name.span().start,
18 end: value.span().end,
19 };
20 Ok(CustomMedia { name, value, span })
21 }
22}
23
24impl<'cmt, 's: 'cmt> Parse<'cmt, 's> for CustomMediaValue<'s> {
25 fn parse(input: &mut Parser<'cmt, 's>) -> PResult<Self> {
26 match &peek!(input).token {
27 Token::Ident(ident) => {
28 let name = ident.name();
29 if name.eq_ignore_ascii_case("true") {
30 input.parse().map(CustomMediaValue::True)
31 } else if name.eq_ignore_ascii_case("false") {
32 input.parse().map(CustomMediaValue::False)
33 } else {
34 input.parse().map(CustomMediaValue::MediaQueryList)
35 }
36 }
37 _ => input.parse().map(CustomMediaValue::MediaQueryList),
38 }
39 }
40}