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
extern crate proc_macro; mod codegen; mod finite_decoding; mod finite_encoding; mod finite_repr; mod impl_error; use impl_error::CompilerError; use proc_macro::TokenStream; #[proc_macro_derive(FiniteEncoding)] pub fn derive_finite_encoding(input: TokenStream) -> TokenStream { match syn::parse(input) { Ok(data) => flatten_stream(finite_encoding::impl_derive(&data)), Err(e) => e.to_compile_error().into(), } } #[proc_macro_derive(FiniteDecoding)] pub fn derive_finite_decoding(input: TokenStream) -> TokenStream { match syn::parse(input) { Ok(data) => flatten_stream(finite_decoding::impl_derive(&data)), Err(e) => e.to_compile_error().into(), } } #[proc_macro_derive(FiniteRepr)] pub fn derive_finite_repr(input: TokenStream) -> TokenStream { match syn::parse(input) { Ok(data) => flatten_stream(finite_repr::impl_derive(&data)), Err(e) => e.to_compile_error().into(), } } fn flatten_stream<E: CompilerError>(r: Result<proc_macro2::TokenStream, E>) -> TokenStream { match r { Ok(s) => s.into(), Err(e) => e.compile_error().into(), } }