connection_string_parser/
lib.rs1mod 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;