use crate::AutoDefault;
use serde::{Deserialize, Deserializer};
#[derive(AutoDefault, Clone, Copy, Debug, Eq, PartialEq)]
pub enum StartupBanner {
Off,
#[default]
Slant,
Small,
Speed,
Starwars,
}
impl<'de> Deserialize<'de> for StartupBanner {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: Deserializer<'de>,
{
let raw = String::deserialize(deserializer)?;
let result = match raw.trim().to_ascii_lowercase().as_str() {
"off" => Self::Off,
"slant" => Self::Slant,
"small" => Self::Small,
"speed" => Self::Speed,
"starwars" => Self::Starwars,
_ => {
let default = Self::default();
println!(
concat!(
"\nInvalid value \"{}\" for [app].startup_banner. ",
"Using \"{:?}\". Check settings.",
),
raw, default,
);
default
}
};
Ok(result)
}
}