Add tree thing

This commit is contained in:
Michael Mikovsky
2025-12-17 16:40:34 -07:00
parent 6e73cb8a8e
commit 2dc736b02e
12 changed files with 385 additions and 3 deletions
+49
View File
@@ -0,0 +1,49 @@
use std::collections::HashMap;
use serde_json::Value;
use crate::config::ConfigStructField;
#[derive(Clone, serde::Deserialize, serde::Serialize)]
pub enum Interface {
Sub(HashMap<String, InterfaceWrapper>),
Struct {
fields: HashMap<String, ConfigStructField>,
value: HashMap<String, Value>,
},
}
#[derive(Clone, serde::Deserialize, serde::Serialize)]
pub struct InterfaceWrapper {
pub name: String,
pub interface: Interface,
}
impl InterfaceWrapper {
pub fn get_path(&self, elements: &Vec<&str>, depth: usize) -> Result<InterfaceWrapper, String> {
if depth == elements.len() {
return Ok(self.clone());
}
let element = elements[depth];
match &self.interface {
Interface::Sub(interface_wrappers) => {
if let Some(interface) = interface_wrappers.get(element) {
interface.get_path(elements, depth)
} else {
Err("Invalid Path".into())
}
}
_ => Err("Invalid Path".into()),
}
}
}
pub fn get_test_interface() -> InterfaceWrapper {
InterfaceWrapper {
name: "Root Interface".into(),
interface: Interface::Sub(HashMap::new()),
}
}
+3 -1
View File
@@ -1,6 +1,8 @@
mod blob;
// pub mod interface;
pub use blob::Blob;
// pub use interface::InterfaceWrapper;
use std::{
collections::HashMap,
@@ -37,7 +39,7 @@ struct BuildConfig {
}
#[derive(Debug, Clone, serde::Deserialize, serde::Serialize)]
enum ConfigStructField {
pub enum ConfigStructField {
Header(String),
Text(String),
String {