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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
pub type Url = String;
pub type FileSize = u64;
pub enum DriveLocation<'a> {
CurrentDrive,
UserId(&'a str),
GroupId(&'a str),
SiteId(&'a str),
DriveId(&'a str),
}
impl<'a> From<&'a Drive> for DriveLocation<'a> {
fn from(drive: &'a Drive) -> Self {
DriveLocation::DriveId(&drive.id.0)
}
}
impl<'a> From<&'a DriveId> for DriveLocation<'a> {
fn from(id: &'a DriveId) -> Self {
DriveLocation::DriveId(&id.0)
}
}
pub enum ItemLocation<'a> {
ItemId(&'a str),
Path(&'a str),
}
impl<'a> From<&'a str> for ItemLocation<'a> {
fn from(path: &'a str) -> Self {
ItemLocation::Path(path)
}
}
impl<'a> From<&'a DriveItem> for ItemLocation<'a> {
fn from(item: &'a DriveItem) -> Self {
ItemLocation::ItemId(&item.id.0)
}
}
impl<'a> From<&'a ItemId> for ItemLocation<'a> {
fn from(id: &'a ItemId) -> Self {
ItemLocation::ItemId(&id.0)
}
}
#[derive(Debug, Deserialize, Eq, Hash, PartialEq)]
pub struct DriveId(String);
impl DriveId {
pub fn new(id: String) -> Self {
DriveId(id)
}
}
#[derive(Debug, Deserialize, Eq, Hash, PartialEq)]
pub struct ItemId(String);
impl ItemId {
pub fn new(id: String) -> Self {
ItemId(id)
}
}
#[derive(Debug, Deserialize, Eq, Hash, PartialEq)]
pub struct Tag(String);
impl Tag {
pub fn new(tag: String) -> Self {
Tag(tag)
}
}
#[derive(Debug, Deserialize)]
pub struct Drive {
pub id: DriveId,
pub description: String,
pub items: Option<Vec<DriveItem>>,
pub name: String,
pub root: DriveItem,
pub special: Option<DriveItem>,
pub web_url: Url,
}
#[derive(Debug, Deserialize)]
pub struct DriveItem {
pub description: Option<String>,
pub size: FileSize,
pub web_dav_url: Url,
pub children: Vec<DriveItem>,
pub id: ItemId,
pub e_tag: Tag,
pub name: String,
pub web_url: Url,
pub download_url: Url,
}