5个版本
| 0.2.2 | 2021年7月26日 | 
|---|---|
| 0.2.1 | 2021年2月28日 | 
| 0.2.0 | 2020年8月17日 | 
| 0.1.1 | 2020年6月13日 | 
| 0.1.0 | 2020年6月12日 | 
#80 in #endian
每月下载量 44
在endiannezz中使用
12KB
279 代码行
endiannezz
高级I/O端序的零依赖库
安装
[dependencies]
endiannezz = "0.6"
使用 #[derive(Io)]
use endiannezz::Io;
use std::io::Result;
#[derive(Io)]
#[endian(big)]
struct ParseMe {
    works: bool,
    data: u32,
    #[endian(little)]
    extra: i16,
}
fn main() -> Result<()> {
    let s1 = ParseMe {
        works: true,
        data: 10,
        extra: 20,
    };
    //writing struct as bytes into vec
    let mut vec = Vec::new();
    s1.write(&mut vec)?;
    let mut slice = vec.as_slice();
    #[rustfmt::skip]
    assert_eq!(slice, &[
        1, //bool as byte
        0, 0, 0, 10, //u32 in big-endian (because big-endian is set on top place struct as default)
        20, 0, //i16 in little-endian (overriding default)
    ]);
    //reading struct from bytes
    let _s2 = ParseMe::read(&mut slice)?;
    Ok(())
}
简单示例
use endiannezz::ext::{EndianReader, EndianWriter};
use endiannezz::{BigEndian, LittleEndian, NativeEndian};
use std::io::Result;
fn main() -> Result<()> {
    let mut vec = Vec::new();
    vec.try_write::<LittleEndian, i32>(1)?;
    vec.try_write::<BigEndian, _>(2)?;
    vec.try_write::<NativeEndian, _>(3_u16)?;
    let mut slice = vec.as_slice();
    slice.try_read::<LittleEndian, i32>()?;
    let _num32: i32 = slice.try_read::<BigEndian, _>()?;
    let _num16: u16 = slice.try_read::<NativeEndian, _>()?;
    Ok(())
}
依赖项
~1.5MB
~35K SLoC