use smart_read::prelude::*;
fn main() {
println!("\n==== custom fuzzy-search testing ====");
let input = read!(["Lanercoast", "Windrip", "Redwick Bush", "Brickelwhyte", "Sirencester", "Conriston", "Inverness", "Norwich", "Elinmylly", "Murlayfield"]).1;
println!("You entered: \"{input}\"");
println!("\n==== `read!()` ====");
let input = read!(); println!("You entered: \"{input}\"");
println!("\n==== `prompt!(\"Enter a string: \")` ====");
let input = prompt!("Enter a string: "); println!("You entered: \"{input}\"");
println!("\n==== `read!(UsizeInput)` ====");
let input = read!(UsizeInput); println!("You entered: \"{input}\"");
println!("\n==== `read!(BoolInput)` ====");
let input = read!(BoolInput);
println!("You entered: \"{input}\"");
println!("\n==== `read!(NonWhitespaceInput)` ====");
let input = read!(NonWhitespaceInput);
println!("You entered: \"{input}\"");
println!("\n==== `read!(I32Input)` ====");
let input = read!(I32Input);
println!("You entered: \"{input}\"");
println!("\n==== `read!(0. ..= 100.)` ====");
let input = read!(0. ..= 100.); println!("You entered: \"{input}\"");
println!("\n==== `prompt!(\"Confirm input: \"; YesNoInput)` ====");
let input = prompt!("Confirm input: "; YesNoInput); println!("You entered: \"{input}\"");
println!("\n==== `prompt!(\"Confirm input: \"; [true] YesNoInput)` ====");
let input = prompt!("Confirm input: "; [true] YesNoInput); println!("You entered: \"{input}\"");
println!("\n==== `read!([\"red\", \"green\", \"blue\"])` ====");
let (index, input) = read!(["red", "green", "blue"]); println!("You entered: index {index}, \"{input}\"");
println!("\n==== `read!(= \"red\", \"green\", \"blue\")` ====");
let (index, input) = read!(= "red", "green", "blue"); println!("You entered: index {index}, \"{input}\"");
println!("\n==== `read!([InputOption::new(...), ...])` ====");
let (index, input) = read!([
InputOption::new("1", &["red" , "r", "choose first" ], ()), InputOption::new("2", &["green", "g", "choose second"], ()),
InputOption::new("3", &["blue" , "b", "choose third" ], ()),
]);
println!("You entered: index {index}, \"{}\"", input.names[0]);
println!("\n==== `read!(= ...)` ====");
let (index, input) = read!(=
"1"; "red" ; ["r", "choose first" ]; (), "2"; "green"; ["g", "choose second"]; (),
"3"; "blue" ; ["b", "choose third" ]; (),
);
println!("You entered: index {index}, \"{}\"", input.names[0]);
println!("\n==== `prompt!(\"Enter an even int: \"; TransformValidate(...));` ====");
let input = prompt!("Enter an even int: "; TransformValidate (|x| {
let Ok(x) = x.parse::<isize>() else {return Err(String::from("Could not parse input"));};
if x % 2 != 0 {return Err(String::from("Input is not even."));}
Ok(x)
}));
println!("You entered: \"{input}\"");
println!("\n==== `prompt!(\"Enter an int: \"; [2usize] = \"a\", \"b\", \"c\")` ====");
let (index, input) = prompt!("Enter an int: "; [2usize] = "a", "b", "c"); println!("You entered: index {index}, \"{input}\"");
println!();
println!("read_lines example finished");
wait_for_enter();
}