aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorA Farzat <a@farzat.xyz>2025-11-21 19:53:35 +0300
committerA Farzat <a@farzat.xyz>2025-11-21 19:53:35 +0300
commitdb713f8e215b2c349e4eaf0fa4791b876125148b (patch)
tree9244a2056cf7cdaa7e65315286dd7954a9cf1c8a /src
parent78921f658502442fa72818e829fbd81c2e39e099 (diff)
downloadsimple-rss-podcast-downloader-db713f8e215b2c349e4eaf0fa4791b876125148b.tar.gz
simple-rss-podcast-downloader-db713f8e215b2c349e4eaf0fa4791b876125148b.zip
Use clap for argument parsing
Diffstat (limited to 'src')
-rw-r--r--src/lib.rs19
-rw-r--r--src/main.rs19
2 files changed, 15 insertions, 23 deletions
diff --git a/src/lib.rs b/src/lib.rs
index 12a27e6..78ddfe4 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -1,26 +1,7 @@
use rss::Channel;
-use std::env;
use std::fs::File;
use std::path::PathBuf;
-/// Parse CLI arguments and return (feed_url, output_dir)
-pub fn parse_args() -> (String, String) {
- let mut args: Vec<String> = env::args().collect();
- if args.len() < 2 {
- eprintln!("Usage: {} <RSS_FEED_URL> [OUTPUT_DIR]", args[0]);
- std::process::exit(1);
- }
-
- let feed_url = args.remove(1);
- let output_dir = if args.len() > 1 {
- args.remove(1)
- } else {
- String::from(".")
- };
-
- (feed_url, output_dir)
-}
-
/// Fetch RSS feed content from a URL
pub fn fetch_feed(url: &str) -> Result<String, reqwest::Error> {
reqwest::blocking::get(url)?.text()
diff --git a/src/main.rs b/src/main.rs
index 7e28a52..a2ac775 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,15 +1,26 @@
+use clap::Parser;
use simple_rss_podcast_downloader::*;
+#[derive(Parser, Debug)]
+#[command(author, version, about)]
+struct Cli {
+ feed_url: String,
+ #[arg(default_value = ".")]
+ output_dir: String,
+ #[arg(short, long)]
+ numbered: bool,
+}
+
fn main() -> Result<(), Box<dyn std::error::Error>> {
- let (feed_url, output_dir) = parse_args();
+ let args = Cli::parse();
- println!("Feed RSS feed from: {}", feed_url);
+ println!("Feed RSS feed from: {}", args.feed_url);
- let xml = fetch_feed(&feed_url)?;
+ let xml = fetch_feed(&args.feed_url)?;
let channel = parse_feed(&xml)?;
for url in get_audio_urls(&channel) {
println!("Downloading file: {}", url);
- download_file(url, &output_dir)?;
+ download_file(url, &args.output_dir)?;
}
Ok(())