diff --git a/src/ytd.rs b/src/ytd.rs index ea4459d..4150cfb 100644 --- a/src/ytd.rs +++ b/src/ytd.rs @@ -1,6 +1,8 @@ //! Rust-Wrapper for youtube-dl +use std::fmt; use std::{ + fmt::{Display, Formatter}, fs::{canonicalize, create_dir_all}, io::Error, path::PathBuf, @@ -8,18 +10,44 @@ use std::{ }; use std::{path::Path, process::Command}; +pub struct Arg { + arg: String, + input: Option, +} + +impl Arg { + pub fn new(argument: &str) -> Arg { + Arg { + arg: argument.to_string(), + input: None, + } + } + + pub fn new_with_arg(argument: &str, input: &str) -> Arg { + Arg { + arg: argument.to_string(), + input: Option::from(input.to_string()), + } + } +} + +impl Display for Arg { + fn fmt(&self, fmt: &mut Formatter<'_>) -> fmt::Result { + match &self.input { + Some(input) => write!(fmt, "{} {}", self.arg, input), + None => write!(fmt, "{}", self.arg), + } + } +} + pub struct YoutubeDL { path: PathBuf, link: String, - args: Vec<(String, Option)>, + args: Vec, } impl YoutubeDL { - pub fn new( - dl_path: &str, - args: Vec<(String, Option)>, - link: String, - ) -> Result { + pub fn new(dl_path: &str, args: Vec, link: String) -> Result { // create path let path = Path::new(dl_path); @@ -63,10 +91,10 @@ impl YoutubeDL { .arg("--quiet") .arg("--no-warnings"); - for (opt, arg) in self.args.iter() { - match arg { - Some(arg) => cmd.arg(opt).arg(arg), - None => cmd.arg(opt), + for arg in self.args.iter() { + match &arg.input { + Some(input) => cmd.arg(&arg.arg).arg(input), + None => cmd.arg(&arg.arg), }; }