use serde::{Deserialize, Serialize};
use super::json_plus::{JsonPlusEntity, JsonPlusObject};
use super::range::Range;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Parameters {
pub(crate) parameters: JsonPlusObject,
pub range: Range,
}
impl Parameters {
pub fn new() -> Self {
Parameters {
parameters: JsonPlusObject::new(),
range: Range::null(),
}
}
pub fn from_json_object_range(parameters: JsonPlusObject, range: Range) -> Self {
Parameters { parameters, range }
}
pub fn get(&self, key: &str) -> Option<&JsonPlusEntity> {
self.parameters.get(key)
}
pub fn get_as_string_only(&self, key: &str) -> Option<String> {
self.parameters.get_as_string_only(key)
}
pub fn get_as_bool(&self, key: &str) -> Option<bool> {
self.parameters.get_as_bool(key)
}
pub fn get_as_integer_only(&self, key: &str) -> Option<i64> {
self.parameters.get_as_integer_only(key)
}
pub fn insert(&mut self, key: String, value: JsonPlusEntity) {
self.parameters.properties.insert(key, value);
}
pub fn remove(&mut self, key: &str) {
self.parameters.properties.remove(key);
}
pub fn update(mut self, other: &Parameters) -> Self {
for parameter in other.parameters.properties.iter() {
self.parameters
.properties
.insert(parameter.0.clone(), parameter.1.clone());
}
self
}
pub fn integrate(mut self, other: &Parameters) -> Self {
for parameter in other.parameters.properties.iter() {
if let Some(_) = self.parameters.properties.get(parameter.0) {
continue;
}
self.parameters
.properties
.insert(parameter.0.clone(), parameter.1.clone());
}
self
}
}
impl ToString for Parameters {
fn to_string(&self) -> String {
self.parameters.to_string()
}
}