| use proc_macro::{Ident, Literal, TokenStream, TokenTree}; |
| use std::iter; |
| |
| pub(crate) trait ToTokens { |
| fn to_tokens(&self, tokens: &mut TokenStream); |
| |
| fn to_token_stream(&self) -> TokenStream { |
| let mut tokens = TokenStream::new(); |
| self.to_tokens(&mut tokens); |
| tokens |
| } |
| } |
| |
| impl ToTokens for Ident { |
| fn to_tokens(&self, tokens: &mut TokenStream) { |
| tokens.extend(iter::once(TokenTree::Ident(self.clone()))); |
| } |
| } |
| |
| impl ToTokens for Literal { |
| fn to_tokens(&self, tokens: &mut TokenStream) { |
| tokens.extend(iter::once(TokenTree::Literal(self.clone()))); |
| } |
| } |
| |
| impl ToTokens for TokenTree { |
| fn to_tokens(&self, tokens: &mut TokenStream) { |
| tokens.extend(iter::once(self.clone())); |
| } |
| } |
| |
| impl ToTokens for TokenStream { |
| fn to_tokens(&self, tokens: &mut TokenStream) { |
| tokens.extend(self.clone()); |
| } |
| } |