Message caching improvements
This commit is contained in:
@@ -34,6 +34,21 @@ pub enum Collection {
|
||||
None = 13,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq, Default)]
|
||||
#[repr(u8)]
|
||||
pub enum SyncCollection {
|
||||
Email = 0,
|
||||
Thread = 1,
|
||||
Calendar = 2,
|
||||
AddressBook = 3,
|
||||
FileNode = 4,
|
||||
Identity = 5,
|
||||
EmailSubmission = 6,
|
||||
SieveScript = 7,
|
||||
#[default]
|
||||
None = 8,
|
||||
}
|
||||
|
||||
impl Collection {
|
||||
pub fn main_collection(&self) -> Collection {
|
||||
match self {
|
||||
@@ -96,6 +111,22 @@ impl From<u8> for Collection {
|
||||
}
|
||||
}
|
||||
|
||||
impl From<u8> for SyncCollection {
|
||||
fn from(v: u8) -> Self {
|
||||
match v {
|
||||
0 => SyncCollection::Email,
|
||||
1 => SyncCollection::Thread,
|
||||
2 => SyncCollection::Calendar,
|
||||
3 => SyncCollection::AddressBook,
|
||||
4 => SyncCollection::FileNode,
|
||||
5 => SyncCollection::Identity,
|
||||
6 => SyncCollection::EmailSubmission,
|
||||
7 => SyncCollection::SieveScript,
|
||||
_ => SyncCollection::None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<u64> for Collection {
|
||||
fn from(v: u64) -> Self {
|
||||
match v {
|
||||
@@ -123,6 +154,12 @@ impl From<Collection> for u8 {
|
||||
}
|
||||
}
|
||||
|
||||
impl From<SyncCollection> for u8 {
|
||||
fn from(v: SyncCollection) -> Self {
|
||||
v as u8
|
||||
}
|
||||
}
|
||||
|
||||
impl From<Collection> for u64 {
|
||||
fn from(collection: Collection) -> u64 {
|
||||
collection as u64
|
||||
@@ -171,10 +208,6 @@ impl Collection {
|
||||
Collection::None => "",
|
||||
}
|
||||
}
|
||||
|
||||
pub fn as_child_update(&self) -> u8 {
|
||||
u8::MAX - u8::from(*self)
|
||||
}
|
||||
}
|
||||
|
||||
impl FromStr for Collection {
|
||||
|
||||
@@ -172,25 +172,21 @@ impl TryFrom<&str> for DataType {
|
||||
}
|
||||
}
|
||||
|
||||
impl TryFrom<ShortId> for DataType {
|
||||
type Error = ();
|
||||
|
||||
fn try_from(value: ShortId) -> Result<Self, Self::Error> {
|
||||
const MAILBOX_CHANGE: u8 = u8::MAX - 1;
|
||||
match value.0 {
|
||||
0 => Ok(DataType::Email),
|
||||
1 | MAILBOX_CHANGE => Ok(DataType::Mailbox),
|
||||
2 => Ok(DataType::Thread),
|
||||
3 => Ok(DataType::Identity),
|
||||
4 => Ok(DataType::EmailSubmission),
|
||||
5 => Ok(DataType::SieveScript),
|
||||
6 => Ok(DataType::PushSubscription),
|
||||
8 => Ok(DataType::Calendar),
|
||||
9 => Ok(DataType::CalendarEvent),
|
||||
10 => Ok(DataType::AddressBook),
|
||||
11 => Ok(DataType::ContactCard),
|
||||
12 => Ok(DataType::FileNode),
|
||||
_ => Err(()),
|
||||
impl DataType {
|
||||
pub fn try_from_id(value: ShortId, is_container: bool) -> Option<Self> {
|
||||
match (value.0, is_container) {
|
||||
(0, false) => DataType::Email.into(),
|
||||
(0, true) => DataType::Mailbox.into(),
|
||||
(1, _) => DataType::Thread.into(),
|
||||
(2, true) => DataType::Calendar.into(),
|
||||
(2, false) => DataType::CalendarEvent.into(),
|
||||
(3, true) => DataType::AddressBook.into(),
|
||||
(3, false) => DataType::ContactCard.into(),
|
||||
(4, _) => DataType::FileNode.into(),
|
||||
(5, _) => DataType::Identity.into(),
|
||||
(6, _) => DataType::EmailSubmission.into(),
|
||||
(7, _) => DataType::SieveScript.into(),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user