use anyhow::Result;
use clap::Parser;
use rand::seq::SliceRandom;
use tracing::{debug, instrument};
#[derive(Debug, Default, Parser)]
struct Config {
#[clap(short, long, parse(from_occurrences))]
verbose: usize,
#[clap(short, long, default_value = ",")]
separator: String,
#[clap(short, long)]
limit: Option<usize>,
#[clap(short, long)]
randomize: bool,
connection_string: String,
}
#[instrument]
fn main() -> Result<()> {
let config = Config::parse();
jacklog::from_level(2 + config.verbose, None)?;
debug!(connection_string = ?config.connection_string);
let mut parsed = pg_connection_string::from_multi_str(
&config.connection_string,
&config.separator,
)?;
debug!(?parsed);
if config.randomize {
let mut rng = rand::thread_rng();
parsed.shuffle(&mut rng);
}
if let Some(limit) = config.limit {
for (n, conn) in parsed.iter().enumerate() {
if n >= limit {
break;
}
println!("{:#?}", &conn);
}
return Ok(());
}
println!("{:#?}", &parsed);
Ok(())
}