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
use futures::prelude::*; #[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, } } } pub trait LabelStore: Send + Sync { fn labels(&self) -> Box<dyn Future<Item = Vec<Label>, Error = std::io::Error> + Send>; fn create_label( &self, name: &str, ) -> Box<dyn Future<Item = Label, Error = std::io::Error> + Send>; fn get_label( &self, name: &str, ) -> Box<dyn Future<Item = Option<Label>, Error = std::io::Error> + Send>; fn set_label_option( &self, label: &Label, layer: Option<[u32; 5]>, ) -> Box<dyn Future<Item = Option<Label>, Error = std::io::Error> + Send>; fn set_label( &self, label: &Label, layer: [u32; 5], ) -> Box<dyn Future<Item = Option<Label>, Error = std::io::Error> + Send> { self.set_label_option(label, Some(layer)) } fn clear_label( &self, label: &Label, ) -> Box<dyn Future<Item = Option<Label>, Error = std::io::Error> + Send> { self.set_label_option(label, None) } }