14个版本 (5个重大变更)

0.6.2 2022年2月3日
0.5.5 2022年1月8日
0.5.2 2021年11月2日

#2095编码

Download history 7/week @ 2024-03-10 2/week @ 2024-03-17 14/week @ 2024-03-31 1/week @ 2024-04-21

每月下载量 65次

MIT 许可协议

31KB
488

BinVerSe (Binary VerSerializer)

提供带有版本控制的快速二进制序列化,以便以向后兼容和紧凑的方式存储数据。

目前,该软件包仍在开发中,不建议用于大型项目,因为可能会出现重大变更和问题。 警告:直到版本1.0,没有任何向后兼容性保证!

特性

  • 简单、快速的二进制序列化
  • 使用修订号进行版本控制
  • 错误处理
  • 过程宏以避免样板代码
  • 使用宏进行版本控制和大小属性

基本示例

use binverse::{serialize::Serialize, streams::{Deserializer, Serializer}};
use binverse_derive::serializable;

fn main() {
    // Add #[serializable] for automatic Serialize/Deserialize
    // implementations and version handling.
    #[serializable]
    #[derive(Debug, PartialEq)]
    struct Example {
        a: i32,
        b: f32,
        c: String
    }

    let example = Example {
        a: -1253891,
        b: 44223.125,
        c: String::from("Hello binverse!")
    };

    // Create a serializer that writes into a Vec<u8>, could be replaced by
    // a file/network stream etc.
    let mut serializer = Serializer::new(Vec::new(), 0).unwrap();
    
    // Serialize the example struct into the serializer.
    example.serialize(&mut serializer).unwrap();

    // Get back the Vec<u8>.
    let data = serializer.finish();
    
    // The length of the data is pretty predictable:
    assert_eq!(data.len(), 
        4    // bytes for revision so the data can be read in future versions
        + 4  // a: i32
        + 4  // b: f32
        + 1  // length of the following string
             // (saved using VarInt, can be changed to a constant byte size)
        // the bytes of the string:
        + "Hello binverse!".len()
    );

    // Create a deserializer to recreate the Example instance using the data.
    let mut deserializer = Deserializer::new(data.as_slice()).unwrap();

    // Deserialize the struct. 
    let example_deserialized: Example = deserializer.deserialize().unwrap();
    
    // Both versions match
    assert_eq!(example, example_deserialized);
}

依赖项

~1.5MB
~36K SLoC