#[allow(unused)]
use pimalaya_toolbox::feat;
use serde::Deserialize;
#[cfg(feature = "caldav")]
use crate::caldav::config::CaldavConfig;
#[cfg(feature = "vdir")]
use crate::vdir::config::VdirConfig;
#[cfg(not(feature = "caldav"))]
pub type CaldavConfig = ();
#[cfg(not(feature = "vdir"))]
pub type VdirConfig = ();
#[derive(Deserialize)]
#[serde(rename_all = "kebab-case")]
pub struct Account {
#[serde(default)]
pub default: bool,
#[cfg_attr(not(feature = "caldav"), serde(default, deserialize_with = "caldav"))]
pub caldav: Option<CaldavConfig>,
#[cfg_attr(not(feature = "vdir"), serde(default, deserialize_with = "vdir"))]
pub vdir: Option<VdirConfig>,
}
impl From<Account> for super::Account {
fn from(account: Account) -> Self {
super::Account {
default: account.default,
#[cfg(feature = "caldav")]
caldav: account.caldav,
#[cfg(feature = "vdir")]
vdir: account.vdir,
}
}
}
#[cfg(not(feature = "caldav"))]
pub fn caldav<'de, T, D: serde::Deserializer<'de>>(_: D) -> Result<T, D::Error> {
Err(serde::de::Error::custom(feat!("caldav")))
}
#[cfg(not(feature = "vdir"))]
pub fn vdir<'de, T, D: serde::Deserializer<'de>>(_: D) -> Result<T, D::Error> {
Err(serde::de::Error::custom(feat!("vdir")))
}