diff options
Diffstat (limited to 'src/imap/capability.rs')
-rw-r--r-- | src/imap/capability.rs | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/src/imap/capability.rs b/src/imap/capability.rs index d88673c..be1d4b6 100644 --- a/src/imap/capability.rs +++ b/src/imap/capability.rs @@ -1,4 +1,4 @@ -use imap_codec::imap_types::core::NonEmptyVec; +use imap_codec::imap_types::core::{Atom, NonEmptyVec}; use imap_codec::imap_types::extensions::enable::{CapabilityEnable, Utf8Kind}; use imap_codec::imap_types::response::Capability; use std::collections::HashSet; @@ -48,6 +48,7 @@ impl ServerCapability { } } +#[derive(Clone)] pub enum ClientStatus { NotSupportedByServer, Disabled, @@ -57,6 +58,13 @@ impl ClientStatus { pub fn is_enabled(&self) -> bool { matches!(self, Self::Enabled) } + + pub fn enable(&self) -> Self { + match self { + Self::Disabled => Self::Enabled, + other => other.clone(), + } + } } @@ -76,6 +84,14 @@ impl ClientCapability { } } + pub fn select_enable(&mut self, atoms: &[Atom]) { + for at in atoms.iter() { + if at.as_ref().to_uppercase() == "CONDSTORE" { + self.condstore = self.condstore.enable(); + } + } + } + pub fn try_enable( &mut self, caps: &[CapabilityEnable<'static>], |