utls 0.11.9

A simple utilities library for stuff I actually use sometimes, with a large focus on convenience and lack of dependencies.
Documentation
use std::thread;
use std::time::Duration;
use utls::{prog::{PBStyle, PB}, vars::framerate::SIXTY_FPS};

fn main() {
    // Fully customized
    let pb = PB::builder(1000)
        .style(PBStyle::modern())
        .width(100)
        .description("({e}/ ETA {r})")
        .message("Processing... {p}%")
        .update_frequency(SIXTY_FPS)
        .adv_stats(true)
        .defer(false)
        .precision(10)
        .spinner(None)
        .build();

        let (handle, pb_ref) = pb.threaded_start();

    PB::inc_until_arc(pb_ref.clone(), || {
        thread::sleep(Duration::from_millis(10));
    });

    handle.join().unwrap();

    // Get statistics before finishing
    let stats = pb_ref.lock().unwrap().get_stats();
    
    // Finish with completion message
    pb_ref.lock().unwrap().finish_with_message("Task completed!");

    // Display statistics
    println!("\nProgress Bar Statistics:");
    println!("Target update frequency: {:?}", stats.target_update_freq);
    println!("Minimum update interval: {:?}", stats.actual_min_update.unwrap_or(Duration::ZERO));
    println!("Maximum update interval: {:?}", stats.actual_max_update.unwrap_or(Duration::ZERO));
    println!("Average update interval: {:?}", stats.actual_avg_update.unwrap_or(Duration::ZERO));
    println!("Total number of updates: {}", stats.total_updates);
    println!("Total duration: {:?}", stats.total_duration.unwrap_or(Duration::ZERO));
}