main
Mauro D 2023-06-06 12:50:08 +00:00
parent 3cba63c224
commit 952f272d09
2 changed files with 44 additions and 9 deletions

View File

@ -1,7 +1,9 @@
jmap-client 0.3.0
================================
- JMAP for Sieve Scripts DRAFT-14 support.
- Set timeouts using `Duration` instead of `u64`.
- SetError handling of unknown properties.
- Support deserializing non-IANA registered roles.
jmap-client 0.2.1
================================

View File

@ -113,23 +113,16 @@ pub(crate) enum ACLPatch {
Set(bool),
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Default)]
#[serde(rename_all = "lowercase")]
#[derive(Debug, Clone, PartialEq, Eq, Default)]
pub enum Role {
#[serde(rename = "archive", alias = "ARCHIVE")]
Archive,
#[serde(rename = "drafts", alias = "DRAFTS")]
Drafts,
#[serde(rename = "important", alias = "IMPORTANT")]
Important,
#[serde(rename = "inbox", alias = "INBOX")]
Inbox,
#[serde(rename = "junk", alias = "JUNK")]
Junk,
#[serde(rename = "sent", alias = "SENT")]
Sent,
#[serde(rename = "trash", alias = "TRASH")]
Trash,
Other(String),
#[default]
None,
}
@ -252,3 +245,43 @@ impl ChangesObject for Mailbox<Set> {
impl ChangesObject for Mailbox<Get> {
type ChangesResponse = ChangesResponse;
}
impl<'de> Deserialize<'de> for Role {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
match <&str>::deserialize(deserializer)?
.to_ascii_lowercase()
.as_str()
{
"inbox" => Ok(Role::Inbox),
"sent" => Ok(Role::Sent),
"trash" => Ok(Role::Trash),
"drafts" => Ok(Role::Drafts),
"junk" => Ok(Role::Junk),
"archive" => Ok(Role::Archive),
"important" => Ok(Role::Important),
other => Ok(Role::Other(other.to_string())),
}
}
}
impl Serialize for Role {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
serializer.serialize_str(match self {
Role::Inbox => "inbox",
Role::Sent => "sent",
Role::Trash => "trash",
Role::Drafts => "drafts",
Role::Junk => "junk",
Role::Archive => "archive",
Role::Important => "important",
Role::Other(other) => other,
Role::None => "",
})
}
}