pachy-core 0.1.0

Core traits and types for the Pachycephalosaurus web framework
Documentation
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())
    }
}