use std::collections::HashMap;
use cooper::ThreadedActor;
type State = HashMap<String, String>;
#[derive(Clone)]
pub struct SharedMap {
actor: ThreadedActor<State>,
}
impl SharedMap {
pub fn new() -> Self {
Self { actor: ThreadedActor::new() }
}
pub fn insert<K,V>(&self, key: K, val: V)
where
K: Into<String>,
V: Into<String>,
{
let key = key.into();
let val = val.into();
self.actor.cast(move |state| {
state.insert(key, val);
});
}
pub fn get<K: Into<String>>(&self, key: K) -> Option<String> {
let key = key.into();
self.actor.call(move |state| {
state.get(&key).map(|v| v.to_string())
})
}
}
fn main() {
let map = SharedMap::new();
println!("Inserting entry 'city'...");
map.insert("city", "Boston");
println!("Retrieving entry...");
match map.get("city") {
Some(s) => println!("Got: {}", s),
None => println!("Error: No entry found"),
}
}