errorx-macros 0.0.1

macros for the errorx crate.
Documentation
mod params;
mod variant;

pub(crate) use params::*;

use proc_macro::TokenStream;
use quote::quote;

#[proc_macro_derive(Error, attributes(error))]
pub fn derive_error(tokens: TokenStream) -> TokenStream {
    let input = syn::parse_macro_input!(tokens as syn::DeriveInput);

    return match &input.data {
        syn::Data::Enum(ty) => render(&input, ty),
        _ => quote::quote!(compile_error!("unsupported Error type")),
    }
    .into();
}

fn render(input: &syn::DeriveInput, data: &syn::DataEnum) -> proc_macro2::TokenStream {
    let display = variant::display::render(input, data);
    let error = variant::error::render(input, data);
    let to_error = variant::to_error::render(input, data);

    return quote! {
        #display
        #error
        #to_error
    };
}