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}