use generate::{
op_args::generate_op_args,
operation::{generate_opcode, generate_operation},
};
use proc_macro::TokenStream;
use type_hash::type_hash_impl;
mod generate;
mod parse;
mod type_hash;
#[doc(hidden)]
#[proc_macro_derive(OperationArgs, attributes(args))]
pub fn derive_operation_args(input: TokenStream) -> TokenStream {
let input = syn::parse(input).unwrap();
match generate_op_args(input) {
Ok(tokens) => tokens.into(),
Err(e) => e.into_compile_error().into(),
}
}
#[doc(hidden)]
#[proc_macro_derive(OperationReflect, attributes(operation))]
pub fn derive_operation(input: TokenStream) -> TokenStream {
let input = syn::parse(input).unwrap();
match generate_operation(input) {
Ok(tokens) => tokens.into(),
Err(e) => e.into_compile_error().into(),
}
}
#[doc(hidden)]
#[proc_macro_derive(OperationCode, attributes(operation))]
pub fn derive_opcode(input: TokenStream) -> TokenStream {
let input = syn::parse(input).unwrap();
match generate_opcode(input) {
Ok(tokens) => tokens.into(),
Err(e) => e.into_compile_error().into(),
}
}
#[proc_macro_derive(TypeHash, attributes(type_hash))]
pub fn derive_type_hash(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
let input = syn::parse(input).unwrap();
type_hash_impl(input).into()
}