beautiful_terminal 0.1.2

A tool on terminal.
Documentation
// use std::io::{self, Write};
// use std::{thread, time::Duration};

/// 一字一顿地输出字符
#[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()
}

// #[cfg(test)]
pub mod tests {
    // #[test]
    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));
    }
}