use std::{io::self, process::Command};
use crossterm::{execute, style::{Color, Print, ResetColor, SetForegroundColor}};
pub const RUSLVER: &str = "0.1.2\n";
pub fn v() {
println!("rusl - {}", RUSLVER);
}
pub fn hw() {
println!("Hello, World!");
}
pub fn cls(printversion: &str) {
if cfg!(target_os = "windows") {
Command::new("cmd").args(&["/C", "cls"]).status().unwrap();
} else {
Command::new("clear").status().unwrap();
}
match printversion.trim().to_lowercase().as_str() {
"yes" | "y" => crate::v(),
"no" | "n" => {}
_ => panic!("Invalid argument for rusl::cls(printversion). Use 'yes' or 'no'."),
}
}
pub fn log(status: &str, message: &str) {
let mut stdout = io::stdout();
let status_color = match status {
"tip" => Color::Magenta,
"good" => Color::Green,
"warning" => Color::DarkYellow, "error" => Color::Red,
"userhelp" => Color::Cyan, _ => Color::White, };
execute!(
stdout,
SetForegroundColor(status_color),
Print("â–¼ "),
ResetColor,
Print(message),
).unwrap();
}
pub fn g(name: &str) {
let greetlanguages = [
"Hello", "Hi", "Sup", "Howdy", "Greetings", "Namaste",
"Bonjour", "Salut", "Hola", "Ciao", "Hallo", "Hej", "Hei",
"Merhaba", "привет", "Привіт", "Γεια σας"
];
let idx = fastrand::usize(0..greetlanguages.len());
println!("{}, {}!", greetlanguages[idx], name);
}
pub mod i {
use std::io::{self, Write};
use crossterm::{execute, style::{Color, Print, ResetColor, SetForegroundColor}};
pub fn userinput(prompt: &str) -> String {
let mut stdout = io::stdout();
let statuscolor = Color::Cyan;
let indicator = "🞂 ";
let formattedprompt = format!("{} ", prompt);
execute!(
stdout,
SetForegroundColor(statuscolor),
Print(indicator),
ResetColor,
Print(formattedprompt),
).unwrap();
io::stdout().flush().expect("Failed to flush stdout");
let mut useroutput = String::new();
io::stdin()
.read_line(&mut useroutput)
.expect("Failed to read input");
useroutput.trim().to_string()
}
}
pub mod testing {
use crossterm::{execute, style::{Color, Print, ResetColor, SetForegroundColor}};
use std::io;
use std::time::Instant;
pub fn run_tests<F>(test_block: F)
where
F: FnOnce(),
{
let start_time = Instant::now();
test_block();
let elapsed = start_time.elapsed();
let mut stdout = io::stdout();
execute!(
stdout,
SetForegroundColor(Color::Cyan),
Print("â–¼ "),
ResetColor,
).unwrap();
let time_taken = format!("{:?}", elapsed);
execute!(
stdout,
Print(format!("| {} | All tests ran successfully.", time_taken)),
).unwrap();
}
pub fn sample_test() {
let input = crate::i::userinput("What is your name?");
println!("{}", input);
}
pub fn run() {
run_tests(|| {
sample_test();
});
}
}