dexalt-lib_derive 0.2.1

Dexalt Library System
Documentation
extern crate proc_macro;
use proc_macro::TokenStream;
use quote::quote;
use syn;

#[proc_macro_derive(CType)]
pub fn ctype_derive(input: TokenStream) -> TokenStream {
    let ast = syn::parse(input).unwrap();
    impl_ctype(&ast)
}

fn impl_ctype(ast: &syn::DeriveInput) -> TokenStream {
    let name = &ast.ident;
    let gen = quote! {
        impl CType for #name {
            fn to_cstring(&self) -> std::ffi::CString {
                let string = &self.to_string();
                std::ffi::CString::new(string).unwrap()
            }
        }
    };
    gen.into()
}

#[proc_macro_derive(Dexalt)]
pub fn dexalt_derive(input: TokenStream) -> TokenStream {
    let ast = syn::parse(input).unwrap();
    impl_dexalt(&ast)
}

fn impl_dexalt(ast: &syn::DeriveInput) -> TokenStream {
    let name = &ast.ident;
    let gen = quote! {
        impl Dexalt for #name {
            fn to_json(&self) -> serde_json::Value {
                let string = &self.to_string();
                serde_json::from_str(string).unwrap()
            }
        }
    };
    gen.into()
}