Skip to main content

terminus_store/storage/
label.rs

1use 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}