rnetmon/src/outputs/espeak.rs

33 lines
878 B
Rust

use crate::message::Message;
pub use crate::output::*;
use serde::Deserialize;
#[derive(Debug)]
pub struct Espeak {
config: EspeakConfig,
}
#[derive(Debug, Deserialize)]
struct EspeakConfig {
#[serde(default = "espeak".to_owned())]
espeak: String,
#[serde(default = vec![])]
args: Vec<String>,
}
impl Output for Espeak {
fn new(config: serde_yaml::Value) -> Result<Self, Box<dyn std::error::Error>> {
let cfg = serde_yaml::from_value(config).expect("Invalid config for Espeak");
Ok(Espeak { config: cfg })
}
fn process_message(&mut self, message: Message) {
use std::process::{Command, Stdio};
Command::new(&self.config.espeak)
.args(&self.config.args)
.arg(message.text)
.stdout(Stdio::null())
.status()
.expect("failed to execute process");
}
}