1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
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, AuthorState::<T>::None)
}
pub const fn is_timeout(&self) -> bool {
matches!(self, AuthorState::<T>::Timeout(_))
}
pub const fn is_some(&self) -> bool {
matches!(self, AuthorState::<T>::Some(_))
}
pub fn unwrap(self) -> T {
match self {
AuthorState::Some(value) => value,
AuthorState::None => panic!("called `AuthorState::unwrap()` on a `None` value"),
AuthorState::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,
}
}
}