db/model/
tag.rs

1use std::collections::HashMap;
2
3type TagKey = &'static str;
4type TagValue = String;
5type TagBucketInner = HashMap<TagKey, TagValue>;
6
7#[derive(Clone, Default)]
8pub struct TagBucket(TagBucketInner);
9
10#[macro_export]
11macro_rules! tag {
12	($($key: expr => $value: expr),*) => {{
13		#[allow(unused_mut)]
14  let mut map = std::collections::HashMap::default();
15  $(
16   map.insert($key, $value);
17  )*
18  $crate::TagBucket::new(map)
19 }};
20}
21
22impl TagBucket {
23	pub fn new(map: TagBucketInner) -> TagBucket {
24		TagBucket(map)
25	}
26
27	pub fn get(&self, key: TagKey) -> Option<TagValue> {
28		self.0.get(key).cloned()
29	}
30
31	pub fn insert(&mut self, key: TagKey, val: TagValue) {
32		self.0.insert(key, val);
33	}
34
35	pub fn unchecked_get(&self, key: TagKey) -> TagValue {
36		self.0.get(key).unwrap().clone()
37	}
38
39	pub fn get_bytes(&self, key: TagKey) -> Option<Vec<u8>> {
40		let wrapped_value = self.0.get(key).cloned();
41		if let Some(v) = wrapped_value {
42			return Some(v.as_bytes().to_vec());
43		}
44		None
45	}
46}