pub trait Parse<'a>: Sized {
// Required method
fn parse(p: &mut Parser<'a>) -> Result<Self>;
// Provided method
fn try_parse(p: &mut Parser<'a>) -> Result<Self> { ... }
}
Expand description
This trait allows AST nodes to construct themselves from a mutable Parser instance.
Nodes that implement this trait are entitled to consume any number of Cursors from Parser in order to construct themselves. They may also consume some amount of tokens and still return an Err - there is no need to try and reset the Parser state on failure (Parser::try_parse() exists for this reason).
When wanting to parse child nodes, implementations should not call Parse::parse() directly. Instead - call
Parser::parse<T>()
. Other convenience methods such as Parser::parse_if_peek<T>()
and Parser::try_parse<T>()
exist.
Any node implementing Parse::parse() gets Parse::try_parse() for free. It’s unlikely that nodes can come up with a more efficient algorithm than the provided one, so it is not worth re-implementing Parse::try_parse().
If a Node can construct itself from a single Cursor it should instead implement Peek and Build, which will provide Parse for free.
Required Methods§
Provided Methods§
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.
Implementations on Foreign Types§
Source§impl<'a, A, B, C, D> Parse<'a> for (A, B, C, D)
impl<'a, A, B, C, D> Parse<'a> for (A, B, C, D)
Source§impl<'a, A, B, C, D, E> Parse<'a> for (A, B, C, D, E)
impl<'a, A, B, C, D, E> Parse<'a> for (A, B, C, D, E)
Source§impl<'a, A, B, C, D, E, F> Parse<'a> for (A, B, C, D, E, F)
impl<'a, A, B, C, D, E, F> Parse<'a> for (A, B, C, D, E, F)
Source§impl<'a, A, B, C, D, E, F, G> Parse<'a> for (A, B, C, D, E, F, G)
impl<'a, A, B, C, D, E, F, G> Parse<'a> for (A, B, C, D, E, F, G)
Source§impl<'a, A, B, C, D, E, F, G, H> Parse<'a> for (A, B, C, D, E, F, G, H)
impl<'a, A, B, C, D, E, F, G, H> Parse<'a> for (A, B, C, D, E, F, G, H)
Source§impl<'a, A, B, C, D, E, F, G, H, I> Parse<'a> for (A, B, C, D, E, F, G, H, I)
impl<'a, A, B, C, D, E, F, G, H, I> Parse<'a> for (A, B, C, D, E, F, G, H, I)
Source§impl<'a, A, B, C, D, E, F, G, H, I, J> Parse<'a> for (A, B, C, D, E, F, G, H, I, J)
impl<'a, A, B, C, D, E, F, G, H, I, J> Parse<'a> for (A, B, C, D, E, F, G, H, I, J)
Source§impl<'a, A, B, C, D, E, F, G, H, I, J, K> Parse<'a> for (A, B, C, D, E, F, G, H, I, J, K)
impl<'a, A, B, C, D, E, F, G, H, I, J, K> Parse<'a> for (A, B, C, D, E, F, G, H, I, J, K)
Source§impl<'a, A, B, C, D, E, F, G, H, I, J, K, L> Parse<'a> for (A, B, C, D, E, F, G, H, I, J, K, L)
impl<'a, A, B, C, D, E, F, G, H, I, J, K, L> Parse<'a> for (A, B, C, D, E, F, G, H, I, J, K, L)
Implementors§
impl<'a> Parse<'a> for Comparison
impl<'a> Parse<'a> for ComponentValue<'a>
impl<'a> Parse<'a> for BadDeclaration<'a>
impl<'a> Parse<'a> for BangImportant
impl<'a> Parse<'a> for ComponentValues<'a>
impl<'a> Parse<'a> for FunctionBlock<'a>
impl<'a> Parse<'a> for NoBlockAllowed
impl<'a> Parse<'a> for NoPreludeAllowed
impl<'a> Parse<'a> for SimpleBlock<'a>
impl<'a> Parse<'a> for CaretEqual
impl<'a> Parse<'a> for ColonColon
impl<'a> Parse<'a> for DollarEqual
impl<'a> Parse<'a> for EqualEqual
impl<'a> Parse<'a> for GreaterThanEqual
impl<'a> Parse<'a> for LessThanEqual
impl<'a> Parse<'a> for PipeEqual
impl<'a> Parse<'a> for PipePipe
impl<'a> Parse<'a> for StarEqual
impl<'a> Parse<'a> for StarPipe
impl<'a> Parse<'a> for TildeEqual
impl<'a> Parse<'a> for Whitespace
impl<'a, A, B> Parse<'a> for Optionals2<A, B>
impl<'a, A, B, C> Parse<'a> for Optionals3<A, B, C>
impl<'a, A, B, C, D> Parse<'a> for Optionals4<A, B, C, D>
impl<'a, A, B, C, D, E> Parse<'a> for Optionals5<A, B, C, D, E>
impl<'a, AT, P, B> Parse<'a> for AtRule<AT, P, B>
impl<'a, D, R> Parse<'a> for Block<'a, D, R>where
D: DeclarationValue<'a>,
R: Parse<'a>,
impl<'a, D, R> Parse<'a> for DeclarationRuleList<'a, D, R>
impl<'a, FT, T> Parse<'a> for Function<FT, T>
impl<'a, P, D, R> Parse<'a> for QualifiedRule<'a, P, D, R>
A QualifiedRule represents a block with a prelude which may contain other rules. Examples of QualifiedRules are StyleRule, KeyframeRule (no s!).