diff options
Diffstat (limited to 'src/imap/flow.rs')
-rw-r--r-- | src/imap/flow.rs | 27 |
1 files changed, 14 insertions, 13 deletions
diff --git a/src/imap/flow.rs b/src/imap/flow.rs index e817e77..6ddd092 100644 --- a/src/imap/flow.rs +++ b/src/imap/flow.rs @@ -3,9 +3,9 @@ use std::fmt; use std::sync::Arc; use tokio::sync::Notify; -use imap_codec::imap_types::core::Tag; use crate::imap::mailbox_view::MailboxView; use crate::mail::user::User; +use imap_codec::imap_types::core::Tag; #[derive(Debug)] pub enum Error { @@ -22,7 +22,13 @@ pub enum State { NotAuthenticated, Authenticated(Arc<User>), Selected(Arc<User>, MailboxView, MailboxPerm), - Idle(Arc<User>, MailboxView, MailboxPerm, Tag<'static>, Arc<Notify>), + Idle( + Arc<User>, + MailboxView, + MailboxPerm, + Tag<'static>, + Arc<Notify>, + ), Logout, } impl fmt::Display for State { @@ -77,23 +83,18 @@ impl State { let new_state = match (std::mem::replace(self, State::Logout), tr) { (s, Transition::None) => s, (State::NotAuthenticated, Transition::Authenticate(u)) => State::Authenticated(u), - ( - State::Authenticated(u) | State::Selected(u, _, _), - Transition::Select(m, p), - ) => State::Selected(u, m, p), - (State::Selected(u, _, _) , Transition::Unselect) => { - State::Authenticated(u.clone()) + (State::Authenticated(u) | State::Selected(u, _, _), Transition::Select(m, p)) => { + State::Selected(u, m, p) } + (State::Selected(u, _, _), Transition::Unselect) => State::Authenticated(u.clone()), (State::Selected(u, m, p), Transition::Idle(t, s)) => { State::Idle(u, m, p, t, Arc::new(s)) - }, - (State::Idle(u, m, p, _, _), Transition::UnIdle) => { - State::Selected(u, m, p) - }, + } + (State::Idle(u, m, p, _, _), Transition::UnIdle) => State::Selected(u, m, p), (_, Transition::Logout) => State::Logout, (s, t) => { tracing::error!(state=%s, transition=%t, "forbidden transition"); - return Err(Error::ForbiddenTransition) + return Err(Error::ForbiddenTransition); } }; *self = new_state; |