terminus_store/storage/
label.rs1use std::io;
2
3use async_trait::async_trait;
4
5#[derive(Clone, PartialEq, Eq, Debug)]
6pub struct Label {
7 pub name: String,
8 pub layer: Option<[u32; 5]>,
9 pub version: u64,
10}
11
12impl Label {
13 pub fn new_empty(name: &str) -> Label {
14 Label {
15 name: name.to_owned(),
16 layer: None,
17 version: 0,
18 }
19 }
20 pub fn new(name: &str, layer: [u32; 5]) -> Label {
21 Label {
22 name: name.to_owned(),
23 layer: Some(layer),
24 version: 0,
25 }
26 }
27
28 pub fn with_updated_layer(&self, layer: Option<[u32; 5]>) -> Label {
29 Label {
30 name: self.name.clone(),
31 layer,
32 version: self.version + 1,
33 }
34 }
35}
36
37#[async_trait]
38pub trait LabelStore: Send + Sync {
39 async fn labels(&self) -> io::Result<Vec<Label>>;
40 async fn create_label(&self, name: &str) -> io::Result<Label>;
41 async fn get_label(&self, name: &str) -> io::Result<Option<Label>>;
42 async fn set_label_option(
43 &self,
44 label: &Label,
45 layer: Option<[u32; 5]>,
46 ) -> io::Result<Option<Label>>;
47 async fn delete_label(&self, name: &str) -> io::Result<bool>;
48
49 async fn set_label(&self, label: &Label, layer: [u32; 5]) -> io::Result<Option<Label>> {
50 self.set_label_option(label, Some(layer)).await
51 }
52
53 async fn clear_label(&self, label: &Label) -> io::Result<Option<Label>> {
54 self.set_label_option(label, None).await
55 }
56}