Skip to main content

src/main.rs

1#![deny(warnings)]
3use clap::Parser;
5mod clean_url;
6use crate::clean_url::clean_url;
8#[derive(Parser)]
9#[command(version, about = "Clean tracking and unwanted parameters from URLs.", long_about = None)]
10struct Cli {
11 /// URL to clean
12 #[arg()]
13 url: String,
16fn main() {
17 let cli = Cli::parse();
19 print!("{}", clean_url(&cli.url));
22#[cfg(test)]
23mod test_cli {
24 use anyhow::Result;
25 use assert_cmd::Command;
26 use predicates::prelude::*;
28 #[test]
29 fn it_prints_the_version() -> Result<()> {
30 // Match strings like `clean-url 1.2.3`
31 let is_version_string = predicate::str::is_match(r"^clean-url [0-9]+\.[0-9]+\.[0-9]+\n$")?;
33 Command::cargo_bin("clean-url")?
34 .arg("--version")
35 .assert()
36 .success()
37 .stdout(is_version_string)
38 .stderr("");
40 Ok(())
41 }
43 #[test]
44 fn it_runs_the_readme_example() -> Result<()> {
45 Command::cargo_bin("clean-url")?
46 .arg("https://www.etsy.com/uk/listing/689034321/pride-flag-planets-complete-set-cross?ls=s&ga_order=most_relevant&ga_search_type=all&ga_view_type=gallery&ga_search_query=mathysphere+pride+planets&ref=sr_gallery-1-3&dd=1&content_source=750fbda2-0f23-409a-b29d-9714dc4e0ba3%253ALTcadfd6ad1b51d9f2c43bf9fc61aa37ee3ee5cc68&organic_search_click=1&logging_key=750fbda2-0f23-409a-b29d-9714dc4e0ba3%3ALTcadfd6ad1b51d9f2c43bf9fc61aa37ee3ee5cc68")
47 .assert()
48 .success()
49 .stdout("https://www.etsy.com/uk/listing/689034321/pride-flag-planets-complete-set-cross")
50 .stderr("");
52 Ok(())
53 }