baby steps

master
bel 2023-03-22 23:56:24 -06:00
parent 02db853f8c
commit 5d65aa5b42
6 changed files with 19 additions and 14 deletions

7
.gitignore vendored
View File

@ -1 +1,8 @@
/target /target
# Added by cargo
#
# already existing elements were commented out
#/target

Binary file not shown.

BIN
src/.main.rs.swp Normal file

Binary file not shown.

View File

@ -8,20 +8,20 @@ pub trait InputEngine {
fn get(&mut self) -> Vec<char>; fn get(&mut self) -> Vec<char>;
} }
pub fn build_input_engine(cfg: &Engine) -> impl InputEngine { pub fn build_input_engine(cfg: &Engine) -> Box<dyn InputEngine> {
match cfg.name.as_str() { match cfg.name.as_str() {
"stdin" => { "stdin" => {
return InputEngineStdin{}; return Box::new(InputEngineStdin{});
}, },
"kafka" => { "kafka" => {
return build_input_engine_kafka(&cfg).unwrap(); return Box::new(build_input_engine_kafka(&cfg).unwrap());
}, },
"udp" => return build_input_engine_udp(&cfg).unwrap(), "udp" => return Box::new(build_input_engine_udp(&cfg).unwrap()),
"device" => return build_input_engine_device(&cfg).unwrap(), "device" => return Box::new(build_input_engine_device(&cfg).unwrap()),
_ => {}, _ => {},
}; };
assert!(false); assert!(false);
InputEngineStdin{} Box::new(InputEngineStdin{})
} }
struct InputEngineDevice { struct InputEngineDevice {
@ -191,14 +191,14 @@ pub trait OutputEngine {
fn put(&mut self, v: Vec<char>); fn put(&mut self, v: Vec<char>);
} }
pub fn build_output_engine(cfg: &Engine) -> impl OutputEngine { pub fn build_output_engine(cfg: &Engine) -> Box<dyn OutputEngine> {
if cfg.name.as_str() == "stdout" { if cfg.name.as_str() == "stdout" {
return OutputEngineStdout{}; return Box::new(OutputEngineStdout{});
} else if cfg.name.as_str() == "udp" { } else if cfg.name.as_str() == "udp" {
return build_output_engine_udp(&cfg).unwrap(); return Box::new(build_output_engine_udp(&cfg).unwrap());
} }
assert!(false); assert!(false);
OutputEngineStdout{} Box::new(OutputEngineStdout{})
} }
struct OutputEngineStdout {} struct OutputEngineStdout {}

View File

@ -7,7 +7,7 @@ use iced::{Alignment, Element, Application, Settings, Subscription, Theme, Comma
use crate::engine::OutputEngine; use crate::engine::OutputEngine;
pub fn main(outputEngine: &impl OutputEngine) -> iced::Result { pub fn main(outputEngine: &(impl OutputEngine + ?Sized)) -> iced::Result {
let settings = Settings{ let settings = Settings{
flags: Flags { flags: Flags {
//outputEngine: outputEngine, //outputEngine: outputEngine,

View File

@ -2,13 +2,11 @@ mod config;
mod engine; mod engine;
mod gui; mod gui;
use crate::engine::{InputEngine, OutputEngine};
fn main() { fn main() {
let cfg = config::build_config().unwrap(); let cfg = config::build_config().unwrap();
if cfg.streams.input.engine.name == "gui" { if cfg.streams.input.engine.name == "gui" {
let mut output_engine = engine::build_output_engine(&cfg.streams.output.engine); let mut output_engine = engine::build_output_engine(&cfg.streams.output.engine);
gui::main(&output_engine).unwrap(); gui::main(&*output_engine).unwrap();
} else { } else {
main_cli(cfg); main_cli(cfg);
} }