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}