Trait ToTokens

trait ToTokens

Types that can be interpolated inside a quote! invocation.

Required Methods

fn to_tokens(self: &Self, tokens: &mut TokenStream)

Write self to the given TokenStream.

Example

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

#![feature(proc_macro_totokens)]

use std::iter;
use proc_macro::{Spacing, Punct, TokenStream, TokenTree, 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.extend(iter::once(TokenTree::from(Punct::new(':', Spacing::Joint))));
                tokens.extend(iter::once(TokenTree::from(Punct::new(':', Spacing::Alone))));
            }
            segment.to_tokens(tokens);
        }
    }
}
#
# pub struct PathSegment;
#
# impl ToTokens for PathSegment {
#     fn to_tokens(&self, tokens: &mut TokenStream) {
#         unimplemented!()
#     }
# }

Provided Methods

fn to_token_stream(self: &Self) -> TokenStream

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.

fn into_token_stream(self: Self) -> TokenStream
where
    Self: Sized

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.

Implementors