use std::collections::HashMap;
use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct Subject {
pub id: String,
#[serde(default)]
pub attrs: HashMap<String, Value>,
}
impl Subject {
pub fn new<S: Into<String>>(id: S) -> Self {
Self {
id: id.into(),
attrs: HashMap::new(),
}
}
#[must_use]
pub fn with_attr<K, V>(mut self, key: K, value: V) -> Self
where
K: Into<String>,
V: Into<Value>,
{
self.attrs.insert(key.into(), value.into());
self
}
pub fn attr(&self, key: &str) -> Option<&Value> {
self.attrs.get(key)
}
}