pub mod config;
#[cfg(feature = "imap")]
pub mod imap;
#[cfg(feature = "maildir")]
pub mod maildir;
#[cfg(feature = "notmuch")]
pub mod notmuch;
use async_trait::async_trait;
use super::r#move::MoveMessages;
use crate::{
account::config::HasAccountConfig,
envelope::Id,
flag::{add::AddFlags, Flag},
folder::TRASH,
AnyResult,
};
#[async_trait]
pub trait DeleteMessages: Send + Sync {
async fn delete_messages(&self, folder: &str, id: &Id) -> AnyResult<()>;
}
#[async_trait]
pub trait DefaultDeleteMessages: Send + Sync + HasAccountConfig + MoveMessages + AddFlags {
async fn default_delete_messages(&self, folder: &str, id: &Id) -> AnyResult<()> {
let config = self.account_config();
if config.is_trash_folder(folder) || config.is_delete_message_style_flag() {
self.add_flag(folder, id, Flag::Deleted).await
} else {
self.move_messages(folder, TRASH, id).await
}
}
}
#[async_trait]
impl<T: DefaultDeleteMessages> DeleteMessages for T {
async fn delete_messages(&self, folder: &str, id: &Id) -> AnyResult<()> {
self.default_delete_messages(folder, id).await
}
}