humfmt 0.6.0

Ergonomic human-readable formatting toolkit for Rust
Documentation
#![cfg(feature = "chrono")]

use humfmt::{
    chrono::{self as humchrono, ChronoHumanize},
    DurationConversionError, DurationOptions, NegativeDurationError,
};

#[test]
fn formats_positive_chrono_timedelta() {
    let delta = ::chrono::TimeDelta::try_seconds(90).unwrap();
    assert_eq!(humchrono::duration(delta).unwrap().to_string(), "1m 30s");
    assert_eq!(delta.try_human_ago().unwrap().to_string(), "1m 30s ago");
}

#[test]
fn rejects_negative_chrono_timedelta() {
    let delta = ::chrono::TimeDelta::try_seconds(-5).unwrap();
    assert!(matches!(
        humchrono::duration(delta),
        Err(NegativeDurationError)
    ));
    assert!(matches!(humchrono::ago(delta), Err(NegativeDurationError)));
}

#[test]
fn supports_custom_options_for_chrono_timedelta() {
    let delta = ::chrono::TimeDelta::milliseconds(1500);
    let out = humchrono::ago_with(delta, DurationOptions::new().long_units()).unwrap();
    assert_eq!(out.to_string(), "1 second 500 milliseconds ago");
}

#[test]
fn supports_ago_since_for_chrono_datetimes() {
    let then = ::chrono::DateTime::from_timestamp(0, 0).unwrap();
    let now = ::chrono::DateTime::from_timestamp(3665, 0).unwrap();
    assert_eq!(
        humchrono::ago_since(then, now).unwrap().to_string(),
        "1h 1m ago"
    );
}

#[test]
fn supports_ago_since_with_long_options() {
    let then = ::chrono::DateTime::from_timestamp(0, 0).unwrap();
    let now = ::chrono::DateTime::from_timestamp(3665, 0).unwrap();
    let out =
        humchrono::ago_since_with(then, now, DurationOptions::new().long_units().max_units(3))
            .unwrap();

    assert_eq!(out.to_string(), "1 hour 1 minute 5 seconds ago");
}

#[test]
fn checked_api_distinguishes_negative_duration_errors() {
    let delta = ::chrono::TimeDelta::try_seconds(-5).unwrap();
    assert!(matches!(
        humchrono::duration_checked(delta),
        Err(DurationConversionError::NegativeDuration)
    ));
    assert!(matches!(
        humchrono::ago_checked(delta),
        Err(DurationConversionError::NegativeDuration)
    ));
}