From 02db853f8c4e29faa94e4135e4830ae192260172 Mon Sep 17 00:00:00 2001 From: bel Date: Wed, 22 Mar 2023 23:46:16 -0600 Subject: [PATCH] gr --- Cargo.lock | 28 +++++++++++------------ src/.engine.rs.swp | Bin 0 -> 24576 bytes src/.gui.rs.swp | Bin 20480 -> 0 bytes src/engine.rs | 54 ++++++++++++++++++++++++++------------------- src/gui.rs | 8 ++++--- src/main.rs | 16 +++++--------- 6 files changed, 56 insertions(+), 50 deletions(-) create mode 100644 src/.engine.rs.swp delete mode 100644 src/.gui.rs.swp 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 0000000000000000000000000000000000000000..ec956c91a49c855ee723b14b93898aab6ebe0065 GIT binary patch literal 24576 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 OIk6EQ@)BOL8Rfs*-Zatx 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()); }