1#![doc = include_str!("../examples/css/parser.rs")]
44#![cfg_attr(docsrs, feature(doc_auto_cfg))]
50#![cfg_attr(docsrs, feature(doc_cfg))]
51#![cfg_attr(docsrs, feature(extended_key_value_attributes))]
52#![cfg_attr(all(not(feature = "std"), not(test)), no_std)]
53#![warn(missing_docs)]
54#![warn(clippy::std_instead_of_core)]
55#![warn(clippy::std_instead_of_alloc)]
56#![warn(clippy::print_stderr)]
57#![warn(clippy::print_stdout)]
58
59#[cfg(feature = "alloc")]
60#[cfg_attr(test, macro_use)]
61#[allow(unused_extern_crates)]
62extern crate alloc;
63
64#[doc = include_str!("../README.md")]
65#[cfg(doctest)]
66pub struct ReadmeDoctests;
67
68#[doc(hidden)]
71pub(crate) mod lib {
72 #![allow(unused_imports)]
73
74 #[cfg(not(feature = "std"))]
77 pub(crate) mod std {
79 #[doc(hidden)]
80 #[cfg(not(feature = "alloc"))]
81 pub(crate) use core::borrow;
82
83 #[cfg(feature = "alloc")]
84 #[doc(hidden)]
85 pub(crate) use alloc::{borrow, boxed, collections, string, vec};
86
87 #[doc(hidden)]
88 pub(crate) use core::{
89 cmp, convert, fmt, hash, iter, mem, ops, option, result, slice, str,
90 };
91 }
92
93 #[cfg(feature = "std")]
94 pub(crate) mod std {
96 #![allow(clippy::std_instead_of_core)]
97 #![allow(clippy::std_instead_of_alloc)]
98 #[doc(hidden)]
99 pub(crate) use std::{
100 borrow, boxed, cmp, collections, convert, fmt, hash, iter, mem, ops, result, slice,
101 str, string, vec,
102 };
103 }
104}
105
106pub(crate) mod util {
107 #[allow(dead_code)]
108 pub(crate) fn from_fn<F: Fn(&mut core::fmt::Formatter<'_>) -> core::fmt::Result>(
109 f: F,
110 ) -> FromFn<F> {
111 FromFn(f)
112 }
113
114 pub(crate) struct FromFn<F>(F)
115 where
116 F: Fn(&mut core::fmt::Formatter<'_>) -> core::fmt::Result;
117
118 impl<F> core::fmt::Debug for FromFn<F>
119 where
120 F: Fn(&mut core::fmt::Formatter<'_>) -> core::fmt::Result,
121 {
122 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
123 (self.0)(f)
124 }
125 }
126
127 impl<F> core::fmt::Display for FromFn<F>
128 where
129 F: Fn(&mut core::fmt::Formatter<'_>) -> core::fmt::Result,
130 {
131 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
132 (self.0)(f)
133 }
134 }
135}
136
137#[macro_use]
138mod macros;
139
140#[macro_use]
141pub mod error;
142
143mod parser;
144
145pub mod stream;
146
147pub mod ascii;
148pub mod binary;
149pub mod combinator;
150pub mod token;
151
152#[cfg(feature = "unstable-doc")]
153pub mod _topic;
154#[cfg(feature = "unstable-doc")]
155pub mod _tutorial;
156
157pub mod prelude {
179 pub use crate::error::ModalError as _;
180 pub use crate::error::ParserError as _;
181 pub use crate::stream::AsChar as _;
182 pub use crate::stream::ContainsToken as _;
183 pub use crate::stream::Stream as _;
184 pub use crate::stream::StreamIsPartial as _;
185 pub use crate::ModalParser;
186 pub use crate::ModalResult;
187 pub use crate::Parser;
188 #[cfg(feature = "unstable-recover")]
189 #[cfg(feature = "std")]
190 pub use crate::RecoverableParser as _;
191
192 #[cfg(test)]
193 pub(crate) use crate::TestResult;
194}
195
196pub use error::ModalResult;
197pub use error::Result;
198pub use parser::*;
199pub use stream::BStr;
200pub use stream::Bytes;
201pub use stream::LocatingSlice;
202pub use stream::Partial;
203pub use stream::Stateful;
204pub use stream::Str;
205
206#[cfg(test)]
207pub(crate) use error::TestResult;