palc_derive/
lib.rs

1//! This is the proc-macro crate of `palc`.
2//!
3//! See [documentations of `palc`](https://docs.rs/palc).
4#![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}