RangedRepeats

Trait RangedRepeats 

Source
pub trait RangedRepeats: Sized {
    // Required method
    fn parse_repeats(
        tokens: &mut TokenIter,
        min: usize,
        max: usize,
    ) -> Result<Self, Error>;

    // Provided methods
    fn parse_any(tokens: &mut TokenIter) -> Result<Self, Error> { ... }
    fn parse_many(tokens: &mut TokenIter) -> Result<Self, Error> { ... }
    fn parse_optional(tokens: &mut TokenIter) -> Result<Self, Error> { ... }
    fn parse_exactly(tokens: &mut TokenIter, n: usize) -> Result<Self, Error> { ... }
    fn parse_at_most(tokens: &mut TokenIter, n: usize) -> Result<Self, Error> { ... }
    fn parse_at_least(tokens: &mut TokenIter, n: usize) -> Result<Self, Error> { ... }
}
Expand description

A trait for parsing a repeating T with a minimum and maximum limit. Sometimes the number of elements to be parsed is determined at runtime eg. a number of header items needs a matching number of values.

§Example

Parse at table with a number of headers followed by values.

let mut token_iter = "
    foo:       bar:
    foo_value  bar_value
".to_token_iter();

let headers = Vec::<Cons<Ident,Colon>>::parse(&mut token_iter).unwrap();
let values = Vec::<Ident>::parse_exactly(&mut token_iter, headers.len()).unwrap();

Required Methods§

Source

fn parse_repeats( tokens: &mut TokenIter, min: usize, max: usize, ) -> Result<Self, Error>

Parse at least min and up to max (inclusive) elements.

Provided Methods§

Source

fn parse_any(tokens: &mut TokenIter) -> Result<Self, Error>

Parse any number of elements.

Source

fn parse_many(tokens: &mut TokenIter) -> Result<Self, Error>

Parse at least one element.

Source

fn parse_optional(tokens: &mut TokenIter) -> Result<Self, Error>

Parse zero or one element.

Source

fn parse_exactly(tokens: &mut TokenIter, n: usize) -> Result<Self, Error>

Parse exactly n elements.

Source

fn parse_at_most(tokens: &mut TokenIter, n: usize) -> Result<Self, Error>

Parse at most n elements.

Source

fn parse_at_least(tokens: &mut TokenIter, n: usize) -> Result<Self, Error>

Parse at least n elements.

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<T> RangedRepeats for Vec<T>
where T: Parse,

Source§

fn parse_repeats( tokens: &mut TokenIter, min: usize, max: usize, ) -> Result<Vec<T>, Error>

Implementors§

Source§

impl<T, D, const MIN: usize, const MAX: usize> RangedRepeats for DelimitedVec<T, D, Forbidden, MIN, MAX>
where T: Parse + ToTokens, D: Parse,

Source§

impl<T, D, const MIN: usize, const MAX: usize> RangedRepeats for DelimitedVec<T, D, Mandatory, MIN, MAX>
where T: Parse, D: Parse,

Source§

impl<T, D, const MIN: usize, const MAX: usize> RangedRepeats for DelimitedVec<T, D, Optional, MIN, MAX>
where T: Parse, D: Parse,

Source§

impl<T, S> RangedRepeats for LazyVec<T, S>
where T: Parse, S: Parse,

Source§

impl<T, S> RangedRepeats for LazyVecUntil<T, S>
where T: Parse, S: Parse,