#![deny(missing_docs)]
mod expand;
mod help;
mod model;
mod subcommand;
mod value_enum;
use proc_macro::TokenStream;
use syn::{DeriveInput, parse_macro_input};
#[proc_macro_derive(GetArgs, attributes(arg, command))]
pub fn derive_get_args(input: TokenStream) -> TokenStream {
let input = parse_macro_input!(input as DeriveInput);
match model::parse(&input, model::Keys::Struct) {
Ok(model) => expand::expand(&input, &model).into(),
Err(error) => error.to_compile_error().into(),
}
}
#[proc_macro_derive(Subcommand, attributes(arg, command))]
pub fn derive_subcommand(input: TokenStream) -> TokenStream {
let input = parse_macro_input!(input as DeriveInput);
match subcommand::parse(&input) {
Ok(variants) => subcommand::expand(&input, &variants).into(),
Err(error) => error.to_compile_error().into(),
}
}
#[proc_macro_derive(ValueEnum, attributes(value))]
pub fn derive_value_enum(input: TokenStream) -> TokenStream {
let input = parse_macro_input!(input as DeriveInput);
match value_enum::parse(&input) {
Ok(variants) => value_enum::expand(&input, &variants).into(),
Err(error) => error.to_compile_error().into(),
}
}