JMAP protocol layer refactoring (part 1)

This commit is contained in:
mdecimus
2025-09-23 20:30:10 +02:00
parent ecd7ff85e9
commit 6c612f7e1c
73 changed files with 2222 additions and 5644 deletions

View File

@@ -7,6 +7,7 @@
use jmap_proto::request::capability::BaseCapabilities;
use nlp::language::Language;
use std::{str::FromStr, time::Duration};
use types::special_use::SpecialUse;
use utils::config::{Config, Rate, cron::SimpleCron, utils::ParseValue};
#[derive(Default, Clone)]
@@ -83,22 +84,6 @@ pub struct DefaultFolder {
pub create: bool,
}
#[derive(
rkyv::Archive, rkyv::Deserialize, rkyv::Serialize, Clone, Copy, PartialEq, Eq, Hash, Debug,
)]
#[rkyv(derive(Debug))]
pub enum SpecialUse {
Inbox,
Trash,
Junk,
Drafts,
Archive,
Sent,
Shared,
Important,
None,
}
impl JmapConfig {
pub fn parse(config: &mut Config) -> Self {
// Parse HTTP headers
@@ -364,65 +349,6 @@ impl JmapConfig {
impl ParseValue for SpecialUse {
fn parse_value(value: &str) -> Result<Self, String> {
hashify::tiny_map_ignore_case!(value.as_bytes(),
b"inbox" => SpecialUse::Inbox,
b"trash" => SpecialUse::Trash,
b"junk" => SpecialUse::Junk,
b"drafts" => SpecialUse::Drafts,
b"archive" => SpecialUse::Archive,
b"sent" => SpecialUse::Sent,
b"shared" => SpecialUse::Shared,
b"important" => SpecialUse::Important,
)
.ok_or_else(|| format!("Unknown folder role {:?}", value))
}
}
impl SpecialUse {
pub fn as_str(&self) -> Option<&'static str> {
match self {
SpecialUse::Inbox => Some("inbox"),
SpecialUse::Trash => Some("trash"),
SpecialUse::Junk => Some("junk"),
SpecialUse::Drafts => Some("drafts"),
SpecialUse::Archive => Some("archive"),
SpecialUse::Sent => Some("sent"),
SpecialUse::Shared => Some("shared"),
SpecialUse::Important => Some("important"),
SpecialUse::None => None,
}
}
}
impl ArchivedSpecialUse {
pub fn as_str(&self) -> Option<&'static str> {
match self {
ArchivedSpecialUse::Inbox => Some("inbox"),
ArchivedSpecialUse::Trash => Some("trash"),
ArchivedSpecialUse::Junk => Some("junk"),
ArchivedSpecialUse::Drafts => Some("drafts"),
ArchivedSpecialUse::Archive => Some("archive"),
ArchivedSpecialUse::Sent => Some("sent"),
ArchivedSpecialUse::Shared => Some("shared"),
ArchivedSpecialUse::Important => Some("important"),
ArchivedSpecialUse::None => None,
}
}
}
impl From<&ArchivedSpecialUse> for SpecialUse {
fn from(value: &ArchivedSpecialUse) -> Self {
match value {
ArchivedSpecialUse::Inbox => SpecialUse::Inbox,
ArchivedSpecialUse::Trash => SpecialUse::Trash,
ArchivedSpecialUse::Junk => SpecialUse::Junk,
ArchivedSpecialUse::Drafts => SpecialUse::Drafts,
ArchivedSpecialUse::Archive => SpecialUse::Archive,
ArchivedSpecialUse::Sent => SpecialUse::Sent,
ArchivedSpecialUse::Shared => SpecialUse::Shared,
ArchivedSpecialUse::Important => SpecialUse::Important,
ArchivedSpecialUse::None => SpecialUse::None,
}
SpecialUse::parse(value).ok_or_else(|| format!("Unknown folder role {:?}", value))
}
}