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, } impl Output for Espeak { fn new(config: serde_yaml::Value) -> Result> { 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"); } }