#![recursion_limit = "256"]
#[macro_use]
extern crate quote;
extern crate proc_macro;
#[macro_use]
extern crate syn;
#[macro_use]
extern crate amplify_syn;
pub(crate) mod params;
mod derive_dumb;
mod derive_type;
mod derive_encode;
mod derive_decode;
use proc_macro::TokenStream;
use syn::DeriveInput;
use crate::params::StrictDerive;
#[proc_macro_derive(StrictDumb, attributes(strict_type))]
pub fn derive_strict_dumb(input: TokenStream) -> TokenStream {
let derive_input = parse_macro_input!(input as DeriveInput);
StrictDerive::try_from(derive_input)
.and_then(|engine| engine.derive_dumb())
.unwrap_or_else(|e| e.to_compile_error())
.into()
}
#[proc_macro_derive(StrictType, attributes(strict_type))]
pub fn derive_strict_type(input: TokenStream) -> TokenStream {
let derive_input = parse_macro_input!(input as DeriveInput);
StrictDerive::try_from(derive_input)
.and_then(|engine| engine.derive_type())
.unwrap_or_else(|e| e.to_compile_error())
.into()
}
#[proc_macro_derive(StrictEncode, attributes(strict_type))]
pub fn derive_strict_encode(input: TokenStream) -> TokenStream {
let derive_input = parse_macro_input!(input as DeriveInput);
StrictDerive::try_from(derive_input)
.and_then(|engine| engine.derive_encode())
.unwrap_or_else(|e| e.to_compile_error())
.into()
}
#[proc_macro_derive(StrictDecode, attributes(strict_type))]
pub fn derive_strict_decode(input: TokenStream) -> TokenStream {
let derive_input = parse_macro_input!(input as DeriveInput);
StrictDerive::try_from(derive_input)
.and_then(|engine| engine.derive_decode())
.unwrap_or_else(|e| e.to_compile_error())
.into()
}