connection_string_parser/
lib.rs

1mod cli;
2
3use cli::Part;
4use color_eyre::{eyre::eyre, Result};
5use url::Url;
6
7pub fn run_command(url: String, part: Part, fail_silently: bool) -> Result<String> {
8    let parsed = Url::parse(&url)?;
9    let resp = match part {
10        Part::Scheme => Some(parsed.scheme().to_string()),
11        Part::Host => parsed.host_str().map(String::from),
12        Part::Port => parsed.port().map(|p| p.to_string()),
13        Part::User => Some(parsed.username().to_string()),
14        Part::Password => parsed.password().map(String::from),
15        Part::Path => parsed
16            .path_segments()
17            .and_then(|mut p| p.next().map(String::from)),
18    };
19    if let Some(resp) = resp {
20        Ok(resp)
21    } else if fail_silently {
22        Ok(String::new())
23    } else {
24        Err(eyre!("No value found for part {:?}", part))
25    }
26}
27
28pub use cli::Cli;