use std::{fmt, fmt::Display, str::FromStr};
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
#[serde(rename_all = "snake_case")]
pub enum PackModeFlag {
C,
T,
B,
L,
R,
U,
}
impl FromStr for PackModeFlag {
type Err = String;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
"c" => Ok(Self::C),
"t" => Ok(Self::T),
"b" => Ok(Self::B),
"l" => Ok(Self::L),
"r" => Ok(Self::R),
"u" => Ok(Self::U),
_ => Err(format!(
"Unable to map `{s}` to a `PackModeFlag`. Valid strings are: \"c\", \"t\", \"b\", \"l\", \"r\", \"u\"."
)),
}
}
}
impl Display for PackModeFlag {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
PackModeFlag::C => "c".fmt(f),
PackModeFlag::T => "t".fmt(f),
PackModeFlag::B => "b".fmt(f),
PackModeFlag::L => "l".fmt(f),
PackModeFlag::R => "r".fmt(f),
PackModeFlag::U => "u".fmt(f),
}
}
}