From d089c2a8aa0f97873483700ea44d022d00d82ab6 Mon Sep 17 00:00:00 2001 From: Michael Mikovsky <77305074+Astatin3@users.noreply.github.com> Date: Sun, 8 Feb 2026 12:02:50 -0700 Subject: [PATCH] Work on new tree system --- src/error.rs | 7 ++-- src/manager/log.rs | 2 +- src/manager/mod.rs | 72 ++++++++++++++++++++++++++++--------- src/manager/tree_structs.rs | 13 +++++++ unshell-payload/src/main.rs | 8 +++-- unshell-server/src/lib.rs | 2 ++ 6 files changed, 83 insertions(+), 21 deletions(-) create mode 100644 src/manager/tree_structs.rs diff --git a/src/error.rs b/src/error.rs index f0db14b..6cbb8ab 100644 --- a/src/error.rs +++ b/src/error.rs @@ -5,6 +5,11 @@ pub type Result = std::result::Result; ///Generic error type for module-related operations. #[derive(Clone, Debug, serde::Serialize, serde::Deserialize)] pub enum ModuleError { + NoError, + + TreeNotExist, + TreeMessageError(String), + LibLoadingError(String), // LogError(log::SetLoggerError), LinkError(String), @@ -12,8 +17,6 @@ pub enum ModuleError { DatabaseError(String), SerdeJsonError(String), - TreeMessageError(String), - Error(String), } diff --git a/src/manager/log.rs b/src/manager/log.rs index c895617..9d9b646 100644 --- a/src/manager/log.rs +++ b/src/manager/log.rs @@ -3,7 +3,7 @@ use crossbeam_channel::Sender; use crate::{ logger::{Logger, Record}, - manager::Manager, + manager::Tree, }; pub struct ManagerLogger { diff --git a/src/manager/mod.rs b/src/manager/mod.rs index f779f23..aa661a4 100644 --- a/src/manager/mod.rs +++ b/src/manager/mod.rs @@ -1,23 +1,63 @@ -mod log; +use std::collections::HashMap; -pub struct Manager { - // logs_tx: Sender, - // logs_rx: Receiver, +use crate::{ + ModuleError, + manager::tree_structs::{TreeMessage, TreeType}, +}; + +mod log; +mod tree_structs; + +pub trait TreeElement { + fn get_children(&self) -> HashMap; + fn get_type(&self) -> TreeType; + fn send_message(&mut self, message: TreeMessage) -> TreeMessage; + fn send_message_child(&mut self, element: String, message: TreeMessage) -> TreeMessage; } -impl Manager { +pub struct Tree { + elements: HashMap>, +} + +impl Tree { pub fn new() -> Self { - Self {} - - // let (tx, rx) = crossbeam_channel::unbounded(); - - // Self { - // logs_tx: tx, - // logs_rx: rx, - // } + Self { + elements: HashMap::new(), + } } - // pub fn log_count(&self) -> usize { - // self.logs_rx.len() - // } + pub fn add_element(&mut self, name: String, element: Box) { + self.elements.insert(name, element); + } +} + +impl TreeElement for Tree { + fn get_children(&self) -> HashMap { + self.elements + .iter() + .map(|c| (c.0.clone(), c.1.get_type())) + .into_iter() + .collect() + } + + fn get_type(&self) -> TreeType { + TreeType::RootTree + } + + fn send_message_child(&mut self, element_name: String, message: TreeMessage) -> TreeMessage { + if let Some(element) = self.elements.get_mut(&element_name) { + element.send_message(message) + } else { + TreeMessage::Result(ModuleError::TreeNotExist) + } + } + + fn send_message(&mut self, _message: TreeMessage) -> TreeMessage { + TreeMessage::Response + // if let Some(element) = self.elements.get_mut(&element_name) { + // element.send_message(message) + // } else { + // TreeMessage::Result(ModuleError::TreeNotExist) + // } + } } diff --git a/src/manager/tree_structs.rs b/src/manager/tree_structs.rs new file mode 100644 index 0000000..d01eba5 --- /dev/null +++ b/src/manager/tree_structs.rs @@ -0,0 +1,13 @@ +pub enum TreeMessage { + Request, + Response, + Result(crate::error::ModuleError), +} + +pub enum TreeType { + RootTree, + + TypeA, + TypeB, + TypeC, +} diff --git a/unshell-payload/src/main.rs b/unshell-payload/src/main.rs index 17da53c..f65aca1 100644 --- a/unshell-payload/src/main.rs +++ b/unshell-payload/src/main.rs @@ -1,9 +1,9 @@ -use unshell::{info, manager::Manager}; +use unshell::{info, manager::Tree}; // use std::dyn fn main() { - let manager = Manager::new(); + let manager = Tree::new(); manager.init_logger(); info!("Test thing!"); @@ -16,6 +16,10 @@ fn main() { // info!("This is a string!"); } +pub fn test23() -> (i32, i32) { + (6, 3) +} + // use std::{any::Any, collections::HashMap, fs::File, io::Read}; // use static_init::dynamic; diff --git a/unshell-server/src/lib.rs b/unshell-server/src/lib.rs index 12880e9..7db9e1e 100644 --- a/unshell-server/src/lib.rs +++ b/unshell-server/src/lib.rs @@ -4,6 +4,8 @@ mod auth; pub mod logger; mod server; +// use math + pub use server::Server; use static_init::dynamic;