Skip to main content

pachy_core/
props.rs

1use serde::{Deserialize, Serialize};
2use std::collections::HashMap;
3
4#[derive(Debug, Clone, Default, Serialize, Deserialize)]
5pub struct Props {
6    inner: HashMap<String, serde_json::Value>,
7}
8
9impl Props {
10    pub fn new() -> Self {
11        Self::default()
12    }
13
14    pub fn insert(&mut self, key: impl Into<String>, value: impl Serialize) -> &mut Self {
15        let v = serde_json::to_value(value).unwrap_or(serde_json::Value::Null);
16        self.inner.insert(key.into(), v);
17        self
18    }
19
20    pub fn get<T: for<'de> Deserialize<'de>>(&self, key: &str) -> Option<T> {
21        self.inner
22            .get(key)
23            .and_then(|v| serde_json::from_value(v.clone()).ok())
24    }
25}