1use schemars::JsonSchema;
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
6#[serde(rename_all = "lowercase")]
7#[non_exhaustive]
8pub enum OutputFormat {
9 Json,
11 Yaml,
13 Text,
15}
16
17#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
19#[serde(rename_all = "kebab-case")]
20#[non_exhaustive]
21pub enum PrettyMode {
22 Pretty,
24 Compact,
26}
27
28#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
30#[serde(rename_all = "lowercase")]
31#[non_exhaustive]
32pub enum ColorMode {
33 Auto,
35 Always,
37 Never,
39}
40
41#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
43#[serde(rename_all = "lowercase")]
44#[non_exhaustive]
45pub enum LogLevel {
46 Trace,
48 Debug,
50 Info,
52 Warning,
54 Error,
56 Critical,
58}
59
60#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
62#[non_exhaustive]
63pub enum ExitCode {
64 Success = 0,
66 Error = 1,
68 Usage = 2,
70 Encoding = 3,
72 Aborted = 130,
74}
75
76#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
78#[serde(rename_all = "lowercase")]
79#[non_exhaustive]
80pub enum ConfigSource {
81 Flags,
83 Env,
85 Config,
87 Defaults,
89}
90
91#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
93pub struct GlobalFlags {
94 pub output_format: Option<OutputFormat>,
96 pub pretty_mode: Option<PrettyMode>,
98 pub color_mode: Option<ColorMode>,
100 pub log_level: Option<LogLevel>,
102 pub quiet: bool,
104 pub include_runtime: bool,
106}
107
108impl GlobalFlags {
109 #[must_use]
111 pub fn empty() -> Self {
112 Self {
113 output_format: None,
114 pretty_mode: None,
115 color_mode: None,
116 log_level: None,
117 quiet: false,
118 include_runtime: false,
119 }
120 }
121}
122
123#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
125pub struct ExecutionPolicy {
126 pub output_format: OutputFormat,
128 pub pretty_mode: PrettyMode,
130 pub color_mode: ColorMode,
132 pub log_level: LogLevel,
134 pub quiet: bool,
136 pub include_runtime: bool,
138}
139
140impl ExecutionPolicy {
141 #[must_use]
143 pub fn baseline() -> Self {
144 Self {
145 output_format: OutputFormat::Json,
146 pretty_mode: PrettyMode::Pretty,
147 color_mode: ColorMode::Auto,
148 log_level: LogLevel::Info,
149 quiet: false,
150 include_runtime: false,
151 }
152 }
153}