waxpkg 0.19.2

Fast Homebrew-compatible package manager
use std::sync::atomic::{AtomicBool, Ordering};
use std::time::Duration;

static SHOW_TIMING: AtomicBool = AtomicBool::new(false);

pub fn set_enabled(enabled: bool) {
    SHOW_TIMING.store(enabled, Ordering::Relaxed);
}

pub fn enabled() -> bool {
    SHOW_TIMING.load(Ordering::Relaxed)
}

pub fn elapsed_suffix(elapsed: Duration) -> String {
    if enabled() {
        format!(" [{}ms]", elapsed.as_millis())
    } else {
        String::new()
    }
}

#[cfg(test)]
mod tests {
    use super::*;
    use std::sync::Mutex;

    static TIMING_LOCK: Mutex<()> = Mutex::new(());

    #[test]
    fn test_set_and_get_enabled() {
        let _guard = TIMING_LOCK.lock().unwrap();

        set_enabled(true);
        assert!(enabled());

        set_enabled(false);
        assert!(!enabled());
    }

    #[test]
    fn test_elapsed_suffix_when_enabled() {
        let _guard = TIMING_LOCK.lock().unwrap();

        set_enabled(true);
        let duration = Duration::from_millis(1500);
        assert_eq!(elapsed_suffix(duration), " [1500ms]");
    }

    #[test]
    fn test_elapsed_suffix_when_disabled() {
        let _guard = TIMING_LOCK.lock().unwrap();

        set_enabled(false);
        let duration = Duration::from_millis(1500);
        assert_eq!(elapsed_suffix(duration), "");
    }
}