macro_rules! Token { [abstract] => { ... }; [as] => { ... }; [async] => { ... }; [auto] => { ... }; [await] => { ... }; [become] => { ... }; [box] => { ... }; [break] => { ... }; [const] => { ... }; [continue] => { ... }; [crate] => { ... }; [default] => { ... }; [do] => { ... }; [dyn] => { ... }; [else] => { ... }; [enum] => { ... }; [extern] => { ... }; [final] => { ... }; [fn] => { ... }; [for] => { ... }; [if] => { ... }; [impl] => { ... }; [in] => { ... }; [let] => { ... }; [loop] => { ... }; [macro] => { ... }; [match] => { ... }; [mod] => { ... }; [move] => { ... }; [mut] => { ... }; [override] => { ... }; [priv] => { ... }; [pub] => { ... }; [raw] => { ... }; [ref] => { ... }; [return] => { ... }; [Self] => { ... }; [self] => { ... }; [static] => { ... }; [struct] => { ... }; [super] => { ... }; [trait] => { ... }; [try] => { ... }; [type] => { ... }; [typeof] => { ... }; [union] => { ... }; [unsafe] => { ... }; [unsized] => { ... }; [use] => { ... }; [virtual] => { ... }; [where] => { ... }; [while] => { ... }; [yield] => { ... }; [&] => { ... }; [&&] => { ... }; [&=] => { ... }; [@] => { ... }; [^] => { ... }; [^=] => { ... }; [:] => { ... }; [,] => { ... }; [$] => { ... }; [.] => { ... }; [..] => { ... }; [...] => { ... }; [..=] => { ... }; [=] => { ... }; [==] => { ... }; [=>] => { ... }; [>=] => { ... }; [>] => { ... }; [<-] => { ... }; [<=] => { ... }; [<] => { ... }; [-] => { ... }; [-=] => { ... }; [!=] => { ... }; [!] => { ... }; [|] => { ... }; [|=] => { ... }; [||] => { ... }; [::] => { ... }; [%] => { ... }; [%=] => { ... }; [+] => { ... }; [+=] => { ... }; [#] => { ... }; [?] => { ... }; [->] => { ... }; [;] => { ... }; [<<] => { ... }; [<<=] => { ... }; [>>] => { ... }; [>>=] => { ... }; [/] => { ... }; [/=] => { ... }; [*] => { ... }; [*=] => { ... }; [~] => { ... }; [_] => { ... }; }
Expand description
A type-macro that expands to the name of the Rust type representation of a given token.
As a type, Token!
is commonly used in the type of struct fields, the type
of a let
statement, or in turbofish for a parse
function.
use syn::{Ident, Token};
use syn::parse::{Parse, ParseStream, Result};
// `struct Foo;`
pub struct UnitStruct {
struct_token: Token![struct],
ident: Ident,
semi_token: Token![;],
}
impl Parse for UnitStruct {
fn parse(input: ParseStream) -> Result<Self> {
let struct_token: Token![struct] = input.parse()?;
let ident: Ident = input.parse()?;
let semi_token = input.parse::<Token![;]>()?;
Ok(UnitStruct { struct_token, ident, semi_token })
}
}
As an expression, Token!
is used for peeking tokens or instantiating
tokens from a span.
fn make_unit_struct(name: Ident) -> UnitStruct {
let span = name.span();
UnitStruct {
struct_token: Token![struct](span),
ident: name,
semi_token: Token![;](span),
}
}
if input.peek(Token![struct]) {
let unit_struct: UnitStruct = input.parse()?;
/* ... */
}
See the token module documentation for details and examples.