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.