/// Program stdout settings #[derive(Debug, Clone)] pub struct ProgramStdoutSetting { /// Output error messages pub error_output: bool, /// Render results and output pub render_output: bool, } impl Default for ProgramStdoutSetting { fn default() -> Self { ProgramStdoutSetting { error_output: true, render_output: true, } } } /// Program user context #[derive(Debug, Clone, Default)] pub struct ProgramUserContext { /// View help information instead of running the command pub help: bool, /// Skip user confirmation step pub confirm: bool, } #[cfg(feature = "general_renderer")] #[derive(Debug, Clone, Default)] pub enum GeneralRendererSetting { #[default] Disable, Json, JsonPretty, Yaml, Toml, Ron, RonPretty, } #[cfg(feature = "general_renderer")] impl std::str::FromStr for GeneralRendererSetting { type Err = String; fn from_str(s: &str) -> Result { match just_fmt::kebab_case!(s).as_str() { "disable" => Ok(GeneralRendererSetting::Disable), "json" => Ok(GeneralRendererSetting::Json), "json-pretty" => Ok(GeneralRendererSetting::JsonPretty), "yaml" => Ok(GeneralRendererSetting::Yaml), "toml" => Ok(GeneralRendererSetting::Toml), "ron" => Ok(GeneralRendererSetting::Ron), "ron-pretty" => Ok(GeneralRendererSetting::RonPretty), _ => Err(format!("Invalid renderer: '{}'", s)), } } } #[cfg(feature = "general_renderer")] impl From<&str> for GeneralRendererSetting { fn from(s: &str) -> Self { s.parse().unwrap_or(GeneralRendererSetting::Disable) } } #[cfg(feature = "general_renderer")] impl From for GeneralRendererSetting { fn from(s: String) -> Self { s.as_str().into() } } #[cfg(feature = "general_renderer")] impl std::fmt::Display for GeneralRendererSetting { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { GeneralRendererSetting::Disable => write!(f, "disable"), GeneralRendererSetting::Json => write!(f, "json"), GeneralRendererSetting::JsonPretty => write!(f, "json-pretty"), GeneralRendererSetting::Yaml => write!(f, "yaml"), GeneralRendererSetting::Toml => write!(f, "toml"), GeneralRendererSetting::Ron => write!(f, "ron"), GeneralRendererSetting::RonPretty => write!(f, "ron-pretty"), } } }