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<'a> Parse<'a> for CustomMedia<'a> {
13 fn parse(input: &mut Parser<'a>) -> PResult<Self> {
14 let name = input.parse_dashed_ident()?;
15 let value = input.parse::<CustomMediaValue>()?;
16 let span = Span { start: name.span().start, end: value.span().end };
17 Ok(CustomMedia { name, value, span })
18 }
19}
20
21impl<'a> Parse<'a> for CustomMediaValue<'a> {
22 fn parse(input: &mut Parser<'a>) -> PResult<Self> {
23 match &peek!(input).token {
24 Token::Ident(ident) => {
25 let name = ident.name();
26 if name.eq_ignore_ascii_case("true") {
27 input.parse().map(CustomMediaValue::True)
28 } else if name.eq_ignore_ascii_case("false") {
29 input.parse().map(CustomMediaValue::False)
30 } else {
31 input.parse().map(CustomMediaValue::MediaQueryList)
32 }
33 }
34 _ => input.parse().map(CustomMediaValue::MediaQueryList),
35 }
36 }
37}