poo
parent
36380004b5
commit
96ce4d1855
|
|
@ -4,7 +4,6 @@ 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,34 +196,23 @@ pub fn build_output_stream(cfg: &Stream) -> Box<dyn OutputStream> {
|
||||||
return build_formatted_output_stream(cfg, _build_output_stream(cfg))
|
return build_formatted_output_stream(cfg, _build_output_stream(cfg))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct OutputStreamFormatted<'a> {
|
pub struct OutputStreamFormatted {
|
||||||
format: Option<Box<&'a dyn Fn(Vec<char>) -> Vec<char>>>,
|
format: Box<dyn Fn(Vec<char>) -> Vec<char>>,
|
||||||
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: match cfg.format.clone() {
|
format: Box::new(|v: Vec<char>| reg.render("x", &json!()).unwrap()),
|
||||||
Some(x) => {
|
|
||||||
let x = x.clone();
|
|
||||||
Some(Box::new(
|
|
||||||
&|v: Vec<char>| {
|
|
||||||
let mut reg = Handlebars::new();
|
|
||||||
reg.register_template_string("x", x.clone());
|
|
||||||
reg.render("x", &json!({"x": v})).unwrap().chars().collect()
|
|
||||||
},
|
|
||||||
))
|
|
||||||
},
|
|
||||||
None => None,
|
|
||||||
},
|
|
||||||
stream: stream,
|
stream: stream,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> OutputStream for OutputStreamFormatted<'a> {
|
// TODO use https://crates.io/crates/handlebars instead
|
||||||
|
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() {
|
||||||
Some(x) => self.stream.put(x(v)),
|
Some(x) => self.stream.put(sprintf(x, v)),
|
||||||
None => self.stream.put(v),
|
None => self.stream.put(v),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue