use std::collections::HashMap;
enum StoreState {
Str(String), Boolean(bool), Flag, }
pub(crate) struct Store {
store: HashMap<String, StoreState>,
}
impl Store {
pub fn init() -> Self {
Store {
store: HashMap::new(),
}
}
pub fn get_string(&self, key: &str) -> Option<&str> {
match self.store.get(key) {
Some(StoreState::Str(s)) => Some(s.as_str()),
_ => None,
}
}
pub fn get_boolean(&self, key: &str) -> Option<bool> {
match self.store.get(key) {
Some(StoreState::Boolean(b)) => Some(*b),
_ => None,
}
}
pub fn isset(&self, key: &str) -> bool {
self.store.contains_key(key)
}
pub fn set_string(&mut self, key: &str, val: String) {
self.store.insert(key.to_string(), StoreState::Str(val));
}
pub fn set_boolean(&mut self, key: &str, val: bool) {
self.store.insert(key.to_string(), StoreState::Boolean(val));
}
pub fn set(&mut self, key: &str) {
self.store.insert(key.to_string(), StoreState::Flag);
}
}
#[cfg(test)]
mod tests {
use pretty_assertions::assert_eq;
use super::*;
#[test]
fn test_ui_store() {
let mut store: Store = Store::init();
store.set_string("test", String::from("hello"));
assert_eq!(*store.get_string("test").as_ref().unwrap(), "hello");
store.set_boolean("bool", true);
assert_eq!(store.get_boolean("bool").unwrap(), true);
store.set("myflag");
assert_eq!(store.isset("myflag"), true);
assert!(store.get_boolean("unexisting-key").is_none());
assert!(store.get_string("unexisting-key").is_none());
}
}