diff --git a/Cargo.lock b/Cargo.lock index 6acfe1c..163ba9c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1757,9 +1757,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.52" +version = "1.0.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d0e1ae9e836cc3beddd63db0df682593d7e2d3d891ae8c9083d2113e1744224" +checksum = "ba466839c78239c09faf015484e5cc04860f88242cff4d03eb038f04b4699b73" dependencies = [ "unicode-ident", ] @@ -1984,22 +1984,22 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.156" +version = "1.0.158" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "314b5b092c0ade17c00142951e50ced110ec27cea304b1037c6969246c2469a4" +checksum = "771d4d9c4163ee138805e12c710dd365e4f44be8be0503cb1bb9eb989425d9c9" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.156" +version = "1.0.158" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7e29c4601e36bcec74a223228dce795f4cd3616341a4af93520ca1a837c087d" +checksum = "e801c1712f48475582b7696ac71e0ca34ebb30e09338425384269d9717c62cad" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.8", ] [[package]] @@ -2153,9 +2153,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.6" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ece519cfaf36269ea69d16c363fa1d59ceba8296bbfbfc003c3176d01f2816ee" +checksum = "bcc02725fd69ab9f26eab07fad303e2497fad6fb9eba4f96c4d1687bdf704ad9" dependencies = [ "proc-macro2", "quote", @@ -2200,7 +2200,7 @@ checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.6", + "syn 2.0.8", ] [[package]] @@ -2256,9 +2256,9 @@ checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622" [[package]] name = "toml_edit" -version = "0.19.7" +version = "0.19.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc18466501acd8ac6a3f615dd29a3438f8ca6bb3b19537138b3106e575621274" +checksum = "239410c8609e8125456927e6707163a3b1fdb40561e4b803bc041f466ccfdc13" dependencies = [ "indexmap", "toml_datetime", @@ -2825,9 +2825,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.3.6" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d020b441f92996c80d94ae9166e8501e59c7bb56121189dc9eab3bd8216966" +checksum = "deac0939bd6e4f24ab5919fbf751c97a8cfc8543bb083a305ed5c0c10bb241d1" dependencies = [ "memchr", ] diff --git a/src/.engine.rs.swp b/src/.engine.rs.swp new file mode 100644 index 0000000..ec956c9 Binary files /dev/null and b/src/.engine.rs.swp differ diff --git a/src/.gui.rs.swp b/src/.gui.rs.swp deleted file mode 100644 index 0526f43..0000000 Binary files a/src/.gui.rs.swp and /dev/null differ diff --git a/src/engine.rs b/src/engine.rs index 84b3459..ab92677 100644 --- a/src/engine.rs +++ b/src/engine.rs @@ -8,24 +8,30 @@ pub trait InputEngine { fn get(&mut self) -> Vec; } -pub fn build_input_engine(cfg: &Engine) -> Result, String> { +pub fn build_input_engine(cfg: &Engine) -> impl InputEngine { match cfg.name.as_str() { - "stdin" => return Ok(Box::new(InputEngineStdin{})), - "kafka" => return build_input_engine_kafka(&cfg), - "udp" => return build_input_engine_udp(&cfg), - "device" => return build_input_engine_device(&cfg), - _ => return Err("unknown input engine name".to_string() + &cfg.name), - } + "stdin" => { + return InputEngineStdin{}; + }, + "kafka" => { + return build_input_engine_kafka(&cfg).unwrap(); + }, + "udp" => return build_input_engine_udp(&cfg).unwrap(), + "device" => return build_input_engine_device(&cfg).unwrap(), + _ => {}, + }; + assert!(false); + InputEngineStdin{} } struct InputEngineDevice { } -pub fn build_input_engine_device(cfg: &Engine) -> Result, String> { +pub fn build_input_engine_device(cfg: &Engine) -> Result { return build_input_engine_device_gilrs(cfg) } -pub fn build_input_engine_device_gilrs(cfg: &Engine) -> Result, String> { +pub fn build_input_engine_device_gilrs(cfg: &Engine) -> Result { let _device_cfg = cfg.device.as_ref().unwrap(); let mut gilrs = Gilrs::new().unwrap(); @@ -59,7 +65,7 @@ pub fn build_input_engine_device_gilrs(cfg: &Engine) -> Result Result, String> { +pub fn build_input_engine_device_hidapi(cfg: &Engine) -> Result { let _device_cfg = cfg.device.as_ref().unwrap(); match HidApi::new() { @@ -75,7 +81,7 @@ pub fn build_input_engine_device_hidapi(cfg: &Engine) -> Result Result, String> { +pub fn build_input_engine_device_rusb(cfg: &Engine) -> Result { let _device_cfg = cfg.device.as_ref().unwrap(); assert!(rusb::has_capability()); @@ -105,12 +111,12 @@ struct InputEngineUDP { port: i32, } -pub fn build_input_engine_udp(cfg: &Engine) -> Result, String> { +pub fn build_input_engine_udp(cfg: &Engine) -> Result { let udp_cfg = cfg.udp.as_ref().unwrap(); - return Ok(Box::new(InputEngineUDP{ + return Ok(InputEngineUDP{ last_socket: None, port: udp_cfg.port, - })); + }); } impl InputEngine for InputEngineUDP { @@ -137,7 +143,7 @@ impl InputEngine for InputEngineUDP { struct InputEngineKafka { } -pub fn build_input_engine_kafka(cfg: &Engine) -> Result, String> { +pub fn build_input_engine_kafka(cfg: &Engine) -> Result { let _kafka_cfg = cfg.kafka.as_ref().unwrap(); return Err("do what".to_string()); } @@ -185,12 +191,14 @@ pub trait OutputEngine { fn put(&mut self, v: Vec); } -pub fn build_output_engine(cfg: &Engine) -> Result, String> { - match cfg.name.as_str() { - "stdout" => return Ok(Box::new(OutputEngineStdout{})), - "udp" => return build_output_engine_udp(&cfg), - _ => return Err("unknown output engine name".to_string() + &cfg.name), +pub fn build_output_engine(cfg: &Engine) -> impl OutputEngine { + if cfg.name.as_str() == "stdout" { + return OutputEngineStdout{}; + } else if cfg.name.as_str() == "udp" { + return build_output_engine_udp(&cfg).unwrap(); } + assert!(false); + OutputEngineStdout{} } struct OutputEngineStdout {} @@ -228,13 +236,13 @@ struct OutputEngineUDP { port: i32, } -pub fn build_output_engine_udp(cfg: &Engine) -> Result, String> { +pub fn build_output_engine_udp(cfg: &Engine) -> Result { let udp_cfg = cfg.udp.as_ref().unwrap(); - return Ok(Box::new(OutputEngineUDP{ + return Ok(OutputEngineUDP{ last_socket: None, host: udp_cfg.host.clone().unwrap(), port: udp_cfg.port, - })); + }); } impl OutputEngine for OutputEngineUDP { diff --git a/src/gui.rs b/src/gui.rs index 177caf0..2c4241a 100644 --- a/src/gui.rs +++ b/src/gui.rs @@ -5,10 +5,12 @@ use iced::event; use iced::subscription; use iced::{Alignment, Element, Application, Settings, Subscription, Theme, Command}; -pub fn main(outputEngine: dyn FnMut(Vec)) -> iced::Result { +use crate::engine::OutputEngine; + +pub fn main(outputEngine: &impl OutputEngine) -> iced::Result { let settings = Settings{ flags: Flags { - outputEngine: outputEngine, + //outputEngine: outputEngine, }, ..Settings::::default() }; @@ -24,7 +26,7 @@ struct Main { #[derive(Default)] struct Flags { - outputEngine: dyn FnMut(Vec), + //outputEngine: impl OutputEngine, } struct Inputs { diff --git a/src/main.rs b/src/main.rs index 820ff31..2d25dc0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,25 +2,21 @@ mod config; mod engine; mod gui; +use crate::engine::{InputEngine, OutputEngine}; + fn main() { let cfg = config::build_config().unwrap(); if cfg.streams.input.engine.name == "gui" { - let output_engine = engine::build_output_engine(&cfg.streams.output.engine); - let mut output_engine = output_engine.unwrap(); - let cb = |v: Vec| output_engine.put(v); - gui::main(cb).unwrap(); + let mut output_engine = engine::build_output_engine(&cfg.streams.output.engine); + gui::main(&output_engine).unwrap(); } else { main_cli(cfg); } } fn main_cli(cfg: config::Config) { - let input_engine = engine::build_input_engine(&cfg.streams.input.engine); - let output_engine = engine::build_output_engine(&cfg.streams.output.engine); - println!("{:?} => {}", cfg.streams.input.engine.name, input_engine.is_ok()); - println!("{:?} => {}", cfg.streams.output.engine.name, output_engine.is_ok()); - let mut input_engine = input_engine.unwrap(); - let mut output_engine = output_engine.unwrap(); + let mut input_engine = engine::build_input_engine(&cfg.streams.input.engine); + let mut output_engine = engine::build_output_engine(&cfg.streams.output.engine); loop { output_engine.put(input_engine.get()); }