richrs 0.2.1

A Rust port of the Rich Python library for beautiful terminal output
Documentation
//! Spinners demo
use richrs::prelude::*;
use std::io::Write;
use std::thread;
use std::time::Duration;

fn main() {
    eprintln!();

    let spinner_demos = [
        ("dots", "Loading..."),
        ("line", "Processing..."),
        ("arc", "Working..."),
        ("moon", "Please wait..."),
        ("arrow", "Fetching..."),
        ("bouncingBall", "Optimizing..."),
    ];

    let mut spinners: Vec<(Spinner, &str)> = spinner_demos
        .iter()
        .filter_map(|(name, msg)| Spinner::new(name).ok().map(|s| (s, *msg)))
        .collect();

    // Print initial
    for (spinner, message) in &mut spinners {
        let name = spinner.name().to_owned();
        let frame = spinner.next_frame();
        eprintln!("  {:14} {} {}", name, frame, message);
    }
    let _ = std::io::stderr().flush();

    for _ in 0..40 {
        eprint!("\x1b[{}A", spinners.len());

        for (spinner, message) in &mut spinners {
            let name = spinner.name().to_owned();
            let frame = spinner.next_frame();
            eprintln!("  \x1b[36m{:14}\x1b[0m {} {}", name, frame, message);
        }

        let _ = std::io::stderr().flush();
        thread::sleep(Duration::from_millis(80));
    }

    eprintln!();
}