1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
use proc_macro2::{TokenStream, TokenTree}; use std::iter::FromIterator; pub trait TokenStreamExt { fn into_vec(self) -> Vec<TokenTree>; fn to_vec(&self) -> Vec<TokenTree>; } impl TokenStreamExt for TokenStream { fn into_vec(self) -> Vec<TokenTree> { self.into_iter().collect() } fn to_vec(&self) -> Vec<TokenTree> { self.clone().into_vec() } } pub trait TokenVecExt { fn into_token_stream(self) -> TokenStream; fn to_token_stream(&self) -> TokenStream; } impl TokenVecExt for Vec<TokenTree> { fn into_token_stream(self) -> TokenStream { TokenStream::from_iter(self) } fn to_token_stream(&self) -> TokenStream { self.clone().into_token_stream() } } impl TokenVecExt for &[TokenTree] { fn into_token_stream(self) -> TokenStream { TokenStream::from_iter(self.iter().cloned()) } fn to_token_stream(&self) -> TokenStream { TokenStream::from_iter(self.iter().cloned()) } }