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 Jsonl,
13 Yaml,
15 Text,
17}
18
19#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
21#[serde(rename_all = "kebab-case")]
22#[non_exhaustive]
23pub enum PrettyMode {
24 Pretty,
26 Compact,
28}
29
30#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
32#[serde(rename_all = "lowercase")]
33#[non_exhaustive]
34pub enum ColorMode {
35 Auto,
37 Always,
39 Never,
41}
42
43#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
45#[serde(rename_all = "lowercase")]
46#[non_exhaustive]
47pub enum LogLevel {
48 Trace,
50 Debug,
52 Info,
54 Warning,
56 Error,
58 Critical,
60}
61
62#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
64#[non_exhaustive]
65pub enum ExitCode {
66 Success = 0,
68 Error = 1,
70 Usage = 2,
72 Encoding = 3,
74 Aborted = 130,
76}
77
78#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
80#[serde(rename_all = "lowercase")]
81#[non_exhaustive]
82pub enum ConfigSource {
83 Flags,
85 Env,
87 Config,
89 Defaults,
91}
92
93#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
95pub struct GlobalFlags {
96 pub output_format: Option<OutputFormat>,
98 pub pretty_mode: Option<PrettyMode>,
100 pub color_mode: Option<ColorMode>,
102 pub log_level: Option<LogLevel>,
104 pub quiet: bool,
106 pub include_runtime: bool,
108}
109
110impl GlobalFlags {
111 #[must_use]
113 pub fn empty() -> Self {
114 Self {
115 output_format: None,
116 pretty_mode: None,
117 color_mode: None,
118 log_level: None,
119 quiet: false,
120 include_runtime: false,
121 }
122 }
123}
124
125#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
127pub struct ExecutionPolicy {
128 pub output_format: OutputFormat,
130 pub pretty_mode: PrettyMode,
132 pub color_mode: ColorMode,
134 pub log_level: LogLevel,
136 pub quiet: bool,
138 pub include_runtime: bool,
140}
141
142impl ExecutionPolicy {
143 #[must_use]
145 pub fn baseline() -> Self {
146 Self {
147 output_format: OutputFormat::Json,
148 pretty_mode: PrettyMode::Pretty,
149 color_mode: ColorMode::Auto,
150 log_level: LogLevel::Info,
151 quiet: false,
152 include_runtime: false,
153 }
154 }
155}