use time::OffsetDateTime;
#[derive(Debug, Eq, PartialEq)]
pub enum AuthorState<T> {
Some(T),
Timeout(OffsetDateTime),
None,
}
impl<T> AuthorState<T> {
pub const fn is_none(&self) -> bool {
matches!(self, Self::None)
}
pub const fn is_timeout(&self) -> bool {
matches!(self, Self::Timeout(_))
}
pub const fn is_some(&self) -> bool {
matches!(self, Self::Some(_))
}
pub fn unwrap(self) -> T {
match self {
Self::Some(value) => value,
Self::None => panic!("called `AuthorState::unwrap()` on a `None` value"),
Self::Timeout(value) => panic!(
"called `AuthorState::unwrap()` on a `Timeout({})` value",
value
),
}
}
}
impl<T> From<AuthorState<T>> for Option<T> {
fn from(values: AuthorState<T>) -> Self {
match values {
AuthorState::Some(inner) => Some(inner),
AuthorState::Timeout(_) | AuthorState::None => None,
}
}
}