if not CONFIG_PATH then more env

master
Bel LaPointe 2023-03-23 15:15:50 -06:00
parent 96ce4d1855
commit 6ce7cd0b46
3 changed files with 32 additions and 15 deletions

View File

@ -68,21 +68,33 @@ fn build_config_std() -> Config {
return Config { return Config {
streams: Streams{ streams: Streams{
input: Stream { input: Stream {
format: None, format: match env::var("INPUT_FORMAT") {
Ok(x) => Some(x),
Err(_) => None,
},
engine: Engine{ engine: Engine{
name: String::from("gui"), name: String::from("gui"),
kafka: None, kafka: None,
device: None, device: None,
udp: None, udp: Some(UDP{
host: Some(env::var("INPUT_UDP_HOST").unwrap_or(String::from("localhost"))),
port: env::var("INPUT_UDP_PORT").unwrap_or(String::from("17070")).parse().unwrap(),
}),
}, },
}, },
output: Stream { output: Stream {
format: Some(String::from("%s")), format: match env::var("OUTPUT_FORMAT") {
Ok(x) => Some(x),
Err(_) => None,
},
engine: Engine{ engine: Engine{
name: String::from("stdout"), name: env::var("OUTPUT_NAME").unwrap_or(String::from("stdout")),
kafka: None, kafka: None,
device: None, device: None,
udp: None, udp: Some(UDP{
host: Some(env::var("OUTPUT_UDP_HOST").unwrap_or(String::from("localhost"))),
port: env::var("OUTPUT_UDP_PORT").unwrap_or(String::from("17070")).parse().unwrap(),
}),
}, },
}, },
}, },

View File

@ -7,11 +7,11 @@ use iced::{Alignment, Element, Application, Settings, Subscription, Theme, Comma
use crate::stream::OutputStream; use crate::stream::OutputStream;
pub fn main(outputStream: Box<dyn OutputStream>) -> iced::Result { pub fn main(output_stream: Box<dyn OutputStream>) -> iced::Result {
let def: iced::Settings<()> = Settings::default(); let def: iced::Settings<()> = Settings::default();
let settings = Settings{ let settings = Settings{
flags: Flags { flags: Flags {
outputStream: outputStream, output_stream: output_stream,
}, },
antialiasing: def.antialiasing, antialiasing: def.antialiasing,
default_font: def.default_font, default_font: def.default_font,
@ -33,7 +33,7 @@ struct Main {
} }
struct Flags { struct Flags {
outputStream: Box<dyn OutputStream>, output_stream: Box<dyn OutputStream>,
} }
struct Inputs { struct Inputs {
@ -153,7 +153,7 @@ impl Application for Main {
_ => String::from(""), _ => String::from(""),
}; };
if s.len() > 0 { if s.len() > 0 {
self.flags.outputStream.put(s.chars().collect()); self.flags.output_stream.put(s.chars().collect());
} }
}, },
_ => {}, _ => {},

View File

@ -4,6 +4,7 @@ use hidapi::HidApi;
use rusb::UsbContext; use rusb::UsbContext;
use gilrs::{Gilrs, Button, Event}; use gilrs::{Gilrs, Button, Event};
use serde_json::json; use serde_json::json;
use handlebars::Handlebars;
pub trait InputStream { pub trait InputStream {
fn get(&mut self) -> Vec<char>; fn get(&mut self) -> Vec<char>;
@ -197,18 +198,17 @@ pub fn build_output_stream(cfg: &Stream) -> Box<dyn OutputStream> {
} }
pub struct OutputStreamFormatted { pub struct OutputStreamFormatted {
format: Box<dyn Fn(Vec<char>) -> Vec<char>>, format: Option<String>,
stream: Box<dyn OutputStream>, stream: Box<dyn OutputStream>,
} }
pub fn build_formatted_output_stream(cfg: &Stream, stream: Box<dyn OutputStream>) -> Box<dyn OutputStream> { pub fn build_formatted_output_stream(cfg: &Stream, stream: Box<dyn OutputStream>) -> Box<dyn OutputStream> {
return Box::new(OutputStreamFormatted{ return Box::new(OutputStreamFormatted{
format: Box::new(|v: Vec<char>| reg.render("x", &json!()).unwrap()), format: cfg.format.clone(),
stream: stream, stream: stream,
}); });
} }
// TODO use https://crates.io/crates/handlebars instead
impl OutputStream for OutputStreamFormatted { impl OutputStream for OutputStreamFormatted {
fn put(&mut self, v: Vec<char>) { fn put(&mut self, v: Vec<char>) {
match self.format.as_ref() { match self.format.as_ref() {
@ -218,6 +218,13 @@ impl OutputStream for OutputStreamFormatted {
} }
} }
fn sprintf(x: &String, v: Vec<char>) -> Vec<char> {
let mut reg = Handlebars::new();
return reg.render_template(x, &json!({
"VALUE": v.iter().collect::<String>(),
})).unwrap().chars().collect();
}
pub fn _build_output_stream(cfg: &Stream) -> Box<dyn OutputStream> { pub fn _build_output_stream(cfg: &Stream) -> Box<dyn OutputStream> {
if cfg.engine.name.as_str() == "stdout" { if cfg.engine.name.as_str() == "stdout" {
return Box::new(OutputStreamStdout{}); return Box::new(OutputStreamStdout{});
@ -256,18 +263,16 @@ mod test_output {
engine.put("teehee".to_string().chars().collect()); engine.put("teehee".to_string().chars().collect());
} }
/*
#[test] #[test]
fn test_output_stream_formatted() { fn test_output_stream_formatted() {
assert_eq!( assert_eq!(
"hello world".to_string().chars().collect::<Vec<char>>(), "hello world".to_string().chars().collect::<Vec<char>>(),
sprintf( sprintf(
&String::from("hello %s"), &String::from("hello {{ VALUE }}"),
String::from("world").chars().collect(), String::from("world").chars().collect(),
), ),
); );
} }
*/
} }
pub struct OutputStreamUDP { pub struct OutputStreamUDP {