#![deny(
clippy::all,
clippy::cargo,
clippy::nursery,
// clippy::restriction,
// clippy::pedantic
)]
#![allow(
clippy::fallible_impl_from,
clippy::needless_doctest_main,
clippy::redundant_pub_crate,
clippy::suboptimal_flops
)]
#![allow(clippy::use_self)]
#![deny(missing_docs)]
#![deny(missing_debug_implementations)]
#![deny(rustdoc::all)]
mod layout;
mod parse;
mod print;
use crate::parse::{parse_input, ParsedUserInput};
use layout::*;
use std::process::exit;
use std::sync::atomic::AtomicBool;
pub static SIGNAL_STOP: AtomicBool = AtomicBool::new(false);
fn main() {
let parsed = validate_args_and_parse_input();
let mut tui = tui_prepare().unwrap();
run_tui(&mut tui, &parsed).unwrap();
tui_cleanup(tui).unwrap();
}
fn validate_args_and_parse_input() -> ParsedUserInput {
let args = std::env::args().collect::<Vec<String>>();
if args.len() == 1 {
eprintln!(
"Please provide an integer input in decimal, hex (0x), octal (0o), or bin (0b) format!"
);
eprintln!("Enter -h for help.");
exit(-1);
}
let input = &args[1];
if input == "-h" || input == "--help" {
show_help();
exit(0);
}
let parsed = parse_input(input);
match parsed {
Ok(parsed) => parsed,
Err(e) => {
eprintln!("Illegal input: {}", e);
exit(-1);
}
}
}
fn show_help() {
println!("Wambo - Decimal, Hex, Bin number + byte converter");
println!("Wambo can easily show you information about a value in decimal, hex, binary and");
println!("different byte size representations.");
println!();
println!("Usage:");
println!(" Input value can be a number in binary, octal, decimal or hexadecimal.");
println!(" Negative numbers are supported. Only integers, no decimals.");
println!(" $ wambo 42");
println!(" $ wambo 0b10001111");
println!(" $ wambo 0xdeadbeef");
println!();
println!(" Input value can be seen as number or as byte, whatever way you prefer.");
println!(" $ wambo 42 => \"I just want to convert this number\"");
println!(" $ wambo 1024b => \"I want to know how many megabytes 1024 bytes are\"");
println!();
println!(" Input values can have underscores for better readability.");
println!(" $ wambo 1_000_000");
println!(" $ wambo 0b1000_1111");
println!(" $ wambo 0xde_ad_be_ef");
println!();
println!(" Input values can have a unit.");
println!(" $ wambo 1mib (Mibibyte)");
println!(" Valid units are: k/kb, m/mb, g/gb, t/tb");
println!(" ki/kib, mi/mib, gi/gib, ti/tib");
}