aboutsummaryrefslogtreecommitdiff
path: root/src/imap/capability.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/imap/capability.rs')
-rw-r--r--src/imap/capability.rs18
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>],