#![macro_use]
use std::io::{stdin, stdout, Write};
pub fn input<S: ToString>(prompt: S) -> String {
let mut buf = String::new();
print!("{}", prompt.to_string());
let _ = stdout().flush();
stdin()
.read_line(&mut buf)
.expect("Could not get user input");
while let Some('\n') = buf.chars().next_back() {
buf.pop();
}
while let Some('\r') = buf.chars().next_back() {
buf.pop();
}
buf
}
pub fn yes_or_no<S: ToString>(prompt: S) -> bool {
let response = input(prompt);
response.to_lowercase().trim() == "y"
}
#[macro_export]
macro_rules! color_print {
($color:ident, $fmt:expr $(,$e:expr)*) => {{
use std::io::Write;
use termcolor::{BufferWriter, Color, ColorChoice, ColorSpec, WriteColor};
let bufwtr = BufferWriter::stderr(ColorChoice::Always);
let mut buffer = bufwtr.buffer();
match buffer.set_color(ColorSpec::new().set_fg(Some(Color::$color))) {_=>{}};
match write!(&mut buffer, $fmt $(,$e)*) {_=>{}};
match bufwtr.print(&buffer) {_=>{}};
let mut reset_buf = BufferWriter::stderr(ColorChoice::Always).buffer();
match reset_buf.reset() {_=>{}};
match bufwtr.print(&reset_buf) {_=>{}};
}};
}
#[macro_export]
macro_rules! green {
($fmt:expr $(,$e:expr)*) => {
color_print!(Green, $fmt $(,$e)*);
};
}
#[macro_export]
macro_rules! red {
($fmt:expr $(,$e:expr)*) => {
color_print!(Red, $fmt $(,$e)*);
};
}
#[macro_export]
macro_rules! blue {
($fmt:expr $(,$e:expr)*) => {
color_print!(Blue, $fmt $(,$e)*);
};
}
#[macro_export]
macro_rules! yellow {
($fmt:expr $(,$e:expr)*) => {
color_print!(Yellow, $fmt $(,$e)*);
};
}
#[macro_export]
macro_rules! flush {
() => {{
use std::io::stdout;
use std::io::Write;
match stdout().flush() {
_ => {}
};
}};
}
#[macro_export]
macro_rules! info {
($fmt:expr $(,$e:expr)*) => {
let user = format!($fmt $(, $e)*);
print!("==[");
flush!();
green!("INFO{}", "");
print!("]===> {}\n", user);
};
}
#[macro_export]
macro_rules! debug {
($fmt:expr $(,$e:expr)*) => {
let user = format!($fmt $(, $e)*);
print!("==[");
flush!();
blue!("DEBUG");
print!("]==> {}\n", user);
};
}
#[macro_export]
macro_rules! error {
($fmt:expr $(,$e:expr)*) => {
let user = format!($fmt $(, $e)*);
print!("==[");
flush!();
red!("ERROR");
print!("]==> {}\n", user);
};
}
#[macro_export]
macro_rules! warn {
($fmt:expr $(,$e:expr)*) => {
let user = format!($fmt $(, $e)*);
print!("==[");
flush!();
yellow!("WARN");
print!("]===> {}\n", user);
};
}