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()
}