pub struct LazyVec<T, S> {
pub vec: Vec<T>,
pub terminator: S,
}Expand description
A Vec<T> that is filled up to the first appearance of an terminating S. This S may
be a subset of T, thus parsing become lazy. This is the same as
Cons<Vec<Cons<Except<S>,T>>,S> but more convenient and efficient.
§Example
Parse anything until a ;.
let mut token_iter = "foo bar ; baz ;".to_token_iter();
type Example = LazyVec<TokenTree, Semicolon>;
let _example = Example::parse(&mut token_iter).unwrap();
let _example = Example::parse(&mut token_iter).unwrap();Fields§
§vec: Vec<T>The vector of repeating T
terminator: SThe terminating S
Trait Implementations§
Source§impl<T, S> IntoIterator for LazyVec<T, S>
impl<T, S> IntoIterator for LazyVec<T, S>
Source§impl<T, S> Parser for LazyVec<T, S>
impl<T, S> Parser for LazyVec<T, S>
Source§fn parser(
tokens: &mut ShadowCountedIter<'_, <TokenStream as IntoIterator>::IntoIter>,
) -> Result<LazyVec<T, S>, Error>
fn parser( tokens: &mut ShadowCountedIter<'_, <TokenStream as IntoIterator>::IntoIter>, ) -> Result<LazyVec<T, S>, Error>
The actual parsing function that must be implemented. This mutates the
tokens
iterator directly. It should not be called from user code except for implementing
parsers itself and then only when the rules below are followed. Read moreSource§impl<T, S> RangedRepeats for LazyVec<T, S>
impl<T, S> RangedRepeats for LazyVec<T, S>
Source§fn parse_repeats(
tokens: &mut ShadowCountedIter<'_, <TokenStream as IntoIterator>::IntoIter>,
min: usize,
max: usize,
) -> Result<LazyVec<T, S>, Error>
fn parse_repeats( tokens: &mut ShadowCountedIter<'_, <TokenStream as IntoIterator>::IntoIter>, min: usize, max: usize, ) -> Result<LazyVec<T, S>, Error>
Parse at least
min and up to max (inclusive) elements.Source§fn parse_any(
tokens: &mut ShadowCountedIter<'_, <TokenStream as IntoIterator>::IntoIter>,
) -> Result<Self, Error>
fn parse_any( tokens: &mut ShadowCountedIter<'_, <TokenStream as IntoIterator>::IntoIter>, ) -> Result<Self, Error>
Parse any number of elements.
Source§fn parse_many(
tokens: &mut ShadowCountedIter<'_, <TokenStream as IntoIterator>::IntoIter>,
) -> Result<Self, Error>
fn parse_many( tokens: &mut ShadowCountedIter<'_, <TokenStream as IntoIterator>::IntoIter>, ) -> Result<Self, Error>
Parse at least one element.
Source§fn parse_optional(
tokens: &mut ShadowCountedIter<'_, <TokenStream as IntoIterator>::IntoIter>,
) -> Result<Self, Error>
fn parse_optional( tokens: &mut ShadowCountedIter<'_, <TokenStream as IntoIterator>::IntoIter>, ) -> Result<Self, Error>
Parse zero or one element.
Source§fn parse_exactly(
tokens: &mut ShadowCountedIter<'_, <TokenStream as IntoIterator>::IntoIter>,
n: usize,
) -> Result<Self, Error>
fn parse_exactly( tokens: &mut ShadowCountedIter<'_, <TokenStream as IntoIterator>::IntoIter>, n: usize, ) -> Result<Self, Error>
Parse exactly
n elements.Source§fn parse_at_most(
tokens: &mut ShadowCountedIter<'_, <TokenStream as IntoIterator>::IntoIter>,
n: usize,
) -> Result<Self, Error>
fn parse_at_most( tokens: &mut ShadowCountedIter<'_, <TokenStream as IntoIterator>::IntoIter>, n: usize, ) -> Result<Self, Error>
Parse at most
n elements.Source§fn parse_at_least(
tokens: &mut ShadowCountedIter<'_, <TokenStream as IntoIterator>::IntoIter>,
n: usize,
) -> Result<Self, Error>
fn parse_at_least( tokens: &mut ShadowCountedIter<'_, <TokenStream as IntoIterator>::IntoIter>, n: usize, ) -> Result<Self, Error>
Parse at least
n elements.Source§impl<T, S> ToTokens for LazyVec<T, S>
impl<T, S> ToTokens for LazyVec<T, S>
Source§fn to_tokens(&self, tokens: &mut TokenStream)
fn to_tokens(&self, tokens: &mut TokenStream)
Write
&self to the given TokenStream.Source§fn to_token_iter(
&self,
) -> ShadowCountedIter<'_, <TokenStream as IntoIterator>::IntoIter> ⓘ
fn to_token_iter( &self, ) -> ShadowCountedIter<'_, <TokenStream as IntoIterator>::IntoIter> ⓘ
Convert
&self into a TokenIter object.Source§fn into_token_iter<'a>(
self,
) -> ShadowCountedIter<'a, <TokenStream as IntoIterator>::IntoIter> ⓘwhere
Self: Sized,
fn into_token_iter<'a>(
self,
) -> ShadowCountedIter<'a, <TokenStream as IntoIterator>::IntoIter> ⓘwhere
Self: Sized,
Convert
self into a TokenIter object.Source§fn to_token_stream(&self) -> TokenStream
fn to_token_stream(&self) -> TokenStream
Convert
&self into a TokenStream object.Source§fn into_token_stream(self) -> TokenStreamwhere
Self: Sized,
fn into_token_stream(self) -> TokenStreamwhere
Self: Sized,
Convert
self into a TokenStream object.Auto Trait Implementations§
impl<T, S> Freeze for LazyVec<T, S>where
S: Freeze,
impl<T, S> RefUnwindSafe for LazyVec<T, S>where
S: RefUnwindSafe,
T: RefUnwindSafe,
impl<T, S> Send for LazyVec<T, S>
impl<T, S> Sync for LazyVec<T, S>
impl<T, S> Unpin for LazyVec<T, S>
impl<T, S> UnwindSafe for LazyVec<T, S>where
S: UnwindSafe,
T: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Parse for Twhere
T: Parser,
impl<T> Parse for Twhere
T: Parser,
Source§fn parse(
tokens: &mut ShadowCountedIter<'_, <TokenStream as IntoIterator>::IntoIter>,
) -> Result<Self, Error>
fn parse( tokens: &mut ShadowCountedIter<'_, <TokenStream as IntoIterator>::IntoIter>, ) -> Result<Self, Error>
This is the user facing API to parse grammatical entities. Calls a
parser() within a
transaction. Commits changes on success and returns the parsed value. Read moreSource§fn parse_all(
tokens: &mut ShadowCountedIter<'_, <TokenStream as IntoIterator>::IntoIter>,
) -> Result<Self, Error>
fn parse_all( tokens: &mut ShadowCountedIter<'_, <TokenStream as IntoIterator>::IntoIter>, ) -> Result<Self, Error>
Exhaustive parsing within a transaction. This is a convenience method that implies a
EndOfStream at the end. Thus it will error if parsing is not exhaustive. Read moreSource§fn parse_with<T>(
tokens: &mut ShadowCountedIter<'_, <TokenStream as IntoIterator>::IntoIter>,
f: impl FnOnce(Self, &mut ShadowCountedIter<'_, <TokenStream as IntoIterator>::IntoIter>) -> Result<T, Error>,
) -> Result<T, Error>
fn parse_with<T>( tokens: &mut ShadowCountedIter<'_, <TokenStream as IntoIterator>::IntoIter>, f: impl FnOnce(Self, &mut ShadowCountedIter<'_, <TokenStream as IntoIterator>::IntoIter>) -> Result<T, Error>, ) -> Result<T, Error>
Parse a value in a transaction, pass it to a
FnOnce(Self, &mut TokenIter) -> Result<T> closure which
creates a new result or returns an Error. Read more