1#![deny(warnings)]
2mod css_atom_set;
3mod diagnostics;
4mod functions;
5mod properties;
6mod rules;
7mod selector;
8mod specificity;
9mod stylerule;
10mod stylesheet;
11#[cfg(test)]
12mod test_helpers;
13mod traits;
14mod types;
15mod units;
16mod values;
17#[cfg(feature = "visitable")]
18pub mod visit;
19
20pub use css_atom_set::*;
21pub use css_parse::{Declaration, DeclarationValue, Diagnostic};
22pub use functions::*;
23pub use properties::*;
24pub use rules::*;
25pub use selector::*;
26pub use stylerule::*;
27pub use stylesheet::*;
28pub use types::*;
29pub use units::*;
30pub use values::*;
31#[cfg(feature = "visitable")]
32pub use visit::*;
33
34use crate::diagnostics::CssDiagnostic;
35
36use css_parse::{Cursor, CursorSink, Parse, Parser, Peek, Result as ParserResult, Span, ToCursors, ToSpan};
37
38#[derive(Default, Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
40#[cfg_attr(feature = "serde", derive(serde::Serialize), serde(untagged))]
41#[cfg_attr(feature = "visitable", derive(csskit_derives::Visitable), visit(skip))]
42pub enum Todo {
43 #[default]
44 Todo,
45}
46
47impl<'a> Peek<'a> for Todo {
48 fn peek<I>(_p: &Parser<'a, I>, _c: Cursor) -> bool
49 where
50 I: Iterator<Item = Cursor> + Clone,
51 {
52 false
53 }
54}
55
56impl<'a> Parse<'a> for Todo {
57 fn parse<I>(p: &mut Parser<'a, I>) -> ParserResult<Self>
58 where
59 I: Iterator<Item = Cursor> + Clone,
60 {
61 Err(Diagnostic::new(p.next(), Diagnostic::unimplemented))?
62 }
63}
64
65impl ToCursors for Todo {
66 fn to_cursors(&self, _: &mut impl CursorSink) {}
67}
68
69impl ToSpan for Todo {
70 fn to_span(&self) -> Span {
71 Span::DUMMY
72 }
73}