pub trait ToTokens {
    fn to_tokens(&self, tokens: &mut TokenStream);

    fn to_token_stream(&self) -> TokenStream { ... }
    fn into_token_stream(self) -> TokenStream
    where
        Self: Sized
, { ... } }
Expand description

Types that can be interpolated inside a quote! invocation.

Required Methods

Write self to the given TokenStream.

The token append methods provided by the TokenStreamExt extension trait may be useful for implementing ToTokens.

Example

Example implementation for a struct representing Rust paths like std::cmp::PartialEq:

use proc_macro2::{TokenTree, Spacing, Span, Punct, TokenStream};
use quote::{TokenStreamExt, ToTokens};

pub struct Path {
    pub global: bool,
    pub segments: Vec<PathSegment>,
}

impl ToTokens for Path {
    fn to_tokens(&self, tokens: &mut TokenStream) {
        for (i, segment) in self.segments.iter().enumerate() {
            if i > 0 || self.global {
                // Double colon `::`
                tokens.append(Punct::new(':', Spacing::Joint));
                tokens.append(Punct::new(':', Spacing::Alone));
            }
            segment.to_tokens(tokens);
        }
    }
}

Provided Methods

Convert self directly into a TokenStream object.

This method is implicitly implemented using to_tokens, and acts as a convenience method for consumers of the ToTokens trait.

Convert self directly into a TokenStream object.

This method is implicitly implemented using to_tokens, and acts as a convenience method for consumers of the ToTokens trait.

Implementations on Foreign Types

Implementors

impl ToTokens for As

impl ToTokens for Async

impl ToTokens for Auto

impl ToTokens for Await

impl ToTokens for Become

impl ToTokens for Box

impl ToTokens for Break

impl ToTokens for Const

impl ToTokens for Crate

impl ToTokens for Default

impl ToTokens for Do

impl ToTokens for Dyn

impl ToTokens for Else

impl ToTokens for Enum

impl ToTokens for Extern

impl ToTokens for Final

impl ToTokens for Fn

impl ToTokens for For

impl ToTokens for If

impl ToTokens for Impl

impl ToTokens for In

impl ToTokens for Let

impl ToTokens for Loop

impl ToTokens for Macro

impl ToTokens for Match

impl ToTokens for Mod

impl ToTokens for Move

impl ToTokens for Mut

impl ToTokens for Priv

impl ToTokens for Pub

impl ToTokens for Ref

impl ToTokens for Return

impl ToTokens for Static

impl ToTokens for Struct

impl ToTokens for Super

impl ToTokens for Trait

impl ToTokens for Try

impl ToTokens for Type

impl ToTokens for Typeof

impl ToTokens for Union

impl ToTokens for Unsafe

impl ToTokens for Unsized

impl ToTokens for Use

impl ToTokens for Virtual

impl ToTokens for Where

impl ToTokens for While

impl ToTokens for Yield

impl ToTokens for Add

impl ToTokens for AddEq

impl ToTokens for And

impl ToTokens for AndAnd

impl ToTokens for AndEq

impl ToTokens for At

impl ToTokens for Bang

impl ToTokens for Caret

impl ToTokens for CaretEq

impl ToTokens for Colon

impl ToTokens for Colon2

impl ToTokens for Comma

impl ToTokens for Div

impl ToTokens for DivEq

impl ToTokens for Dollar

impl ToTokens for Dot

impl ToTokens for Dot2

impl ToTokens for Dot3

impl ToTokens for Eq

impl ToTokens for EqEq

impl ToTokens for Ge

impl ToTokens for Gt

impl ToTokens for Le

impl ToTokens for Lt

impl ToTokens for MulEq

impl ToTokens for Ne

impl ToTokens for Or

impl ToTokens for OrEq

impl ToTokens for OrOr

impl ToTokens for Pound

impl ToTokens for RArrow

impl ToTokens for LArrow

impl ToTokens for Rem

impl ToTokens for RemEq

impl ToTokens for Semi

impl ToTokens for Shl

impl ToTokens for ShlEq

impl ToTokens for Shr

impl ToTokens for ShrEq

impl ToTokens for Star

impl ToTokens for Sub

impl ToTokens for SubEq

impl ToTokens for Tilde

impl ToTokens for Meta

impl ToTokens for Fields

impl ToTokens for Variant

impl ToTokens for Field

impl ToTokens for Expr

impl ToTokens for ExprBox

impl ToTokens for ExprLit

impl ToTokens for ExprLet

impl ToTokens for ExprIf

impl ToTokens for Member

impl ToTokens for Index

impl ToTokens for ExprTry

impl ToTokens for Label

impl ToTokens for Arm

impl<'a> ToTokens for ImplGenerics<'a>

impl<'a> ToTokens for TypeGenerics<'a>

impl<'a> ToTokens for Turbofish<'a>

impl ToTokens for Item

impl ToTokens for UseTree

impl ToTokens for FnArg

impl ToTokens for ItemUse

impl ToTokens for ItemFn

impl ToTokens for ItemMod

impl ToTokens for UsePath

impl ToTokens for UseName

impl ToTokens for UseGlob

impl ToTokens for File

impl ToTokens for Lit

impl ToTokens for LitStr

impl ToTokens for LitByte

impl ToTokens for LitChar

impl ToTokens for LitInt

impl ToTokens for LitBool

impl ToTokens for Macro

impl ToTokens for BinOp

impl ToTokens for UnOp

impl ToTokens for Block

impl ToTokens for Stmt

impl ToTokens for Local

impl ToTokens for Type

impl ToTokens for TypePtr

impl ToTokens for Abi

impl ToTokens for Pat

impl ToTokens for PatWild

impl ToTokens for PatType

impl ToTokens for PatPath

impl ToTokens for PatBox

impl ToTokens for PatRest

impl ToTokens for PatLit

impl ToTokens for PatOr

impl ToTokens for Path

impl ToTokens for Binding

impl<T, P> ToTokens for Punctuated<T, P>where
    T: ToTokens,
    P: ToTokens,

impl<T, P> ToTokens for Pair<T, P>where
    T: ToTokens,
    P: ToTokens,