lewp_css/domain/
css_rule.rs

1// This file is part of css. It is subject to the license terms in the COPYRIGHT file found in the top-level directory of this distribution and at https://raw.githubusercontent.com/lemonrock/css/master/COPYRIGHT. No part of predicator, including this file, may be copied, modified, propagated, or distributed except according to the terms contained in the COPYRIGHT file.
2// Copyright © 2017 The developers of css. See the COPYRIGHT file in the top-level directory of this distribution and at https://raw.githubusercontent.com/lemonrock/css/master/COPYRIGHT.
3
4use {
5    super::{
6        at_rules::{
7            counter_style::CounterStyleAtRule,
8            document::DocumentAtRule,
9            font_face::FontFaceAtRule,
10            font_feature_values::FontFeatureValuesAtRule,
11            import::ImportAtRule,
12            keyframes::KeyframesAtRule,
13            media::MediaAtRule,
14            namespace::NamespaceAtRule,
15            page::PageAtRule,
16            supports::SupportsAtRule,
17            viewport::ViewportAtRule,
18        },
19        CssRuleType,
20        StyleRule,
21    },
22    cssparser::ToCss,
23    std::fmt,
24};
25
26/// No Charset here, CSSCharsetRule has been removed from CSSOM (<https://drafts.csswg.org/cssom/#changes-from-5-december-2013>) and Edge doesn't support it
27#[derive(Debug, Clone)]
28pub enum CssRule {
29    /// @counter-style
30    CounterStyle(CounterStyleAtRule),
31
32    /// @document
33    Document(DocumentAtRule),
34
35    /// @font-face
36    FontFace(FontFaceAtRule),
37
38    /// @font-feature-values
39    FontFeatureValues(FontFeatureValuesAtRule),
40
41    /// @import
42    Import(ImportAtRule),
43
44    /// @keyframes
45    Keyframes(KeyframesAtRule),
46
47    /// @media
48    Media(MediaAtRule),
49
50    /// @namespace
51    Namespace(NamespaceAtRule),
52
53    /// @page
54    Page(PageAtRule),
55
56    /// Style rules, eg `div { width: 10%; }`
57    Style(StyleRule),
58
59    /// @supports
60    Supports(SupportsAtRule),
61
62    /// @viewport
63    Viewport(ViewportAtRule),
64}
65
66impl ToCss for CssRule {
67    /// <https://drafts.csswg.org/cssom/#serialize-a-css-rule>
68    fn to_css<W: fmt::Write>(&self, dest: &mut W) -> fmt::Result {
69        use self::CssRule::*;
70
71        match *self {
72            CounterStyle(ref rule) => rule.to_css(dest),
73
74            Document(ref rule) => rule.to_css(dest),
75
76            FontFace(ref rule) => rule.to_css(dest),
77
78            FontFeatureValues(ref rule) => rule.to_css(dest),
79
80            Import(ref rule) => rule.to_css(dest),
81
82            Keyframes(ref rule) => rule.to_css(dest),
83
84            Media(ref rule) => rule.to_css(dest),
85
86            Namespace(ref rule) => rule.to_css(dest),
87
88            Page(ref rule) => rule.to_css(dest),
89
90            Style(ref rule) => rule.to_css(dest),
91
92            Supports(ref rule) => rule.to_css(dest),
93
94            Viewport(ref rule) => rule.to_css(dest),
95        }
96    }
97}
98
99impl CssRule {
100    /// Returns the CSSOM rule type of this rule.
101    #[inline(always)]
102    pub fn rule_type(&self) -> CssRuleType {
103        use self::CssRule::*;
104
105        match *self {
106            CounterStyle(_) => CssRuleType::CounterStyle,
107
108            Document(_) => CssRuleType::Document,
109
110            FontFace(_) => CssRuleType::FontFace,
111
112            FontFeatureValues(_) => CssRuleType::FontFeatureValues,
113
114            Import(_) => CssRuleType::Import,
115
116            Keyframes(_) => CssRuleType::Keyframes,
117
118            Media(_) => CssRuleType::Media,
119
120            Namespace(_) => CssRuleType::Namespace,
121
122            Page(_) => CssRuleType::Page,
123
124            Style(_) => CssRuleType::Style,
125
126            Supports(_) => CssRuleType::Supports,
127
128            Viewport(_) => CssRuleType::Viewport,
129        }
130    }
131}