use core::fmt;
use alloc::{collections::BTreeMap, string::String, vec::Vec};
use serde::{Deserialize, Serialize};
pub mod cancel;
pub mod get;
pub mod query;
pub mod set;
pub const JMAP_SUBMISSION_CAPABILITY: &str = "urn:ietf:params:jmap:submission";
#[derive(Clone, Debug, Serialize, Deserialize)]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
#[serde(rename_all = "camelCase")]
pub enum JmapUndoStatus {
Pending,
Final,
Canceled,
}
impl fmt::Display for JmapUndoStatus {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Pending => write!(f, "pending"),
Self::Final => write!(f, "final"),
Self::Canceled => write!(f, "canceled"),
}
}
}
#[derive(Clone, Debug, Default, Serialize, Deserialize)]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
#[serde(rename_all = "camelCase")]
pub struct JmapEmailSubmission {
pub id: Option<String>,
pub identity_id: Option<String>,
pub email_id: Option<String>,
pub thread_id: Option<String>,
pub envelope: Option<JmapEnvelope>,
pub send_at: Option<String>,
pub undo_status: Option<JmapUndoStatus>,
pub delivery_status: Option<BTreeMap<String, JmapDeliveryStatus>>,
pub dsn_blob_ids: Option<Vec<String>>,
pub mdn_blob_ids: Option<Vec<String>>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
#[serde(rename_all = "camelCase")]
pub struct JmapEnvelope {
pub mail_from: JmapEmailAddressWithParameters,
pub rcpt_to: Vec<JmapEmailAddressWithParameters>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
#[serde(rename_all = "camelCase")]
pub struct JmapEmailAddressWithParameters {
pub email: String,
pub parameters: Option<BTreeMap<String, Option<String>>>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
#[serde(rename_all = "camelCase")]
pub enum JmapDelivered {
Queued,
Yes,
No,
Unknown,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
#[serde(rename_all = "camelCase")]
pub enum JmapDisplayed {
Unknown,
Yes,
No,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
#[serde(rename_all = "camelCase")]
pub struct JmapDeliveryStatus {
pub smtp_reply: String,
pub delivered: JmapDelivered,
pub displayed: JmapDisplayed,
}
#[derive(Clone, Debug, Deserialize)]
#[serde(tag = "type", rename_all = "camelCase")]
pub enum JmapEmailSubmissionSetItemError {
TooManyRecipients {
description: Option<String>,
},
NoRecipients {
description: Option<String>,
},
InvalidRecipients {
description: Option<String>,
},
ForbiddenFrom {
description: Option<String>,
},
ForbiddenMailFrom {
description: Option<String>,
},
ForbiddenToSend {
description: Option<String>,
},
CannotUnsendMessage {
description: Option<String>,
},
InvalidEmail {
description: Option<String>,
},
NotFound {
description: Option<String>,
},
InvalidProperties {
description: Option<String>,
#[serde(default)]
properties: Vec<String>,
},
#[serde(other)]
Unknown,
}