#[allow(unused)]
use pimalaya_toolbox::feat;
use serde::Deserialize;
#[cfg(feature = "carddav")]
use crate::carddav::config::CarddavConfig;
#[cfg(feature = "vdir")]
use crate::vdir::config::VdirConfig;
#[cfg(not(feature = "carddav"))]
pub type CarddavConfig = ();
#[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 = "carddav"), serde(default, deserialize_with = "carddav"))]
pub carddav: Option<CarddavConfig>,
#[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 = "carddav")]
carddav: account.carddav,
#[cfg(feature = "vdir")]
vdir: account.vdir,
}
}
}
#[cfg(not(feature = "carddav"))]
pub fn carddav<'de, T, D: serde::Deserializer<'de>>(_: D) -> Result<T, D::Error> {
Err(serde::de::Error::custom(feat!("carddav")))
}
#[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")))
}