use std::str::FromStr;
use snafu::Snafu;
mod identifiers {
pub const APPOINTED: &str = "terminiert";
pub const INVITED: &str = "eingeladen";
pub const EXECUTED: &str = "durchgeführt";
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum MeetingState {
Appointed,
Invited,
Executed,
}
impl From<MeetingState> for String {
fn from(value: MeetingState) -> Self {
value.as_str().to_string()
}
}
impl MeetingState {
pub const fn as_str(&self) -> &'static str {
match self {
MeetingState::Appointed => identifiers::APPOINTED,
MeetingState::Invited => identifiers::INVITED,
MeetingState::Executed => identifiers::EXECUTED,
}
}
}
#[derive(Debug, Snafu)]
#[snafu(display("Error parsing value {value:?} as meeting state"))]
pub struct ParseMeetingStateError {
value: String,
}
impl FromStr for MeetingState {
type Err = ParseMeetingStateError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
identifiers::APPOINTED => Ok(Self::Appointed),
identifiers::INVITED => Ok(Self::Invited),
identifiers::EXECUTED => Ok(Self::Executed),
s => ParseMeetingStateSnafu {
value: s.to_string(),
}
.fail(),
}
}
}