#[doc(hidden)]
extern crate proc_macro;
#[doc(hidden)]
extern crate alloc;
mod behavior;
use behavior::derive_behavior_struct;
use proc_macro::TokenStream;
use syn::DeriveInput;
enum Kind {
Action,
Condition,
Control,
Decorator,
}
#[proc_macro_derive(Action)]
pub fn derive_action(input: TokenStream) -> TokenStream {
let input: DeriveInput = syn::parse2(input.into()).expect("could not parse input");
match &input.data {
syn::Data::Struct(_struct) => derive_behavior_struct(&input, Kind::Action).into(),
syn::Data::Enum(_enum) => panic!("enums not supported"),
syn::Data::Union(_union) => panic!("unions not supported"),
}
}
#[proc_macro_derive(Condition)]
pub fn derive_condition(input: TokenStream) -> TokenStream {
let input: DeriveInput = syn::parse2(input.into()).expect("could not parse input");
match &input.data {
syn::Data::Struct(_struct) => derive_behavior_struct(&input, Kind::Condition).into(),
syn::Data::Enum(_enum) => panic!("enums not supported"),
syn::Data::Union(_union) => panic!("unions not supported"),
}
}
#[proc_macro_derive(Control)]
pub fn derive_control(input: TokenStream) -> TokenStream {
let input: DeriveInput = syn::parse2(input.into()).expect("could not parse input");
match &input.data {
syn::Data::Struct(_struct) => derive_behavior_struct(&input, Kind::Control).into(),
syn::Data::Enum(_enum) => panic!("enums not supported"),
syn::Data::Union(_union) => panic!("unions not supported"),
}
}
#[proc_macro_derive(Decorator)]
pub fn derive_decorator(input: TokenStream) -> TokenStream {
let input: DeriveInput = syn::parse2(input.into()).expect("could not parse input");
match &input.data {
syn::Data::Struct(_struct) => derive_behavior_struct(&input, Kind::Decorator).into(),
syn::Data::Enum(_enum) => panic!("enums not supported"),
syn::Data::Union(_union) => panic!("unions not supported"),
}
}