email/folder/sync/
config.rs1use 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#[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 #[default]
29 All,
30
31 Include(BTreeSet<String>),
33
34 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}