#[macro_export]
macro_rules! jieba {
(print!()) => {};
(print!($text: expr)) => {
$crate::jieba::char_print($text, 0.05);
};
(print!($($text: expr),+)) => {
$crate::jieba::char_print(format!($($text),+), 0.05);
};
(print!($text: expr), $wait: expr) => {
$crate::jieba::char_print($text, $wait);
};
(print!($($text: expr),+), $wait: expr) => {
$crate::jieba::char_print(format!($($text),+), $wait);
};
(println!()) => {
println!()
};
(println!($text: expr)) => {
$crate::jieba::char_println($text, 0.05);
};
(println!($($text: expr),+)) => {
$crate::jieba::char_println(format!($($text),+), 0.05);
};
(println!($text: expr), $wait: expr) => {
$crate::jieba::char_println($text, $wait);
};
(println!($($text: expr),+), $wait: expr) => {
$crate::jieba::char_println(format!($($text),+), $wait);
};
(input!()) => {
let mut input = ::std::string::String::new();
::std::io::stdin().read_line(&mut input).unwrap();
input.trim().to_string()
};
(input!($text: expr)) => {
$crate::jieba::char_input($text, 0.05, "")
};
(input!($text: expr), $wait: expr) => {
$crate::jieba::char_input($text, $wait, "")
};
(inputln!()) => {
println!();
let mut input = ::std::string::String::new();
::std::io::stdin().read_line(&mut input).unwrap();
input.trim().to_string()
};
(inputln!($text: expr)) => {
$crate::jieba::char_input($text, 0.05, "\n")
};
(inputln!($text: expr), $wait: expr) => {
$crate::jieba::char_input($text, $wait, "\n")
};
}
pub fn char_print(text: impl ToString, sleep_seconds: f64) {
let mut stdout = ::std::io::stdout();
for ch in text.to_string().chars() {
print!("{}", ch);
::std::io::Write::flush(&mut stdout).unwrap();
::std::thread::sleep(::std::time::Duration::from_secs_f64(sleep_seconds));
}
std::io::Write::flush(&mut stdout).unwrap();
}
pub fn char_println(text: impl ToString, sleep_seconds: f64) {
let mut stdout = ::std::io::stdout();
for ch in text.to_string().chars() {
print!("{}", ch);
::std::io::Write::flush(&mut stdout).unwrap();
::std::thread::sleep(::std::time::Duration::from_secs_f64(sleep_seconds));
}
std::io::Write::flush(&mut stdout).unwrap();
println!()
}
pub fn char_input(prompt: impl ToString, sleep_seconds: f64, end: impl ToString) -> ::std::string::String {
let mut stdout = ::std::io::stdout();
for ch in prompt.to_string().chars() {
print!("{}", ch);
::std::io::Write::flush(&mut stdout).unwrap();
::std::thread::sleep(::std::time::Duration::from_secs_f64(sleep_seconds));
}
print!("{}", end.to_string());
std::io::Write::flush(&mut stdout).unwrap();
let mut input = String::new();
::std::io::stdin().read_line(&mut input).unwrap();
input.trim().to_string()
}
pub mod tests {
pub fn t0() {
jieba!(print!("hello, world "));
jieba!(print!("from "), 0.1);
jieba!(println!("RUST."), 0.5);
let name = jieba!(input!("What's your name:"));
jieba!(input!("How old are you:"), 0.1);
let f = jieba!(inputln!("What's your favourite:"));
if f.to_lowercase() == "computer" {
jieba!(inputln!("Realy? I like computer, too."));
}
jieba!(println!("Goodbye, {}.", name));
}
}