email-lib 0.27.0

Cross-platform, asynchronous Rust library to manage emails
Documentation
use async_trait::async_trait;
use tracing::info;

use super::{Folders, ListFolders};
use crate::{imap::ImapContext, AnyResult};

#[derive(Debug, Clone)]
pub struct ListImapFolders {
    ctx: ImapContext,
}

impl ListImapFolders {
    pub fn new(ctx: &ImapContext) -> Self {
        Self { ctx: ctx.clone() }
    }

    pub fn new_boxed(ctx: &ImapContext) -> Box<dyn ListFolders> {
        Box::new(Self::new(ctx))
    }

    pub fn some_new_boxed(ctx: &ImapContext) -> Option<Box<dyn ListFolders>> {
        Some(Self::new_boxed(ctx))
    }
}

#[async_trait]
impl ListFolders for ListImapFolders {
    async fn list_folders(&self) -> AnyResult<Folders> {
        info!("listing imap folders");

        let config = &self.ctx.account_config;
        let mut client = self.ctx.client().await;

        let folders = client.list_all_mailboxes(config).await?;

        Ok(folders)
    }
}