use std::fmt;
use std::str::FromStr;
use crate::errors::ParamParseError;
#[derive(Debug, PartialEq, Eq, Hash)]
pub struct Flag {
pub name: String,
pub index: usize,
}
impl fmt::Display for Flag {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}.{}", self.name, self.index)
}
}
impl FromStr for Flag {
type Err = ParamParseError;
fn from_str(ty: &str) -> Result<Self, Self::Err> {
if let Some((name, index)) = ty.split_once('.') {
Ok(Flag {
name: name.into(),
index: index.parse().map_err(|_| ParamParseError::InvalidFlag)?,
})
} else {
Err(ParamParseError::InvalidFlag)
}
}
}