modulink_rs/context/
mod.rs1use serde::{Deserialize, Serialize};
19use serde_json::Value;
20use std::collections::HashMap;
21
22#[derive(Debug, Clone, Serialize, Deserialize, Default)]
23pub struct Context(pub HashMap<String, Value>);
24
25impl Context {
26 pub fn new() -> Self {
27 Context(HashMap::new())
28 }
29 pub fn insert<K: Into<String>, V: Serialize>(self, key: K, value: V) -> Self {
31 let mut new_ctx = self;
32 new_ctx.0.insert(key.into(), serde_json::to_value(value).unwrap());
33 new_ctx
34 }
35 pub fn get<V: for<'de> Deserialize<'de>>(&self, key: &str) -> Option<V> {
36 self.0.get(key).and_then(|v| serde_json::from_value(v.clone()).ok())
37 }
38}
39
40#[derive(Debug, Clone, Serialize, Deserialize, Default)]
41pub struct ContextMutable(pub HashMap<String, Value>);
42
43impl ContextMutable {
44 pub fn new() -> Self {
45 ContextMutable(HashMap::new())
46 }
47 pub fn insert<K: Into<String>, V: Serialize>(&mut self, key: K, value: V) {
49 self.0.insert(key.into(), serde_json::to_value(value).unwrap());
50 }
51 pub fn get<V: for<'de> Deserialize<'de>>(&self, key: &str) -> Option<V> {
52 self.0.get(key).and_then(|v| serde_json::from_value(v.clone()).ok())
53 }
54}