mirror of
https://github.com/narrrl/ytd-rs.git
synced 2026-11-03 16:41:27 +01:00
docs: improve API documentation and add comprehensive doc-tests
This commit is contained in:
1 parent
c386a2b011
commit
e098029ac8
1 file changed
+58
+58
@@ -125,6 +125,8 @@ impl YtDlpStream {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// The main builder for configuring and running yt-dlp.
|
/// The main builder for configuring and running yt-dlp.
|
||||||
|
///
|
||||||
|
/// Use this struct to chain configurations and finally execute a download or metadata extraction.
|
||||||
#[derive(Clone, Debug, Default)]
|
#[derive(Clone, Debug, Default)]
|
||||||
pub struct YtDlp {
|
pub struct YtDlp {
|
||||||
links: Vec<String>,
|
links: Vec<String>,
|
||||||
@@ -151,24 +153,40 @@ impl YtDlp {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Set a custom path to the yt-dlp executable.
|
/// Set a custom path to the yt-dlp executable.
|
||||||
|
///
|
||||||
|
/// Useful if yt-dlp is not in your PATH or you want to use a specific version.
|
||||||
pub fn yt_dlp_path(mut self, path: impl Into<String>) -> Self {
|
pub fn yt_dlp_path(mut self, path: impl Into<String>) -> Self {
|
||||||
self.executable_path = Some(path.into());
|
self.executable_path = Some(path.into());
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Set the output directory for the download.
|
/// Set the output directory for the download.
|
||||||
|
///
|
||||||
|
/// If the directory does not exist, it will be created during execution.
|
||||||
pub fn output_dir(mut self, path: PathBuf) -> Self {
|
pub fn output_dir(mut self, path: PathBuf) -> Self {
|
||||||
self.output_dir = Some(path);
|
self.output_dir = Some(path);
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Add a raw argument to the yt-dlp command.
|
/// Add a raw argument to the yt-dlp command.
|
||||||
|
///
|
||||||
|
/// # Example
|
||||||
|
/// ```
|
||||||
|
/// # use ytd_rs::YtDlp;
|
||||||
|
/// let ytd = YtDlp::new("link").arg("--quiet");
|
||||||
|
/// ```
|
||||||
pub fn arg(mut self, flag: impl Into<String>) -> Self {
|
pub fn arg(mut self, flag: impl Into<String>) -> Self {
|
||||||
self.args.push((flag.into(), None));
|
self.args.push((flag.into(), None));
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Add a raw argument with an accompanying value (e.g., --output template).
|
/// Add a raw argument with an accompanying value (e.g., --output template).
|
||||||
|
///
|
||||||
|
/// # Example
|
||||||
|
/// ```
|
||||||
|
/// # use ytd_rs::YtDlp;
|
||||||
|
/// let ytd = YtDlp::new("link").arg_with("--output", "%(title)s.%(ext)s");
|
||||||
|
/// ```
|
||||||
pub fn arg_with(mut self, flag: impl Into<String>, value: impl Into<String>) -> Self {
|
pub fn arg_with(mut self, flag: impl Into<String>, value: impl Into<String>) -> Self {
|
||||||
self.args.push((flag.into(), Some(value.into())));
|
self.args.push((flag.into(), Some(value.into())));
|
||||||
self
|
self
|
||||||
@@ -304,6 +322,8 @@ impl YtDlp {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Executes yt-dlp and returns the standard output.
|
/// Executes yt-dlp and returns the standard output.
|
||||||
|
///
|
||||||
|
/// This method awaits the process to finish and captures the entire output.
|
||||||
pub async fn download(&self) -> Result<YtDlpResult> {
|
pub async fn download(&self) -> Result<YtDlpResult> {
|
||||||
info!("Starting download for links: {:?}", self.links);
|
info!("Starting download for links: {:?}", self.links);
|
||||||
let output = self.spawn_yt_dlp(false).await?.wait_with_output().await?;
|
let output = self.spawn_yt_dlp(false).await?.wait_with_output().await?;
|
||||||
@@ -323,6 +343,19 @@ impl YtDlp {
|
|||||||
|
|
||||||
/// Executes yt-dlp as a continuous process, allowing line-by-line output streaming.
|
/// Executes yt-dlp as a continuous process, allowing line-by-line output streaming.
|
||||||
/// Automatically adds `--newline` so progress updates are written on new lines.
|
/// Automatically adds `--newline` so progress updates are written on new lines.
|
||||||
|
///
|
||||||
|
/// # Example
|
||||||
|
/// ```no_run
|
||||||
|
/// # use ytd_rs::YtDlp;
|
||||||
|
/// # async fn example() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
|
/// let mut process = YtDlp::new("link").download_process().await?;
|
||||||
|
/// while let Some(line) = process.next_line().await? {
|
||||||
|
/// println!("{}", line);
|
||||||
|
/// }
|
||||||
|
/// process.wait().await?;
|
||||||
|
/// # Ok(())
|
||||||
|
/// # }
|
||||||
|
/// ```
|
||||||
pub async fn download_process(&self) -> Result<YtDlpChild> {
|
pub async fn download_process(&self) -> Result<YtDlpChild> {
|
||||||
info!("Starting download process for links: {:?}", self.links);
|
info!("Starting download process for links: {:?}", self.links);
|
||||||
let mut clone = self.clone();
|
let mut clone = self.clone();
|
||||||
@@ -339,6 +372,19 @@ impl YtDlp {
|
|||||||
|
|
||||||
/// Executes yt-dlp and streams the raw media binary data to standard output.
|
/// Executes yt-dlp and streams the raw media binary data to standard output.
|
||||||
/// This automatically sets `--output -` and gives you access to the async stdout reader.
|
/// This automatically sets `--output -` and gives you access to the async stdout reader.
|
||||||
|
///
|
||||||
|
/// # Example
|
||||||
|
/// ```no_run
|
||||||
|
/// # use ytd_rs::YtDlp;
|
||||||
|
/// # use tokio::io::AsyncReadExt;
|
||||||
|
/// # async fn example() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
|
/// let mut stream = YtDlp::new("link").download_to_stream().await?;
|
||||||
|
/// let mut buffer = [0; 1024];
|
||||||
|
/// stream.stdout().read(&mut buffer).await?;
|
||||||
|
/// stream.wait().await?;
|
||||||
|
/// # Ok(())
|
||||||
|
/// # }
|
||||||
|
/// ```
|
||||||
pub async fn download_to_stream(&self) -> Result<YtDlpStream> {
|
pub async fn download_to_stream(&self) -> Result<YtDlpStream> {
|
||||||
info!(
|
info!(
|
||||||
"Starting binary stream download for links: {:?}",
|
"Starting binary stream download for links: {:?}",
|
||||||
@@ -360,6 +406,18 @@ impl YtDlp {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Executes yt-dlp with --dump-json and parses the output into VideoInfo.
|
/// Executes yt-dlp with --dump-json and parses the output into VideoInfo.
|
||||||
|
///
|
||||||
|
/// # Example
|
||||||
|
/// ```no_run
|
||||||
|
/// # use ytd_rs::YtDlp;
|
||||||
|
/// # async fn example() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
|
/// let infos = YtDlp::new("link").get_info().await?;
|
||||||
|
/// for info in infos {
|
||||||
|
/// println!("Title: {}", info.title);
|
||||||
|
/// }
|
||||||
|
/// # Ok(())
|
||||||
|
/// # }
|
||||||
|
/// ```
|
||||||
pub async fn get_info(&self) -> Result<Vec<VideoInfo>> {
|
pub async fn get_info(&self) -> Result<Vec<VideoInfo>> {
|
||||||
info!("Fetching video info for links: {:?}", self.links);
|
info!("Fetching video info for links: {:?}", self.links);
|
||||||
let output = self.spawn_yt_dlp(true).await?.wait_with_output().await?;
|
let output = self.spawn_yt_dlp(true).await?.wait_with_output().await?;
|
||||||
|
|||||||
Reference in new issue
Block a user