Ver Fonte

melib/backends: add as_any/as_any_mut methods to BackendMailbox

Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
Manos Pitsidianakis há 7 meses atrás
pai
commit
00ce9660ef

+ 8 - 0
meli/src/accounts/tests.rs

@@ -81,6 +81,14 @@ fn test_mailbox_utf7() {
         fn count(&self) -> Result<(usize, usize)> {
             unimplemented!()
         }
+
+        fn as_any(&self) -> &dyn std::any::Any {
+            self
+        }
+
+        fn as_any_mut(&mut self) -> &mut dyn std::any::Any {
+            self
+        }
     }
     for (n, d) in [
         ("~peter/mail/&U,BTFw-/&ZeVnLIqe-", "~peter/mail/台北/日本語"),

+ 3 - 1
melib/src/backends.rs

@@ -650,7 +650,7 @@ impl SpecialUsageMailbox {
     }
 }
 
-pub trait BackendMailbox: std::fmt::Debug {
+pub trait BackendMailbox: std::fmt::Debug + std::any::Any {
     fn hash(&self) -> MailboxHash;
     /// Final component of `path`.
     fn name(&self) -> &str;
@@ -665,6 +665,8 @@ pub trait BackendMailbox: std::fmt::Debug {
     fn special_usage(&self) -> SpecialUsageMailbox;
     fn permissions(&self) -> MailboxPermissions;
     fn count(&self) -> Result<(usize, usize)>;
+    fn as_any(&self) -> &dyn Any;
+    fn as_any_mut(&mut self) -> &mut dyn Any;
 }
 
 crate::declare_u64_hash!(AccountHash);

+ 8 - 0
melib/src/imap/mailbox.rs

@@ -122,4 +122,12 @@ impl BackendMailbox for ImapMailbox {
     fn count(&self) -> Result<(usize, usize)> {
         Ok((self.unseen.lock()?.len(), self.exists.lock()?.len()))
     }
+
+    fn as_any(&self) -> &dyn std::any::Any {
+        self
+    }
+
+    fn as_any_mut(&mut self) -> &mut dyn std::any::Any {
+        self
+    }
 }

+ 8 - 0
melib/src/jmap/backend_mailbox.rs

@@ -122,4 +122,12 @@ impl BackendMailbox for JmapMailbox {
             self.total_emails.lock()?.len(),
         ))
     }
+
+    fn as_any(&self) -> &dyn std::any::Any {
+        self
+    }
+
+    fn as_any_mut(&mut self) -> &mut dyn std::any::Any {
+        self
+    }
 }

+ 8 - 0
melib/src/maildir/mod.rs

@@ -267,6 +267,14 @@ impl BackendMailbox for MaildirMailbox {
     fn count(&self) -> Result<(usize, usize)> {
         Ok((*self.unseen.lock()?, *self.total.lock()?))
     }
+
+    fn as_any(&self) -> &dyn std::any::Any {
+        self
+    }
+
+    fn as_any_mut(&mut self) -> &mut dyn std::any::Any {
+        self
+    }
 }
 
 pub trait MaildirPathTrait {

+ 8 - 0
melib/src/mbox/mod.rs

@@ -240,6 +240,14 @@ impl BackendMailbox for MboxMailbox {
     fn count(&self) -> Result<(usize, usize)> {
         Ok((*self.unseen.lock()?, *self.total.lock()?))
     }
+
+    fn as_any(&self) -> &dyn std::any::Any {
+        self
+    }
+
+    fn as_any_mut(&mut self) -> &mut dyn std::any::Any {
+        self
+    }
 }
 
 /// `BackendOp` implementor for Mbox

+ 8 - 0
melib/src/nntp/mailbox.rs

@@ -97,4 +97,12 @@ impl BackendMailbox for NntpMailbox {
     fn count(&self) -> Result<(usize, usize)> {
         Ok((self.unseen.lock()?.len(), self.exists.lock()?.len()))
     }
+
+    fn as_any(&self) -> &dyn std::any::Any {
+        self
+    }
+
+    fn as_any_mut(&mut self) -> &mut dyn std::any::Any {
+        self
+    }
 }

+ 8 - 0
melib/src/notmuch/mailbox.rs

@@ -104,4 +104,12 @@ impl BackendMailbox for NotmuchMailbox {
     fn count(&self) -> Result<(usize, usize)> {
         Ok((*self.unseen.lock()?, *self.total.lock()?))
     }
+
+    fn as_any(&self) -> &dyn std::any::Any {
+        self
+    }
+
+    fn as_any_mut(&mut self) -> &mut dyn std::any::Any {
+        self
+    }
 }