use indexmap::IndexMap;
pub use crate::prelude::*;
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
pub struct TheCollection {
pub name: String,
pub keys: indexmap::IndexMap<String, TheValue>,
}
impl Default for TheCollection {
fn default() -> Self {
Self::new()
}
}
impl TheCollection {
pub fn named(name: String) -> Self {
Self {
name,
keys: IndexMap::default(),
}
}
pub fn new() -> Self {
Self {
name: str!("Unnamed"),
keys: IndexMap::default(),
}
}
pub fn clear(&mut self) {
self.keys.clear();
}
pub fn get(&self, key: &str) -> Option<&TheValue> {
self.keys.get(key)
}
pub fn get_default(&self, key: &str, default: TheValue) -> TheValue {
if let Some(v) = self.keys.get(key) {
v.clone()
} else {
default
}
}
pub fn get_f32_default(&self, key: &str, default: f32) -> f32 {
if let Some(v) = self.keys.get(key) {
if let Some(v) = v.to_f32() {
return v;
}
}
default
}
pub fn get_float3_default(&self, key: &str, default: Vec3<f32>) -> Vec3<f32> {
if let Some(v) = self.keys.get(key) {
if let Some(v) = v.to_vec3f() {
return v;
}
}
default
}
pub fn get_i32_default(&self, key: &str, default: i32) -> i32 {
if let Some(v) = self.keys.get(key) {
if let Some(v) = v.to_i32() {
return v;
}
}
default
}
pub fn get_bool_default(&self, key: &str, default: bool) -> bool {
if let Some(TheValue::Bool(v)) = self.keys.get(key) {
return *v;
}
default
}
pub fn set(&mut self, key: &str, value: TheValue) {
self.keys.insert(key.to_string(), value);
}
pub fn contains_key(&self, key: &str) -> bool {
self.keys.contains_key(key)
}
}