adar-macros 0.2.0

This crate contains the macros for the 'adar' crate.
Documentation
use proc_macro2::TokenStream;
use quote::quote;
use syn::ItemTrait;

pub fn trait_ref_macro_inner(input: ItemTrait) -> syn::Result<TokenStream> {
    let ident = &input.ident;
    Ok(quote! {
        #input

        impl<'a, T> adar::prelude::AsTraitRef<T> for dyn #ident
        where
            T: #ident + 'static,
        {
            fn as_trait_ref(value: &T) -> &Self {
                value
            }
        }

        impl<'a, T> adar::prelude::AsTraitMut<T> for dyn #ident
        where
            T: #ident + 'static,
        {
            fn as_trait_mut(value: &mut T) -> &mut Self {
                value
            }
        }
    }
    .into())
}