use-utf8 0.1.0

UTF-8 validation and truncation helpers for RustUse
Documentation
use use_utf8::{
    Utf8Stats, byte_len, char_len, is_valid_utf8, safe_char_boundary, truncate_utf8,
    truncate_utf8_bytes, utf8_lossy, utf8_stats,
};

#[test]
fn detects_valid_utf8() {
    assert!(is_valid_utf8("café".as_bytes()));
    assert!(!is_valid_utf8(b"hi\xff"));
}

#[test]
fn converts_lossy_utf8() {
    assert_eq!(utf8_lossy(b"hi\xff"), "hi\u{fffd}");
}

#[test]
fn counts_bytes() {
    assert_eq!(byte_len("café"), 5);
}

#[test]
fn counts_chars() {
    assert_eq!(char_len("café"), 4);
}

#[test]
fn computes_stats() {
    assert_eq!(
        utf8_stats("rust"),
        Utf8Stats {
            bytes: 4,
            chars: 4,
            is_ascii: true,
        }
    );
}

#[test]
fn truncates_by_chars() {
    assert_eq!(truncate_utf8("café", 3), "caf");
}

#[test]
fn truncates_by_safe_byte_boundary() {
    assert_eq!(truncate_utf8_bytes("café", 4), "caf");
    assert_eq!(safe_char_boundary("café", 4), 3);
}

#[test]
fn empty_input_is_supported() {
    assert_eq!(truncate_utf8("", 1), "");
    assert_eq!(truncate_utf8_bytes("", 1), "");
}