claptrap 0.3.0

Bring the power of Clap to shell scripts.
Documentation
use serde::Deserialize;

#[derive(Debug, Clone, Deserialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[serde(deny_unknown_fields)]
#[serde(rename_all = "kebab-case")]
#[non_exhaustive]
pub struct ArgGroup {
    #[serde(skip)]
    pub(crate) id: String,
    args: Option<Vec<String>>,
    multiple: Option<bool>,
    required: Option<bool>,
    requires: Option<String>,
    requires_all: Option<Vec<String>>,
    conflicts_with: Option<String>,
    conflicts_with_all: Option<Vec<String>>,
}

impl From<ArgGroup> for clap::ArgGroup {
    fn from(value: ArgGroup) -> Self {
        let mut arg_group = Self::new(value.id);
        if let Some(args) = value.args {
            arg_group = arg_group.args(args);
        }
        if let Some(multiple) = value.multiple {
            arg_group = arg_group.multiple(multiple);
        }
        if let Some(required) = value.required {
            arg_group = arg_group.required(required);
        }
        if let Some(requires) = value.requires {
            arg_group = arg_group.requires(requires);
        }
        if let Some(requires_all) = value.requires_all {
            arg_group = arg_group.requires_all(requires_all);
        }
        if let Some(conflicts_with) = value.conflicts_with {
            arg_group = arg_group.conflicts_with(conflicts_with);
        }
        if let Some(conflicts_with_all) = value.conflicts_with_all {
            arg_group = arg_group.conflicts_with_all(conflicts_with_all);
        }
        arg_group
    }
}