use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct Props {
inner: HashMap<String, serde_json::Value>,
}
impl Props {
pub fn new() -> Self {
Self::default()
}
pub fn insert(&mut self, key: impl Into<String>, value: impl Serialize) -> &mut Self {
let v = serde_json::to_value(value).unwrap_or(serde_json::Value::Null);
self.inner.insert(key.into(), v);
self
}
pub fn get<T: for<'de> Deserialize<'de>>(&self, key: &str) -> Option<T> {
self.inner
.get(key)
.and_then(|v| serde_json::from_value(v.clone()).ok())
}
}