use crate::prelude::*;
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
pub struct TheCodeObject {
pub id: Uuid,
pub package_id: Uuid,
pub values: FxHashMap<String, TheValue>,
}
impl Default for TheCodeObject {
fn default() -> Self {
TheCodeObject::new()
}
}
impl TheCodeObject {
pub fn new() -> Self {
Self {
id: Uuid::new_v4(),
package_id: Uuid::new_v4(),
values: FxHashMap::default(),
}
}
pub fn get(&self, name: &String) -> Option<&TheValue> {
self.values.get(name)
}
pub fn get_mut(&mut self, name: &String) -> Option<&mut TheValue> {
self.values.get_mut(name)
}
pub fn set(&mut self, name: String, value: TheValue) {
self.values.insert(name, value);
}
pub fn describe(&self) -> String {
let mut items: Vec<_> = self.values.iter().collect();
items.sort_by_key(|&(key, _)| key);
items
.iter()
.map(|(key, value)| format!("{}: {}", key, value.describe()))
.collect::<Vec<String>>()
.join("\n")
}
}