mirror of
https://github.com/Astatin3/unshell.git
synced 2026-06-09 06:47:59 -06:00
Configurable Struct
This commit is contained in:
@@ -1,5 +1,11 @@
|
||||
use serde::{Deserialize, Serialize};
|
||||
use serde_json::Value;
|
||||
use serde_json::{Value, json};
|
||||
|
||||
use crate::{
|
||||
ModuleError, Result,
|
||||
config::{InterfaceData, InterfaceStruct, TreeMessage},
|
||||
warn,
|
||||
};
|
||||
|
||||
pub type ConfigStructKeys = Vec<ConfigStructField>;
|
||||
pub type ConfigStructValues = Vec<Value>;
|
||||
@@ -9,6 +15,47 @@ pub struct Config {
|
||||
values: ConfigStructValues,
|
||||
}
|
||||
|
||||
impl Config {
|
||||
pub fn new(keys: ConfigStructKeys) -> Self {
|
||||
let values = keys
|
||||
.iter()
|
||||
.map(|key| match key {
|
||||
ConfigStructField::Header(_) => Value::Null,
|
||||
ConfigStructField::Text(_) => Value::Null,
|
||||
ConfigStructField::String { default, .. } => json!(default),
|
||||
ConfigStructField::Integer { default, .. } => json!(default),
|
||||
})
|
||||
.collect();
|
||||
|
||||
Self { keys, values }
|
||||
}
|
||||
|
||||
pub fn get(&mut self, message: TreeMessage) -> Result<TreeMessage> {
|
||||
match message {
|
||||
TreeMessage::State(InterfaceData::ConfigStruct(values)) => {
|
||||
self.values = values;
|
||||
Ok(TreeMessage::Success)
|
||||
}
|
||||
|
||||
TreeMessage::RequestStruct => Ok(TreeMessage::Interface(
|
||||
InterfaceStruct::ConfigStruct(self.keys.clone()),
|
||||
)),
|
||||
TreeMessage::RequestState => Ok(TreeMessage::State(InterfaceData::ConfigStruct(
|
||||
self.values.clone(),
|
||||
))),
|
||||
TreeMessage::RequestStructAndValue => Ok(TreeMessage::InterfaceAndValue(
|
||||
InterfaceStruct::ConfigStruct(self.keys.clone()),
|
||||
InterfaceData::ConfigStruct(self.values.clone()),
|
||||
)),
|
||||
|
||||
_ => {
|
||||
warn!("Tree got invalid message");
|
||||
Err(ModuleError::Error("Invalid Request".into()))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Deserialize, Serialize)]
|
||||
pub enum ConfigStructField {
|
||||
Header(String),
|
||||
|
||||
Reference in New Issue
Block a user