mod model; pub use model::*; use std::process::{Child, Command, Output, Stdio}; const YOUTUBE_DL_COMMAND: &str = "yt-dlp"; pub struct YtDlp { command: Command, args: Vec, } impl Default for YtDlp { fn default() -> Self { Self::new() } } impl YtDlp { pub fn new() -> Self { let mut cmd = Command::new(YOUTUBE_DL_COMMAND); cmd .env("LC_ALL", "en_US.UTF-8") .stdout(Stdio::piped()) .stdin(Stdio::piped()) .stderr(Stdio::piped()); Self { command: cmd, args: Vec::new(), } } pub fn arg(&mut self, arg: &str) -> &mut Self { self.args.push(arg.to_owned()); self } pub fn execute(&mut self) -> std::io::Result { self .command .args(self.args.clone()) .spawn() .and_then(Child::wait_with_output) } }