mirror of
https://github.com/Astatin3/unshell.git
synced 2026-06-08 22:38:01 -06:00
Fix bug in proc_impl_switcher.rs
This commit is contained in:
@@ -1,59 +0,0 @@
|
||||
/// Implement logging for the manager
|
||||
use crossbeam_channel::{Receiver, Sender};
|
||||
use serde_json::{Value, json};
|
||||
|
||||
use crate::{
|
||||
logger::{Logger, Record},
|
||||
tree::{Tree, TreeElement, symbols},
|
||||
};
|
||||
|
||||
struct LoggerTX(Sender<Record>);
|
||||
struct LoggerRX(Receiver<Record>);
|
||||
|
||||
impl Tree {
|
||||
/// Initiate the unshell logger for the local binary, piped through the manager
|
||||
/// This will allow access to the logs through the tree
|
||||
pub fn init_logger(&mut self) {
|
||||
// Create the logger through the TX element of the manager
|
||||
|
||||
let (tx, rx) = crossbeam_channel::unbounded();
|
||||
let (tx, rx) = (LoggerTX(tx), LoggerRX(rx));
|
||||
|
||||
// Set the logger through unshell
|
||||
crate::logger::set_logger_box(Box::new(tx));
|
||||
// Add the logger to the tree
|
||||
self.add_element(symbols::LOGGER.to_string(), Box::new(rx));
|
||||
}
|
||||
}
|
||||
|
||||
impl Logger for LoggerTX {
|
||||
fn log(&self, log: crate::logger::Record) {
|
||||
// This will never panic if the program is operating properly
|
||||
self.0.send(log).unwrap();
|
||||
}
|
||||
}
|
||||
|
||||
impl TreeElement for LoggerRX {
|
||||
fn get_type(&self) -> Value {
|
||||
json!(symbols::TYPE_QUEUE)
|
||||
}
|
||||
|
||||
fn send_message(&mut self, target: Value, message: Value) -> Value {
|
||||
match (target, message) {
|
||||
(Value::Null, Value::String(message)) => match message.as_ref() {
|
||||
symbols::CMD_GET => {
|
||||
if !self.0.is_empty() {
|
||||
json!(self.0.recv().unwrap())
|
||||
} else {
|
||||
json!(Value::Null)
|
||||
}
|
||||
}
|
||||
symbols::CMD_GET_LENGTH => {
|
||||
json!(self.0.len())
|
||||
}
|
||||
_ => json!(symbols::ERR_INVALID_COMMAND),
|
||||
},
|
||||
_ => json!(symbols::ERR_INVALID_CHILD),
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user