Function derive_utils::derive_trait [−][src]
pub fn derive_trait<I>(
data: &EnumData,
trait_path: Path,
supertraits_types: I,
trait_def: ItemTrait
) -> TokenStream where
I: IntoIterator<Item = Ident>,
I::IntoIter: ExactSizeIterator,
A function for creating proc_macro_derive
like deriving trait to enum so
long as all variants are implemented that trait.
Examples
use derive_utils::derive_trait; use proc_macro::TokenStream; use quote::format_ident; use syn::{parse_macro_input, parse_quote}; #[proc_macro_derive(Iterator)] pub fn derive_iterator(input: TokenStream) -> TokenStream { derive_trait( &parse_macro_input!(input), // trait path parse_quote!(std::iter::Iterator), // super trait's associated types None, // trait definition parse_quote! { trait Iterator { type Item; fn next(&mut self) -> Option<Self::Item>; fn size_hint(&self) -> (usize, Option<usize>); } }, ) .into() } #[proc_macro_derive(ExactSizeIterator)] pub fn derive_exact_size_iterator(input: TokenStream) -> TokenStream { derive_trait( &parse_macro_input!(input), // trait path parse_quote!(std::iter::ExactSizeIterator), // super trait's associated types Some(format_ident!("Item")), // trait definition parse_quote! { trait ExactSizeIterator: Iterator { fn len(&self) -> usize; } }, ) .into() }