use crate::core::youtube::args::download::DownloadArgs;
use crate::core::youtube::args::logging::LoggingArgs;
use crate::core::youtube::args::output::OutputArgs;
use rustube::{Id, IdBuf, Result};
#[derive(clap::Parser)]
#[clap(
version,
about = "A simple CLI for the rustube YouTube-downloader library."
)]
pub enum Command {
#[clap(about = "Checks if a video can be downloaded and fetches information about it")]
Check(CheckArgs),
#[clap(about = "Downloads a YouTube video")]
Download(DownloadArgs),
}
#[derive(clap::Parser)]
pub struct CheckArgs {
#[clap(flatten)]
pub identifier: Identifier,
#[clap(flatten)]
pub stream_filter: crate::core::youtube::stream_filter::StreamFilter,
#[clap(flatten)]
pub logging: LoggingArgs,
#[clap(flatten)]
pub output: OutputArgs,
}
#[derive(clap::Parser)]
pub struct Identifier {
identifier: String,
}
impl Identifier {
pub fn id(&self) -> Result<IdBuf> {
Ok(Id::from_raw(&self.identifier)?.into_owned())
}
pub fn id_string(&self) -> String {
self.identifier.clone()
}
}