use anyhow::Result;
use email::{
envelope::sync::config::EnvelopeSyncFilters, folder::sync::config::FolderSyncStrategy,
};
use serde::{Deserialize, Serialize};
use crate::backend::config::{BackendConfig, BackendGlobalConfig};
#[derive(Clone, Debug, Eq, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "kebab-case", deny_unknown_fields)]
pub struct AccountConfig {
pub default: Option<bool>,
pub folder: Option<FolderConfig>,
pub envelope: Option<EnvelopeConfig>,
pub left: BackendGlobalConfig,
pub right: BackendGlobalConfig,
}
impl AccountConfig {
pub fn configure(&mut self, account_name: &str) -> Result<()> {
match &mut self.left.backend {
#[cfg(feature = "imap")]
BackendConfig::Imap(config) => {
config
.auth
.replace_undefined_keyring_entries(&account_name)?;
}
_ => (),
}
match &mut self.right.backend {
#[cfg(feature = "imap")]
BackendConfig::Imap(config) => {
config
.auth
.replace_undefined_keyring_entries(&account_name)?;
}
_ => (),
}
Ok(())
}
}
#[derive(Clone, Debug, Eq, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "kebab-case", deny_unknown_fields)]
pub struct FolderConfig {
#[serde(default)]
pub filter: FolderSyncStrategy,
}
#[derive(Clone, Debug, Eq, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "kebab-case", deny_unknown_fields)]
pub struct EnvelopeConfig {
#[serde(default)]
pub filter: EnvelopeSyncFilters,
}