Skip to main content

helm_schema_cli/cli/
emission_args.rs

1use clap::{Args, ValueEnum};
2use helm_schema::generation::EmissionPolicyDelta;
3
4/// On/off spelling shared by emission-policy CLI overrides.
5#[derive(Debug, Clone, Copy, PartialEq, Eq, ValueEnum)]
6pub enum PolicyToggle {
7    /// Enable the selected emission class.
8    On,
9    /// Disable the selected emission class.
10    Off,
11}
12
13impl From<PolicyToggle> for bool {
14    fn from(toggle: PolicyToggle) -> Self {
15        matches!(toggle, PolicyToggle::On)
16    }
17}
18
19/// Optional W-class emission overrides applied after profile and config policy.
20#[derive(Args, Debug, Clone, Copy, Default)]
21pub struct EmissionArgs {
22    /// Override root-anchored ordinary conditional emission (W-class).
23    #[arg(long, value_enum, value_name = "STATE")]
24    pub root_anchored_conditionals: Option<PolicyToggle>,
25
26    /// Override locally anchored ordinary conditional emission (W-class).
27    #[arg(long, value_enum, value_name = "STATE")]
28    pub local_conditionals: Option<PolicyToggle>,
29
30    /// Override unconditional and guarded terminal-clause emission (W-class).
31    #[arg(long, value_enum, value_name = "STATE")]
32    pub terminal_clauses: Option<PolicyToggle>,
33
34    /// Override kind partitions; at least one matching anchor lane must be on.
35    #[arg(long, value_enum, value_name = "STATE")]
36    pub kind_partitions: Option<PolicyToggle>,
37}
38
39impl EmissionArgs {
40    pub(crate) fn delta(self) -> EmissionPolicyDelta {
41        EmissionPolicyDelta::new(
42            self.root_anchored_conditionals.map(Into::into),
43            self.local_conditionals.map(Into::into),
44            self.terminal_clauses.map(Into::into),
45            self.kind_partitions.map(Into::into),
46        )
47    }
48}