const DEFAULT_MAX_LEN: u8 = 30;
const DEFAULT_MIN_LEN: u8 = 10;
const DEFAULT_ROWS: usize = 10;
use std::env::args;
use crossterm::style::{Color, Colors};
use ttygrid::{add_line, grid, header};
fn randstring(len: u8) -> String {
(0..len)
.map(|_| (rand::random::<u8>() % 26) + 'a' as u8)
.map(|c| {
if rand::random::<bool>() {
(c as char).to_ascii_uppercase()
} else {
c as char
}
.to_string()
})
.collect::<Vec<String>>()
.join("")
}
fn rando(max_len: u8, min_len: u8) -> String {
format!("{}", randstring(rand::random::<u8>() % max_len + min_len))
}
fn main() -> Result<(), anyhow::Error> {
let max_len = args()
.nth(1)
.unwrap_or(DEFAULT_MAX_LEN.to_string())
.parse()
.unwrap_or(DEFAULT_MAX_LEN);
let min_len = args()
.nth(2)
.unwrap_or(DEFAULT_MIN_LEN.to_string())
.parse()
.unwrap_or(DEFAULT_MIN_LEN);
let rows = args()
.nth(3)
.unwrap_or(DEFAULT_ROWS.to_string())
.parse()
.unwrap_or(DEFAULT_ROWS);
let header_lineno = header!("line");
let header_one = header!("one", 1);
let header_two = header!("two", 2);
let header_three = header!("three", 3);
let header_four = header!("four", 4);
let header_five = header!("five", 5);
let mut g = grid!(
header_lineno,
header_one,
header_two,
header_three,
header_four,
header_five
)?;
for lineno in 0..rows {
add_line!(
g,
format!("{}", lineno),
rando(max_len, min_len),
rando(max_len, min_len),
rando(max_len, min_len),
rando(max_len, min_len),
rando(max_len, min_len)
)?
}
g.set_header_color(Colors::new(Color::DarkCyan, Color::Reset));
g.set_delimiter_color(Colors::new(Color::Cyan, Color::Reset));
g.set_primary_color(Colors::new(Color::White, Color::Reset));
g.set_secondary_color(Colors::new(Color::Grey, Color::Reset));
g.write(&mut std::io::stdout())?;
Ok(())
}