33 lines
878 B
Rust
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");
|
|
}
|
|
}
|