1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
use std::collections::HashSet;
use crate::ArcResult;
#[derive(Debug, Clone)]
pub struct ArchiveOptions {
pub(crate) extensions_archived : HashSet<String>,
pub(crate) archive_subfolders : bool,
}
impl ArchiveOptions {
pub fn is_archived(&self, extension : &str) -> bool{
if self.extensions_archived.len() == 0{
true
} else{
self.extensions_archived.contains(extension)
}
}
pub fn archive_subfolders(&self) -> bool{ self.archive_subfolders }
pub fn new() -> ArchiveOptions {
ArchiveOptionsBuilder::new().build().unwrap()
}
pub fn from(builder : ArchiveOptionsBuilder) -> ArcResult<ArchiveOptions>{
let extensions_archived : HashSet<String> = builder
.extensions_archived.into_iter()
.map(|s| s.to_string()).collect();
let archive_subfolders = builder.archive_subfolders;
Ok(ArchiveOptions {
extensions_archived,
archive_subfolders,
})
}
}
#[derive(Debug, Clone)]
pub struct ArchiveOptionsBuilder {
extensions_archived : HashSet<String>,
archive_subfolders : bool,
}
impl ArchiveOptionsBuilder{
pub fn new() -> ArchiveOptionsBuilder{
ArchiveOptionsBuilder{
extensions_archived : HashSet::new(),
archive_subfolders : true
}
}
pub fn add_extension(mut self, ext : &str) -> ArchiveOptionsBuilder{
self.extensions_archived.insert(ext.to_string());
self
}
pub fn archive_subfolders(mut self, archive_subfolders : bool) -> ArchiveOptionsBuilder{
self.archive_subfolders = archive_subfolders;
self
}
pub fn build(self) -> ArcResult<ArchiveOptions>{
ArchiveOptions::from(self)
}
}