email/folder/
error.rs

1use std::{any::Any, result};
2
3use thiserror::Error;
4use tokio::task::JoinError;
5
6use crate::{AnyBoxedError, AnyError};
7
8/// The global `Result` alias of the module.
9pub type Result<T> = result::Result<T, Error>;
10
11/// The global `Result` alias of the module.
12#[derive(Debug, Error)]
13pub enum Error {
14    #[cfg(feature = "maildir")]
15    #[error("cannot create maildir folder structure at {1}")]
16    CreateFolderStructureMaildirError(#[source] maildirs::Error, std::path::PathBuf),
17    #[cfg(feature = "maildir")]
18    #[error("cannot create notmuch folder {1}")]
19    CreateFolderStructureNotmuchError(#[source] maildirs::Error, String),
20    #[cfg(feature = "maildir")]
21    #[error("cannot delete maildir folder {1} at {0}")]
22    DeleteMaildirFolderError(#[source] maildirs::Error, String),
23    #[cfg(feature = "maildir")]
24    #[error("cannot delete maildir INBOX at {0}")]
25    DeleteMaildirInboxForbiddenError(std::path::PathBuf),
26    #[cfg(feature = "maildir")]
27    #[error("maildir: cannot list current folder from {1}")]
28    ListCurrentFolderMaildirError(#[source] maildirs::Error, std::path::PathBuf),
29    #[cfg(feature = "maildir")]
30    #[error("cannot remove maildir entry at {1}")]
31    RemoveMaildirEntryError(#[source] maildirs::Error, std::path::PathBuf),
32    #[error("cannot parse folder kind {0}")]
33    ParseFolderKindError(String),
34    #[error("cannot get uid of imap folder {0}: uid is missing")]
35    GetUidMissingImapError(u32),
36    #[error("cannot gather folders: {0}")]
37    FolderTasksFailed(JoinError),
38
39    #[error("cannot sync: cannot list folders from left cache")]
40    ListLeftFoldersCachedError(#[source] AnyBoxedError),
41    #[error("cannot sync: cannot list folders from left backend")]
42    ListLeftFoldersError(#[source] AnyBoxedError),
43    #[error("cannot sync: cannot list folders from right cache")]
44    ListRightFoldersCachedError(#[source] AnyBoxedError),
45    #[error("cannot sync: cannot list folders from right backend")]
46    ListRightFoldersError(#[source] AnyBoxedError),
47
48    // ======== v2
49    #[error("cannot parse IMAP mailbox {0}: mailbox not selectable")]
50    ParseImapFolderNotSelectableError(String),
51
52    #[cfg(feature = "maildir")]
53    #[error(transparent)]
54    MaildirsError(#[from] maildirs::Error),
55}
56
57impl AnyError for Error {
58    fn as_any(&self) -> &dyn Any {
59        self
60    }
61}
62
63impl From<Error> for AnyBoxedError {
64    fn from(err: Error) -> Self {
65        Box::new(err)
66    }
67}