use thiserror::Error;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum AttributeName {
Assumes,
ExpectedFail,
Hidden,
Lazy,
}
#[derive(Debug, Clone, PartialEq, Eq, Error)]
#[error("unknown attribute `{raw}`")]
pub struct UnknownAttributeName {
raw: String,
}
impl UnknownAttributeName {
#[must_use]
pub fn new(raw: impl Into<String>) -> Self {
Self { raw: raw.into() }
}
#[must_use]
pub fn raw(&self) -> &str {
&self.raw
}
#[must_use]
pub fn into_raw(self) -> String {
self.raw
}
}
impl std::str::FromStr for AttributeName {
type Err = UnknownAttributeName;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
"assumes" => Ok(Self::Assumes),
"expected_fail" => Ok(Self::ExpectedFail),
"hidden" => Ok(Self::Hidden),
"lazy" => Ok(Self::Lazy),
_ => Err(UnknownAttributeName::new(s)),
}
}
}