#derive #macro #bar #bitsparrow #bit-sparrow #bit-decode #bit-encode

bitsparrow-derive

为Rust中BitSparrow实现提供推导宏

3 个版本 (不稳定)

使用旧Rust 2015

2.0.0-rc22017年2月23日
0.1.1 2017年2月16日
0.1.0 2017年2月16日

#62 in #bar

MIT 许可证

10KB
166

为Rust中的BitSparrow提供推导宏

主页 - Cargo

使用方法

#[macro_use]
extern crate bitsparrow_derive;
extern crate bitsparrow;

use bitsparrow::*;

#[derive(BitEncode, BitDecode, PartialEq, Debug)]
struct Foo {
    bar: Vec<Bar>,
    baz: String,
    derp: bool,
}

#[derive(BitEncode, BitDecode, PartialEq, Debug)]
struct Bar(u16);

fn main() {
    let foo = Foo {
        bar: vec![Bar(10), Bar(1337)],
        baz: "Hello world".into(),
        derp: true,
    };

    let expect = vec![
        2,                                                      // Vec length
        0x00,0x0A,                                              // |-> 10
        0x05,0x39,                                              // `-> 1337
        11,                                                     // String length
        b'H',b'e',b'l',b'l',b'o',b' ',b'w',b'o',b'r',b'l',b'd', // `-> String data
        1                                                       // bool
    ];

    let buffer = Encoder::encode(&foo);
    let decoded: Foo = Decoder::decode(&buffer).unwrap();

    assert_eq!(buffer, expect);
    assert_eq!(decoded, foo);
}

依赖

~1.5MB
~41K SLoC