#utf-8 #slice #validation

vatfluid

UTF-8切片验证,支持不完整的UTF-8序列

3个版本 (破坏性更新)

使用旧的Rust 2015

0.3.0 2017年3月21日
0.2.0 2017年3月19日
0.1.0 2017年3月18日

#156#utf-8


5 个crate中(通过 twist)使用

MIT/Apache

28KB
513

vatfluid


lib.rs:

&[u8]切片上进行零分配的UTF-8验证。允许不完整的UTF-8序列。返回已成功验证的缓冲区位置。

#
use vatfluid::{Error, ErrorKind, Success, validate};

// A `Complete` result.
let buf = b"Hello, World!";
match validate(buf) {
    Ok(Success::Complete(pos)) => {
        assert!(pos == 13);
        assert!(pos == buf.len());
    }
    Ok(Success::Incomplete(_needed, _pos)) => {
        assert!(false);
    }
    Err(_e) => {
        assert!(false);
    }
}

// An `Incomplete` result.
let inc_buf = vec![0xc2, 0xa2, 0xc2];
match validate(&inc_buf) {
    Ok(Success::Complete(_pos)) => {
        assert!(false);
    }
    Ok(Success::Incomplete(needed, pos)) => {
        assert!(needed == 1);
        assert!(pos == 2);
    }
    Err(_e) => {
        assert!(false);
    }
}

// An `Error` result.
let error_buf = vec![0xf4, 0x90, 0x80, 0x80];
match validate(&error_buf) {
    Ok(Success::Complete(_pos)) => {
        assert!(false);
    }
    Ok(Success::Incomplete(_needed, _pos)) => {
        assert!(false);
    }
    Err(e) => {
        assert_matches!(e, Error(ErrorKind::BeyondMaximumCodePoint, _));
    }
}

依赖项

~2.5–3.5MB
~74K SLoC