pub struct Lookahead1<'a> { /* private fields */ }
parsing
only.Expand description
Support for checking the next token in a stream to decide how to parse.
An important advantage over ParseStream::peek
is that here we
automatically construct an appropriate error message based on the token
alternatives that get peeked. If you are producing your own error message,
go ahead and use ParseStream::peek
instead.
Use ParseStream::lookahead1
to construct this object.
Consuming tokens from the source stream after constructing a lookahead object does not also advance the lookahead object.
§Example
use syn::{ConstParam, Ident, Lifetime, LifetimeParam, Result, Token, TypeParam};
use syn::parse::{Parse, ParseStream};
// A generic parameter, a single one of the comma-separated elements inside
// angle brackets in:
//
// fn f<T: Clone, 'a, 'b: 'a, const N: usize>() { ... }
//
// On invalid input, lookahead gives us a reasonable error message.
//
// error: expected one of: identifier, lifetime, `const`
// |
// 5 | fn f<!Sized>() {}
// | ^
enum GenericParam {
Type(TypeParam),
Lifetime(LifetimeParam),
Const(ConstParam),
}
impl Parse for GenericParam {
fn parse(input: ParseStream) -> Result<Self> {
let lookahead = input.lookahead1();
if lookahead.peek(Ident) {
input.parse().map(GenericParam::Type)
} else if lookahead.peek(Lifetime) {
input.parse().map(GenericParam::Lifetime)
} else if lookahead.peek(Token![const]) {
input.parse().map(GenericParam::Const)
} else {
Err(lookahead.error())
}
}
}
Implementations§
Source§impl<'a> Lookahead1<'a>
impl<'a> Lookahead1<'a>
Sourcepub fn peek<T: Peek>(&self, token: T) -> bool
pub fn peek<T: Peek>(&self, token: T) -> bool
Looks at the next token in the parse stream to determine whether it matches the requested type of token.
§Syntax
Note that this method does not use turbofish syntax. Pass the peek type inside of parentheses.
input.peek(Token![struct])
input.peek(Token![==])
input.peek(Ident)
(does not accept keywords)input.peek(Ident::peek_any)
input.peek(Lifetime)
input.peek(token::Brace)
Auto Trait Implementations§
impl<'a> !Freeze for Lookahead1<'a>
impl<'a> !RefUnwindSafe for Lookahead1<'a>
impl<'a> !Send for Lookahead1<'a>
impl<'a> !Sync for Lookahead1<'a>
impl<'a> Unpin for Lookahead1<'a>
impl<'a> UnwindSafe for Lookahead1<'a>
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
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...)
attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 56 bytes