recode_derive/
lib.rs

1mod decoder;
2mod encoder;
3mod recode;
4mod util;
5
6use darling::{FromDeriveInput, ToTokens};
7use proc_macro::TokenStream;
8
9macro_rules! emit_impl_or_error {
10    ($m:ty [$i:ident]) => {
11        match <$m>::from_derive_input(&syn::parse_macro_input!($i)) {
12            | Ok(val) => val.into_token_stream(),
13            | Err(err) => err.write_errors(),
14        }
15    };
16}
17
18#[proc_macro_derive(Decoder, attributes(recode))]
19pub fn derive_decoder(input: TokenStream) -> TokenStream {
20    emit_impl_or_error!(decoder::Decoder[input]).into()
21}
22
23#[proc_macro_derive(Encoder, attributes(recode))]
24pub fn derive_encoder(input: TokenStream) -> TokenStream {
25    emit_impl_or_error!(encoder::Encoder[input]).into()
26}
27
28#[proc_macro_derive(Recode, attributes(recode))]
29pub fn derive_recode(input: TokenStream) -> TokenStream {
30    emit_impl_or_error!(recode::Recode[input]).into()
31}