narrative-macros 0.5.1

Procedural macros for the narrative crate
Documentation
use proc_macro2::TokenStream;
use quote::quote;

pub fn generate(input: &syn::ItemTrait) -> TokenStream {
    let ident = &input.ident;
    let generics = &input.generics;
    let items = &input.items;
    quote! {
        pub trait #ident #generics {
            #(#items)*
        }
    }
}

#[cfg(test)]
mod tests {
    use super::*;
    use pretty_assertions::assert_eq;

    #[test]
    fn test_trait_visibility() {
        let input = syn::parse_quote! {
            trait UserId {
                fn new_v4() -> Self;
            }
        };
        let actual = generate(&input);
        let expected = quote! {
            pub trait UserId {
                fn new_v4() -> Self;
            }
        };
        assert_eq!(actual.to_string(), expected.to_string());
    }

    #[test]
    fn test_trait_generics() {
        let input = syn::parse_quote! {
            trait UserId<T> {
                fn new_v4() -> Self;
            }
        };
        let actual = generate(&input);
        let expected = quote! {
            pub trait UserId<T> {
                fn new_v4() -> Self;
            }
        };
        assert_eq!(actual.to_string(), expected.to_string());
    }
}