#![cfg_attr(nightly, feature(int_error_matching))] #![cfg_attr(nightly, feature(linked_list_remove))] #![cfg_attr(nightly, feature(const_fn))] #![cfg_attr(nightly, feature(never_type))] #![allow(dead_code)] use cfg_if::cfg_if; mod defer; mod ext; pub use ext::JoinStrsExt as _; #[cfg(feature="splash")] mod splash; mod flags; mod arg; mod error; pub use error::{ErrorExt as _, ResultExt as _}; mod stage; mod leanify; mod colour; mod dir; mod fixed_stack; mod process; mod work; //mod timeout; mod maybe_single; #[cfg(feature="progress")] mod task_list; #[cfg(feature="progress")] mod progress; async fn work() -> Result<(), Box> { //println!("umm {}", colour::style(colour!(Color::Blue), "hiii")); let args = arg::parse_args().await.with_prefix("failed to parse args")?; let leanify = leanify::find_binary().with_prefix("Couldn't find leanify binary")?; #[cfg(feature="colour")] { match args.flags.coloured { Some(x) => recolored::control::set_override(x), _ => {}, } } work::work(&args.flags, leanify, args.files, match args.flags.hard_limit { Some(hard_limit) => { // We have hard limit match args.max_children { // We also have max children, and it's higher than hard limit, Some(max_children) if max_children > hard_limit => Some(hard_limit), // We have no max children None => Some(hard_limit), //Max children is lower than hard limit _ => args.max_children, } }, _ => args.max_children, }).await } #[tokio::main] async fn main() { prettify_expect(work().await.map_err(|e| e.to_string()), "exited with error"); } #[inline] fn prettify_expect(res: Result, msg: S) -> T where S: AsRef, E: std::fmt::Display { match res { Ok(v) => v, Err(e) => { eprintln!("\n{}: {}", msg.as_ref(), e); std::process::exit(1) }, } }