use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "lowercase")]
#[non_exhaustive]
pub enum OutputFormat {
Json,
Yaml,
Text,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "kebab-case")]
#[non_exhaustive]
pub enum PrettyMode {
Pretty,
Compact,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "lowercase")]
#[non_exhaustive]
pub enum ColorMode {
Auto,
Always,
Never,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "lowercase")]
#[non_exhaustive]
pub enum LogLevel {
Trace,
Debug,
Info,
Warning,
Error,
Critical,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[non_exhaustive]
pub enum ExitCode {
Success = 0,
Error = 1,
Usage = 2,
Encoding = 3,
Aborted = 130,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "lowercase")]
#[non_exhaustive]
pub enum ConfigSource {
Flags,
Env,
Config,
Defaults,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
pub struct GlobalFlags {
pub output_format: Option<OutputFormat>,
pub pretty_mode: Option<PrettyMode>,
pub color_mode: Option<ColorMode>,
pub log_level: Option<LogLevel>,
pub quiet: bool,
pub include_runtime: bool,
}
impl GlobalFlags {
#[must_use]
pub fn empty() -> Self {
Self {
output_format: None,
pretty_mode: None,
color_mode: None,
log_level: None,
quiet: false,
include_runtime: false,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
pub struct ExecutionPolicy {
pub output_format: OutputFormat,
pub pretty_mode: PrettyMode,
pub color_mode: ColorMode,
pub log_level: LogLevel,
pub quiet: bool,
pub include_runtime: bool,
}
impl ExecutionPolicy {
#[must_use]
pub fn baseline() -> Self {
Self {
output_format: OutputFormat::Json,
pretty_mode: PrettyMode::Pretty,
color_mode: ColorMode::Auto,
log_level: LogLevel::Info,
quiet: false,
include_runtime: false,
}
}
}