debate-derive 1.0.0

derive macro for the `debate` CLI arguments parser
Documentation
mod flag_set;
mod subcommand;

use darling::FromAttributes as _;
use proc_macro2::TokenStream as TokenStream2;
use syn::{Attribute, Ident, Token, Variant, punctuated::Punctuated};

use crate::{common::enumeration::ValueEnumAttr, generics::AngleBracedLifetime};

pub fn derive_usage_enum(
    name: &Ident,
    variants: &Punctuated<Variant, Token![,]>,
    type_lifetime: Option<&AngleBracedLifetime>,
    attrs: &[Attribute],
) -> syn::Result<TokenStream2> {
    let attr = ValueEnumAttr::from_attributes(attrs)?;

    if attr.subcommand.is_some() {
        subcommand::derive_usage_enum_subcommand(name, variants, type_lifetime)
    } else {
        flag_set::derive_usage_enum_flag_set(name, variants, type_lifetime, &attr)
    }
}