-
Notifications
You must be signed in to change notification settings - Fork 32
/
Copy pathlabel.rs
56 lines (49 loc) · 1.44 KB
/
label.rs
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
use std::io;
use async_trait::async_trait;
#[derive(Clone, PartialEq, Eq, Debug)]
pub struct Label {
pub name: String,
pub layer: Option<[u32; 5]>,
pub version: u64,
}
impl Label {
pub fn new_empty(name: &str) -> Label {
Label {
name: name.to_owned(),
layer: None,
version: 0,
}
}
pub fn new(name: &str, layer: [u32; 5]) -> Label {
Label {
name: name.to_owned(),
layer: Some(layer),
version: 0,
}
}
pub fn with_updated_layer(&self, layer: Option<[u32; 5]>) -> Label {
Label {
name: self.name.clone(),
layer,
version: self.version + 1,
}
}
}
#[async_trait]
pub trait LabelStore: Send + Sync {
async fn labels(&self) -> io::Result<Vec<Label>>;
async fn create_label(&self, name: &str) -> io::Result<Label>;
async fn get_label(&self, name: &str) -> io::Result<Option<Label>>;
async fn set_label_option(
&self,
label: &Label,
layer: Option<[u32; 5]>,
) -> io::Result<Option<Label>>;
async fn delete_label(&self, name: &str) -> io::Result<bool>;
async fn set_label(&self, label: &Label, layer: [u32; 5]) -> io::Result<Option<Label>> {
self.set_label_option(label, Some(layer)).await
}
async fn clear_label(&self, label: &Label) -> io::Result<Option<Label>> {
self.set_label_option(label, None).await
}
}