master
parent
df0e16797c
commit
02db853f8c
|
|
@ -1757,9 +1757,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "proc-macro2"
|
name = "proc-macro2"
|
||||||
version = "1.0.52"
|
version = "1.0.53"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1d0e1ae9e836cc3beddd63db0df682593d7e2d3d891ae8c9083d2113e1744224"
|
checksum = "ba466839c78239c09faf015484e5cc04860f88242cff4d03eb038f04b4699b73"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"unicode-ident",
|
"unicode-ident",
|
||||||
]
|
]
|
||||||
|
|
@ -1984,22 +1984,22 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde"
|
name = "serde"
|
||||||
version = "1.0.156"
|
version = "1.0.158"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "314b5b092c0ade17c00142951e50ced110ec27cea304b1037c6969246c2469a4"
|
checksum = "771d4d9c4163ee138805e12c710dd365e4f44be8be0503cb1bb9eb989425d9c9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde_derive",
|
"serde_derive",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_derive"
|
name = "serde_derive"
|
||||||
version = "1.0.156"
|
version = "1.0.158"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d7e29c4601e36bcec74a223228dce795f4cd3616341a4af93520ca1a837c087d"
|
checksum = "e801c1712f48475582b7696ac71e0ca34ebb30e09338425384269d9717c62cad"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 1.0.109",
|
"syn 2.0.8",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|
@ -2153,9 +2153,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "syn"
|
name = "syn"
|
||||||
version = "2.0.6"
|
version = "2.0.8"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ece519cfaf36269ea69d16c363fa1d59ceba8296bbfbfc003c3176d01f2816ee"
|
checksum = "bcc02725fd69ab9f26eab07fad303e2497fad6fb9eba4f96c4d1687bdf704ad9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
|
@ -2200,7 +2200,7 @@ checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 2.0.6",
|
"syn 2.0.8",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|
@ -2256,9 +2256,9 @@ checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "toml_edit"
|
name = "toml_edit"
|
||||||
version = "0.19.7"
|
version = "0.19.8"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "dc18466501acd8ac6a3f615dd29a3438f8ca6bb3b19537138b3106e575621274"
|
checksum = "239410c8609e8125456927e6707163a3b1fdb40561e4b803bc041f466ccfdc13"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"indexmap",
|
"indexmap",
|
||||||
"toml_datetime",
|
"toml_datetime",
|
||||||
|
|
@ -2825,9 +2825,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "winnow"
|
name = "winnow"
|
||||||
version = "0.3.6"
|
version = "0.4.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "23d020b441f92996c80d94ae9166e8501e59c7bb56121189dc9eab3bd8216966"
|
checksum = "deac0939bd6e4f24ab5919fbf751c97a8cfc8543bb083a305ed5c0c10bb241d1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"memchr",
|
"memchr",
|
||||||
]
|
]
|
||||||
|
|
|
||||||
Binary file not shown.
BIN
src/.gui.rs.swp
BIN
src/.gui.rs.swp
Binary file not shown.
|
|
@ -8,24 +8,30 @@ pub trait InputEngine {
|
||||||
fn get(&mut self) -> Vec<char>;
|
fn get(&mut self) -> Vec<char>;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn build_input_engine(cfg: &Engine) -> Result<Box<dyn InputEngine>, String> {
|
pub fn build_input_engine(cfg: &Engine) -> impl InputEngine {
|
||||||
match cfg.name.as_str() {
|
match cfg.name.as_str() {
|
||||||
"stdin" => return Ok(Box::new(InputEngineStdin{})),
|
"stdin" => {
|
||||||
"kafka" => return build_input_engine_kafka(&cfg),
|
return InputEngineStdin{};
|
||||||
"udp" => return build_input_engine_udp(&cfg),
|
},
|
||||||
"device" => return build_input_engine_device(&cfg),
|
"kafka" => {
|
||||||
_ => return Err("unknown input engine name".to_string() + &cfg.name),
|
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 {
|
struct InputEngineDevice {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn build_input_engine_device(cfg: &Engine) -> Result<Box<dyn InputEngine>, String> {
|
pub fn build_input_engine_device(cfg: &Engine) -> Result<InputEngineDevice, String> {
|
||||||
return build_input_engine_device_gilrs(cfg)
|
return build_input_engine_device_gilrs(cfg)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn build_input_engine_device_gilrs(cfg: &Engine) -> Result<Box<dyn InputEngine>, String> {
|
pub fn build_input_engine_device_gilrs(cfg: &Engine) -> Result<InputEngineDevice, String> {
|
||||||
let _device_cfg = cfg.device.as_ref().unwrap();
|
let _device_cfg = cfg.device.as_ref().unwrap();
|
||||||
|
|
||||||
let mut gilrs = Gilrs::new().unwrap();
|
let mut gilrs = Gilrs::new().unwrap();
|
||||||
|
|
@ -59,7 +65,7 @@ pub fn build_input_engine_device_gilrs(cfg: &Engine) -> Result<Box<dyn InputEngi
|
||||||
return Err("do what".to_string());
|
return Err("do what".to_string());
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn build_input_engine_device_hidapi(cfg: &Engine) -> Result<Box<dyn InputEngine>, String> {
|
pub fn build_input_engine_device_hidapi(cfg: &Engine) -> Result<InputEngineDevice, String> {
|
||||||
let _device_cfg = cfg.device.as_ref().unwrap();
|
let _device_cfg = cfg.device.as_ref().unwrap();
|
||||||
|
|
||||||
match HidApi::new() {
|
match HidApi::new() {
|
||||||
|
|
@ -75,7 +81,7 @@ pub fn build_input_engine_device_hidapi(cfg: &Engine) -> Result<Box<dyn InputEng
|
||||||
return Err("do what".to_string());
|
return Err("do what".to_string());
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn build_input_engine_device_rusb(cfg: &Engine) -> Result<Box<dyn InputEngine>, String> {
|
pub fn build_input_engine_device_rusb(cfg: &Engine) -> Result<InputEngineDevice, String> {
|
||||||
let _device_cfg = cfg.device.as_ref().unwrap();
|
let _device_cfg = cfg.device.as_ref().unwrap();
|
||||||
|
|
||||||
assert!(rusb::has_capability());
|
assert!(rusb::has_capability());
|
||||||
|
|
@ -105,12 +111,12 @@ struct InputEngineUDP {
|
||||||
port: i32,
|
port: i32,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn build_input_engine_udp(cfg: &Engine) -> Result<Box<dyn InputEngine>, String> {
|
pub fn build_input_engine_udp(cfg: &Engine) -> Result<InputEngineUDP, String> {
|
||||||
let udp_cfg = cfg.udp.as_ref().unwrap();
|
let udp_cfg = cfg.udp.as_ref().unwrap();
|
||||||
return Ok(Box::new(InputEngineUDP{
|
return Ok(InputEngineUDP{
|
||||||
last_socket: None,
|
last_socket: None,
|
||||||
port: udp_cfg.port,
|
port: udp_cfg.port,
|
||||||
}));
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
impl InputEngine for InputEngineUDP {
|
impl InputEngine for InputEngineUDP {
|
||||||
|
|
@ -137,7 +143,7 @@ impl InputEngine for InputEngineUDP {
|
||||||
struct InputEngineKafka {
|
struct InputEngineKafka {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn build_input_engine_kafka(cfg: &Engine) -> Result<Box<dyn InputEngine>, String> {
|
pub fn build_input_engine_kafka(cfg: &Engine) -> Result<InputEngineKafka, String> {
|
||||||
let _kafka_cfg = cfg.kafka.as_ref().unwrap();
|
let _kafka_cfg = cfg.kafka.as_ref().unwrap();
|
||||||
return Err("do what".to_string());
|
return Err("do what".to_string());
|
||||||
}
|
}
|
||||||
|
|
@ -185,12 +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) -> Result<Box<dyn OutputEngine>, String> {
|
pub fn build_output_engine(cfg: &Engine) -> impl OutputEngine {
|
||||||
match cfg.name.as_str() {
|
if cfg.name.as_str() == "stdout" {
|
||||||
"stdout" => return Ok(Box::new(OutputEngineStdout{})),
|
return OutputEngineStdout{};
|
||||||
"udp" => return build_output_engine_udp(&cfg),
|
} else if cfg.name.as_str() == "udp" {
|
||||||
_ => return Err("unknown output engine name".to_string() + &cfg.name),
|
return build_output_engine_udp(&cfg).unwrap();
|
||||||
}
|
}
|
||||||
|
assert!(false);
|
||||||
|
OutputEngineStdout{}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct OutputEngineStdout {}
|
struct OutputEngineStdout {}
|
||||||
|
|
@ -228,13 +236,13 @@ struct OutputEngineUDP {
|
||||||
port: i32,
|
port: i32,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn build_output_engine_udp(cfg: &Engine) -> Result<Box<dyn OutputEngine>, String> {
|
pub fn build_output_engine_udp(cfg: &Engine) -> Result<OutputEngineUDP, String> {
|
||||||
let udp_cfg = cfg.udp.as_ref().unwrap();
|
let udp_cfg = cfg.udp.as_ref().unwrap();
|
||||||
return Ok(Box::new(OutputEngineUDP{
|
return Ok(OutputEngineUDP{
|
||||||
last_socket: None,
|
last_socket: None,
|
||||||
host: udp_cfg.host.clone().unwrap(),
|
host: udp_cfg.host.clone().unwrap(),
|
||||||
port: udp_cfg.port,
|
port: udp_cfg.port,
|
||||||
}));
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
impl OutputEngine for OutputEngineUDP {
|
impl OutputEngine for OutputEngineUDP {
|
||||||
|
|
|
||||||
|
|
@ -5,10 +5,12 @@ use iced::event;
|
||||||
use iced::subscription;
|
use iced::subscription;
|
||||||
use iced::{Alignment, Element, Application, Settings, Subscription, Theme, Command};
|
use iced::{Alignment, Element, Application, Settings, Subscription, Theme, Command};
|
||||||
|
|
||||||
pub fn main(outputEngine: dyn FnMut(Vec<char>)) -> iced::Result {
|
use crate::engine::OutputEngine;
|
||||||
|
|
||||||
|
pub fn main(outputEngine: &impl OutputEngine) -> iced::Result {
|
||||||
let settings = Settings{
|
let settings = Settings{
|
||||||
flags: Flags {
|
flags: Flags {
|
||||||
outputEngine: outputEngine,
|
//outputEngine: outputEngine,
|
||||||
},
|
},
|
||||||
..Settings::<Flags>::default()
|
..Settings::<Flags>::default()
|
||||||
};
|
};
|
||||||
|
|
@ -24,7 +26,7 @@ struct Main {
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
struct Flags {
|
struct Flags {
|
||||||
outputEngine: dyn FnMut(Vec<char>),
|
//outputEngine: impl OutputEngine,
|
||||||
}
|
}
|
||||||
|
|
||||||
struct Inputs {
|
struct Inputs {
|
||||||
|
|
|
||||||
16
src/main.rs
16
src/main.rs
|
|
@ -2,25 +2,21 @@ 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 output_engine = engine::build_output_engine(&cfg.streams.output.engine);
|
let mut output_engine = engine::build_output_engine(&cfg.streams.output.engine);
|
||||||
let mut output_engine = output_engine.unwrap();
|
gui::main(&output_engine).unwrap();
|
||||||
let cb = |v: Vec<char>| output_engine.put(v);
|
|
||||||
gui::main(cb).unwrap();
|
|
||||||
} else {
|
} else {
|
||||||
main_cli(cfg);
|
main_cli(cfg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main_cli(cfg: config::Config) {
|
fn main_cli(cfg: config::Config) {
|
||||||
let input_engine = engine::build_input_engine(&cfg.streams.input.engine);
|
let mut input_engine = engine::build_input_engine(&cfg.streams.input.engine);
|
||||||
let output_engine = engine::build_output_engine(&cfg.streams.output.engine);
|
let mut 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();
|
|
||||||
loop {
|
loop {
|
||||||
output_engine.put(input_engine.get());
|
output_engine.put(input_engine.get());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue