#![allow(dead_code)]
use indicatif::{ProgressBar, ProgressStyle};
pub fn lanes(args: &[String], default: impl Fn(usize) -> usize) -> usize {
let cores = std::thread::available_parallelism().map_or(1, |n| n.get());
let mut rest = args.iter();
let mut asked: Option<Option<usize>> = None;
while let Some(arg) = rest.next() {
if let Some(n) = arg.strip_prefix("--lanes=") {
asked = Some(n.parse().ok());
} else if arg == "--lanes" {
asked = Some(rest.next().and_then(|n| n.parse().ok()));
}
}
match asked {
Some(Some(0)) => cores,
Some(Some(n)) => n.min(cores),
Some(None) | None => default(cores).clamp(1, cores),
}
}
pub fn paths(args: &[String]) -> Vec<&String> {
let mut rest = args.iter();
let mut paths = Vec::new();
while let Some(arg) = rest.next() {
if arg == "--lanes" {
rest.next();
} else if !arg.starts_with("--") {
paths.push(arg);
}
}
paths
}
pub fn bar(total: u64, unit: &str) -> ProgressBar {
let bar = ProgressBar::new(total);
bar.set_style(
ProgressStyle::with_template(&format!(
"{{spinner}} [{{elapsed_precise}}] {{bar:40}} {{pos}}/{{len}} {unit} ETA {{eta}}"
))
.expect("progress template")
.progress_chars("=> "),
);
bar
}