1#![forbid(unsafe_code)]
5use proc_macro::TokenStream;
6use syn::DeriveInput;
7
8#[macro_use]
9mod error;
10
11mod common;
12mod derive_args;
13mod derive_parser;
14mod derive_subcommand;
15mod derive_value_enum;
16
17#[allow(unused, reason = "some functions are only used at runtime")]
18mod shared;
19
20#[proc_macro_derive(Parser, attributes(arg, command))]
21pub fn derive_parser(tts: TokenStream) -> TokenStream {
22 let input = syn::parse_macro_input!(tts as DeriveInput);
23 derive_parser::expand(&input).into()
24}
25
26#[proc_macro_derive(Args, attributes(arg, command))]
27pub fn derive_args(tts: TokenStream) -> TokenStream {
28 let input = syn::parse_macro_input!(tts as DeriveInput);
29 derive_args::expand(&input).into()
30}
31
32#[proc_macro_derive(Subcommand, attributes(arg, command))]
33pub fn derive_subcommand(tts: TokenStream) -> TokenStream {
34 let input = syn::parse_macro_input!(tts as DeriveInput);
35 derive_subcommand::expand(&input).into()
36}
37
38#[proc_macro_derive(ValueEnum, attributes(value))]
39pub fn derive_value_enum(tts: TokenStream) -> TokenStream {
40 let input = syn::parse_macro_input!(tts as DeriveInput);
41 derive_value_enum::expand(&input).into()
42}