email/folder/sync/
config.rs

1//! # Folder sync config
2
3use std::collections::BTreeSet;
4
5#[derive(Clone, Debug, Default, Eq, PartialEq)]
6#[cfg_attr(
7    feature = "derive",
8    derive(serde::Serialize, serde::Deserialize),
9    serde(rename_all = "kebab-case")
10)]
11pub struct FolderSyncConfig {
12    #[cfg_attr(feature = "derive", serde(default))]
13    pub filter: FolderSyncStrategy,
14
15    #[cfg_attr(feature = "derive", serde(default))]
16    pub permissions: FolderSyncPermissions,
17}
18
19/// The folder synchronization strategy.
20#[derive(Clone, Debug, Default, Eq, PartialEq)]
21#[cfg_attr(
22    feature = "derive",
23    derive(serde::Serialize, serde::Deserialize),
24    serde(rename_all = "kebab-case")
25)]
26pub enum FolderSyncStrategy {
27    /// Synchronizes all folders.
28    #[default]
29    All,
30
31    /// Synchronizes only folders matching the given names.
32    Include(BTreeSet<String>),
33
34    /// Synchronizes all folders except the ones matching the given
35    /// names.
36    Exclude(BTreeSet<String>),
37}
38
39impl FolderSyncStrategy {
40    pub fn matches(&self, folder: &str) -> bool {
41        match self {
42            FolderSyncStrategy::All => true,
43            FolderSyncStrategy::Include(folders) => folders.contains(folder),
44            FolderSyncStrategy::Exclude(folders) => !folders.contains(folder),
45        }
46    }
47}
48
49#[derive(Clone, Debug, Eq, PartialEq)]
50#[cfg_attr(
51    feature = "derive",
52    derive(serde::Serialize, serde::Deserialize),
53    serde(rename_all = "kebab-case")
54)]
55pub struct FolderSyncPermissions {
56    #[cfg_attr(
57        feature = "derive",
58        serde(default = "FolderSyncPermissions::default_create")
59    )]
60    pub create: bool,
61
62    #[cfg_attr(
63        feature = "derive",
64        serde(default = "FolderSyncPermissions::default_delete")
65    )]
66    pub delete: bool,
67}
68
69impl FolderSyncPermissions {
70    pub fn default_create() -> bool {
71        true
72    }
73
74    pub fn default_delete() -> bool {
75        true
76    }
77}
78
79impl Default for FolderSyncPermissions {
80    fn default() -> Self {
81        Self {
82            create: Self::default_create(),
83            delete: Self::default_delete(),
84        }
85    }
86}