dd_maths_traits_macros 0.1.0

Macros for `dd_maths_traits` crate
Documentation
use proc_macro::TokenStream;
use quote::quote;
use proc_macro2::{TokenTree as TokenTree2, Ident as Ident2, Span as Span2};

#[proc_macro]
pub fn impl_fixed_size_int_subset(ts: TokenStream) -> TokenStream {
    let ts = proc_macro2::TokenStream::from(ts);
    let crate_name = std::env::var("CARGO_PKG_NAME").unwrap();
    let dd_maths_traits_ident = if crate_name == "dd_maths_traits" {
        Ident2::new("crate", Span2::call_site())
    } else {
        Ident2::new("dd_maths_traits", Span2::call_site())
    };
    let type_token: TokenTree2 = ts.into_iter().next().unwrap().into();
    quote! {
        impl #dd_maths_traits_ident::int::FixedSizeIntSubset for #type_token {}
        impl #dd_maths_traits_ident::int::IntSubset for #type_token {
            const IS_FIXED_SIZE: bool = true;
        }
    }.into()
}

#[proc_macro]
pub fn impl_arbitrary_size_int_subset(ts: TokenStream) -> TokenStream {
    let ts = proc_macro2::TokenStream::from(ts);
    let type_token: TokenTree2 = ts.into_iter().next().unwrap().into();
    let crate_name = std::env::var("CARGO_PKG_NAME").unwrap();
    let dd_maths_traits_ident = if crate_name == "dd_maths_traits" {
        Ident2::new("crate", Span2::call_site())
    } else {
        Ident2::new("dd_maths_traits", Span2::call_site())
    };
    quote! {
        impl #dd_maths_traits_ident::int::ArbitrarySizeIntSubset for #type_token {}
        impl #dd_maths_traits_ident::int::IntSubset for #type_token {
            const IS_FIXED_SIZE: bool = false;
        }
    }.into()
}