Convert to no_std, add request type

This commit is contained in:
Michael Mikovsky
2026-03-17 16:40:05 -06:00
parent 3a5605bc0d
commit f3a59f5082
8 changed files with 261 additions and 99 deletions
Generated
+187 -3
View File
@@ -92,6 +92,35 @@ version = "3.19.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510" checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510"
[[package]]
name = "bytecheck"
version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0caa33a2c0edca0419d15ac723dff03f1956f7978329b1e3b5fdaaaed9d3ca8b"
dependencies = [
"bytecheck_derive",
"ptr_meta",
"rancor",
"simdutf8",
]
[[package]]
name = "bytecheck_derive"
version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "89385e82b5d1821d2219e0b095efa2cc1f246cbf99080f3be46a1a85c0d392d9"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.114",
]
[[package]]
name = "bytes"
version = "1.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33"
[[package]] [[package]]
name = "cbc" name = "cbc"
version = "0.1.2" version = "0.1.2"
@@ -202,6 +231,12 @@ dependencies = [
"crypto-common", "crypto-common",
] ]
[[package]]
name = "equivalent"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
[[package]] [[package]]
name = "find-msvc-tools" name = "find-msvc-tools"
version = "0.1.8" version = "0.1.8"
@@ -230,6 +265,12 @@ dependencies = [
"wasip2", "wasip2",
] ]
[[package]]
name = "hashbrown"
version = "0.16.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
[[package]] [[package]]
name = "hex" name = "hex"
version = "0.4.3" version = "0.4.3"
@@ -275,6 +316,16 @@ dependencies = [
"cc", "cc",
] ]
[[package]]
name = "indexmap"
version = "2.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017"
dependencies = [
"equivalent",
"hashbrown",
]
[[package]] [[package]]
name = "inout" name = "inout"
version = "0.1.4" version = "0.1.4"
@@ -328,6 +379,26 @@ version = "2.7.6"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273"
[[package]]
name = "munge"
version = "0.4.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5e17401f259eba956ca16491461b6e8f72913a0a114e39736ce404410f915a0c"
dependencies = [
"munge_macro",
]
[[package]]
name = "munge_macro"
version = "0.4.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4568f25ccbd45ab5d5603dc34318c1ec56b117531781260002151b8530a9f931"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.114",
]
[[package]] [[package]]
name = "num-traits" name = "num-traits"
version = "0.2.19" version = "0.2.19"
@@ -384,6 +455,26 @@ dependencies = [
"unicode-ident", "unicode-ident",
] ]
[[package]]
name = "ptr_meta"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b9a0cf95a1196af61d4f1cbdab967179516d9a4a4312af1f31948f8f6224a79"
dependencies = [
"ptr_meta_derive",
]
[[package]]
name = "ptr_meta_derive"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7347867d0a7e1208d93b46767be83e2b8f978c3dad35f775ac8d8847551d6fe1"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.114",
]
[[package]] [[package]]
name = "quote" name = "quote"
version = "1.0.44" version = "1.0.44"
@@ -399,6 +490,15 @@ version = "5.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
[[package]]
name = "rancor"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a063ea72381527c2a0561da9c80000ef822bdd7c3241b1cc1b12100e3df081ee"
dependencies = [
"ptr_meta",
]
[[package]] [[package]]
name = "rand" name = "rand"
version = "0.9.2" version = "0.9.2"
@@ -466,12 +566,57 @@ version = "0.8.9"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a96887878f22d7bad8a3b6dc5b7440e0ada9a245242924394987b21cf2210a4c" checksum = "a96887878f22d7bad8a3b6dc5b7440e0ada9a245242924394987b21cf2210a4c"
[[package]]
name = "rend"
version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cadadef317c2f20755a64d7fdc48f9e7178ee6b0e1f7fce33fa60f1d68a276e6"
dependencies = [
"bytecheck",
]
[[package]]
name = "rkyv"
version = "0.8.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1a30e631b7f4a03dee9056b8ef6982e8ba371dd5bedb74d3ec86df4499132c70"
dependencies = [
"bytecheck",
"bytes",
"hashbrown",
"indexmap",
"munge",
"ptr_meta",
"rancor",
"rend",
"rkyv_derive",
"tinyvec",
"uuid",
]
[[package]]
name = "rkyv_derive"
version = "0.8.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8100bb34c0a1d0f907143db3149e6b4eea3c33b9ee8b189720168e818303986f"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.114",
]
[[package]] [[package]]
name = "rustversion" name = "rustversion"
version = "1.0.22" version = "1.0.22"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
[[package]]
name = "sc"
version = "0.2.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "010e18bd3bfd1d45a7e666b236c78720df0d9a7698ebaa9c1c559961eb60a38b"
[[package]] [[package]]
name = "scopeguard" name = "scopeguard"
version = "1.2.0" version = "1.2.0"
@@ -485,7 +630,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
dependencies = [ dependencies = [
"serde_core", "serde_core",
"serde_derive",
] ]
[[package]] [[package]]
@@ -538,6 +682,12 @@ version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
[[package]]
name = "simdutf8"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e"
[[package]] [[package]]
name = "smallvec" name = "smallvec"
version = "1.15.1" version = "1.15.1"
@@ -594,6 +744,21 @@ dependencies = [
"unicode-ident", "unicode-ident",
] ]
[[package]]
name = "tinyvec"
version = "1.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3"
dependencies = [
"tinyvec_macros",
]
[[package]]
name = "tinyvec_macros"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
[[package]] [[package]]
name = "typenum" name = "typenum"
version = "1.19.0" version = "1.19.0"
@@ -606,15 +771,24 @@ version = "1.0.22"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5"
[[package]]
name = "unix-print"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c50e1866b3de196f1329f6a805771eee750651c83bbebd5dff159e5f033cc16f"
dependencies = [
"sc",
]
[[package]] [[package]]
name = "unshell" name = "unshell"
version = "0.0.0" version = "0.0.0"
dependencies = [ dependencies = [
"chrono", "chrono",
"crossbeam-channel", "crossbeam-channel",
"serde", "rkyv",
"serde_json",
"static_init", "static_init",
"unix-print",
"ush-obfuscate", "ush-obfuscate",
] ]
@@ -642,6 +816,16 @@ dependencies = [
"unshell", "unshell",
] ]
[[package]]
name = "uuid"
version = "1.22.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a68d3c8f01c0cfa54a75291d83601161799e4a89a39e0929f4b0354d88757a37"
dependencies = [
"js-sys",
"wasm-bindgen",
]
[[package]] [[package]]
name = "version_check" name = "version_check"
version = "0.9.5" version = "0.9.5"
+7 -2
View File
@@ -36,13 +36,18 @@ obfuscate_ref = ["ush-obfuscate/obfuscate_ref"]
[dependencies] [dependencies]
chrono = { workspace = true, optional = true } chrono = { workspace = true, optional = true }
serde = { workspace = true } # serde = { workspace = true }
serde_json = { workspace = true } # serde_json = { workspace = true }
crossbeam-channel = "0.5.15" crossbeam-channel = "0.5.15"
ush-obfuscate = { path = "./ush-obfuscate" } ush-obfuscate = { path = "./ush-obfuscate" }
static_init.workspace = true static_init.workspace = true
rkyv = "0.8.15"
unix-print = {version = "0.1.0" }
# unshell-crypt = {path = "./unshell-crypt"} # unshell-crypt = {path = "./unshell-crypt"}
[workspace.dependencies] [workspace.dependencies]
+4 -1
View File
@@ -1,8 +1,11 @@
#![no_main] #![no_main]
#![no_std]
extern crate alloc;
pub mod logger; pub mod logger;
pub mod tree; pub mod tree;
// Re-exports // Re-exports
pub use serde_json::{Value, json}; // pub use serde_json::{Value, json};
pub use ush_obfuscate as obfuscate; pub use ush_obfuscate as obfuscate;
+6 -6
View File
@@ -7,15 +7,15 @@ mod log_disabled;
mod pretty_logger; mod pretty_logger;
use std::time::SystemTime; use alloc::boxed::Box;
use alloc::string::String;
pub use pretty_logger::PrettyLogger; pub use pretty_logger::PrettyLogger;
pub use pretty_logger::log; pub use pretty_logger::log;
pub static mut IS_DEFAULT_LOGGER: bool = true; pub static mut IS_DEFAULT_LOGGER: bool = true;
static mut LOGGER: &dyn Logger = &DefaultLogger; static mut LOGGER: &dyn Logger = &DefaultLogger;
#[derive(Debug, serde::Serialize, serde::Deserialize)] #[derive(Debug)]
pub enum LogLevel { pub enum LogLevel {
Debug, Debug,
Info, Info,
@@ -23,12 +23,12 @@ pub enum LogLevel {
Error, Error,
} }
#[derive(Debug, serde::Serialize, serde::Deserialize)] #[derive(Debug)]
pub struct Record { pub struct Record {
log_level: LogLevel, log_level: LogLevel,
location: Option<String>, location: Option<String>,
// line: u32, // line: u32,
time: Option<SystemTime>, time: Option<u64>,
message: String, message: String,
} }
@@ -61,7 +61,7 @@ pub fn set_logger(logger: &'static dyn Logger) {
pub fn add_record( pub fn add_record(
log_level: LogLevel, log_level: LogLevel,
location: Option<String>, location: Option<String>,
time: Option<SystemTime>, time: Option<u64>,
message: String, message: String,
) { ) {
logger().log(Record { logger().log(Record {
+8 -3
View File
@@ -1,3 +1,5 @@
use alloc::{boxed::Box, format};
use crate::logger::{LogLevel, Logger, Record}; use crate::logger::{LogLevel, Logger, Record};
pub struct PrettyLogger { pub struct PrettyLogger {
@@ -31,7 +33,7 @@ pub fn log(message: &Record) {
(None, None) => { (None, None) => {
static WHITE: &str = "\x1b[97m"; static WHITE: &str = "\x1b[97m";
println!("{} {WHITE}{}", log_level, message.message,); unix_print::unix_println!("{} {WHITE}{}", log_level, message.message);
} }
#[cfg(feature = "log_debug")] #[cfg(feature = "log_debug")]
@@ -45,9 +47,12 @@ pub fn log(message: &Record) {
static TIME_COLOR: &str = "\x1b[36m"; static TIME_COLOR: &str = "\x1b[36m";
static GREY: &str = "\x1b[90m"; static GREY: &str = "\x1b[90m";
println!( unix_print::unix_println!(
"{OFF_WHITE}[{TIME_COLOR}{}{OFF_WHITE}] {} {WHITE}{} {GREY}{}{WHITE}", "{OFF_WHITE}[{TIME_COLOR}{}{OFF_WHITE}] {} {WHITE}{} {GREY}{}{WHITE}",
date, log_level, message.message, location date,
log_level,
message.message,
location
); );
} }
+41
View File
@@ -0,0 +1,41 @@
// use std::collections::VecDeque;
use alloc::{collections::vec_deque::VecDeque, string::String, vec::Vec};
use rkyv::{Archive, Deserialize, Serialize};
#[derive(Archive, Deserialize, Serialize)]
#[rkyv(compare(PartialEq), derive(Debug))]
pub struct TreeRequest {
// The exact path that this packet should be heading down to
destination_path: VecDeque<String>,
// The list of previous paths that this packet came from
// This is the destination path added in reverse order
source_path: VecDeque<String>,
request_type: TreeRequestType,
// The data type of the payload, to determine how to deserialize and interpret it on the other side
// This is equivalent to HTTP's content-type header
content_type: String,
// The payload of the packet
data: Vec<u8>,
}
#[derive(Archive, Deserialize, Serialize)]
#[rkyv(compare(PartialEq), derive(Debug))]
pub enum TreeRequestType {
Return = 0,
Read = 1,
Write = 2,
Submit = 3,
ListBranches = 10,
// CreateField = 3,
// DeleteField = 4,
UnnamedError = 100,
NoBranchError = 101,
ProtocolError = 102,
ExecutionError = 103,
}
+2 -78
View File
@@ -1,81 +1,5 @@
use std::collections::HashMap; mod message;
use serde_json::{Value, json};
mod log;
pub mod symbols; pub mod symbols;
pub trait TreeElement { pub struct Tree {}
// fn get_children(&self) -> HashMap<TreeType, TreeType>;
fn get_type(&self) -> Value;
fn send_message(&mut self, target: Value, message: Value) -> Value;
}
pub struct Tree {
elements: HashMap<String, Box<dyn TreeElement>>,
}
impl Tree {
pub fn new() -> Self {
Self {
elements: HashMap::new(),
}
}
pub fn add_element(&mut self, name: String, element: Box<dyn TreeElement>) {
self.elements.insert(name, element);
}
}
impl TreeElement for Tree {
fn get_type(&self) -> Value {
json!(symbols::TYPE_TREE)
}
// fn send_message_child(&mut self, element: Value, message: TreeMessage) -> TreeMessage {
// let name = if let TreeType::String(name) = element {
// name
// } else {
// return TreeMessage::Error(ModuleError::InvalidType);
// };
// if let Some(element) = self.elements.get_mut(&name) {
// element.send_message(message)
// } else {
// TreeMessage::Error(ModuleError::TreeNotExist)
// }
// }
fn send_message(&mut self, target: Value, message: Value) -> Value {
match target {
Value::Null => {
if let Some(message) = message.as_str() {
match message {
"GetChildren" => {
let children = self
.elements
.iter()
.map(|c| (Value::String(c.0.clone()), c.1.get_type()))
.into_iter()
.collect::<HashMap<Value, Value>>();
json!(children)
}
_ => Value::String("UnsupportedMethod".to_owned()),
}
} else {
Value::String("UnsupportedMethod".to_owned())
}
}
Value::String(target) => {
if let Some(child) = self.elements.get_mut(&target) {
child.send_message(Value::Null, message)
} else {
Value::String("UnsupportedMethod".to_owned())
}
}
_ => Value::String("UnsupportedMethod".to_owned()),
}
}
}
+6 -6
View File
@@ -1,18 +1,18 @@
#![macro_use] #![macro_use]
extern crate unshell; extern crate unshell;
use unshell::{info, obfuscate::sym, tree::Tree}; use unshell::{info, logger::PrettyLogger};
fn main() { fn main() {
// PrettyLogger::init(); PrettyLogger::init();
let mut manager = Tree::new(); // let mut manager = Tree::new();
manager.init_logger(); // manager.init_logger();
println!("{}", sym!("TEST")); // println!("{}", sym!("TEST"));
info!("Test thing!"); info!("Test thing!");
info!("Test thing!"); // info!("Test thing!");
// loop { // loop {
// if test123(&mut manager) { // if test123(&mut manager) {