use alloc::{string::String, vec::Vec};
use serde::{Deserialize, Serialize};
use crate::rfc8621::email::JmapEmailAddress;
#[derive(Clone, Debug, Default, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct JmapIdentityCreate {
pub name: String,
pub email: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub reply_to: Option<Vec<JmapEmailAddress>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub bcc: Option<Vec<JmapEmailAddress>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub text_signature: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub html_signature: Option<String>,
}
#[derive(Clone, Debug, Default, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct JmapIdentityUpdate {
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reply_to: Option<Vec<JmapEmailAddress>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub bcc: Option<Vec<JmapEmailAddress>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub text_signature: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub html_signature: Option<String>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct JmapIdentity {
pub id: String,
pub name: String,
pub email: String,
pub reply_to: Option<Vec<JmapEmailAddress>>,
pub bcc: Option<Vec<JmapEmailAddress>>,
pub text_signature: Option<String>,
pub html_signature: Option<String>,
#[serde(default)]
pub may_delete: bool,
}
#[derive(Clone, Debug, Deserialize)]
#[serde(tag = "type", rename_all = "camelCase")]
pub enum JmapIdentitySetItemError {
NotFound { description: Option<String> },
InvalidPatch { description: Option<String> },
WillDestroy { description: Option<String> },
InvalidProperties {
description: Option<String>,
#[serde(default)]
properties: Vec<String>,
},
Singleton { description: Option<String> },
#[serde(other)]
Unknown,
}