syn

Macro Token

Source
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.