style/values/specified/
outline.rs1use crate::derives::*;
8use crate::parser::{Parse, ParserContext};
9use crate::values::specified::BorderStyle;
10use cssparser::Parser;
11use selectors::parser::SelectorParseErrorKind;
12use style_traits::ParseError;
13
14#[derive(
15 Clone,
16 Copy,
17 Debug,
18 Eq,
19 MallocSizeOf,
20 Ord,
21 PartialEq,
22 PartialOrd,
23 SpecifiedValueInfo,
24 ToComputedValue,
25 ToCss,
26 ToResolvedValue,
27 ToShmem,
28 ToTyped,
29)]
30#[repr(C, u8)]
31pub enum OutlineStyle {
33 Auto,
35 BorderStyle(BorderStyle),
37}
38
39impl OutlineStyle {
40 #[inline]
41 pub fn none() -> OutlineStyle {
43 OutlineStyle::BorderStyle(BorderStyle::None)
44 }
45
46 #[inline]
47 pub fn none_or_hidden(&self) -> bool {
49 match *self {
50 OutlineStyle::Auto => false,
51 OutlineStyle::BorderStyle(ref style) => style.none_or_hidden(),
52 }
53 }
54}
55
56impl Parse for OutlineStyle {
57 fn parse(_context: &ParserContext, input: &mut Parser) -> Result<OutlineStyle, ParseError> {
58 if let Ok(border_style) = input.try_parse(BorderStyle::parse) {
59 if let BorderStyle::Hidden = border_style {
60 return Err(ParseError::custom(SelectorParseErrorKind::UnexpectedIdent));
61 }
62
63 return Ok(OutlineStyle::BorderStyle(border_style));
64 }
65
66 input.expect_ident_matching("auto")?;
67 Ok(OutlineStyle::Auto)
68 }
69}