#struct #algorithm

nightly comprez_macro

与 comprez 一起犯罪,这是一个用于压缩结构和枚举的库

6 个版本

0.2.7 2022年9月28日
0.2.6 2022年9月26日
0.1.1 2022年9月1日

#600 in 压缩

MIT/Apache

21KB
319

Rust 结构和枚举压缩库。

一个用于压缩和解压缩结构的 Rust 库。注意,这个库仍在积极开发中,可能会发生破坏性更改。

描述

该库尚未完成,目前仅支持具有无符号整数字段的结构的压缩。更多功能将陆续推出。敬请期待。

安装

将以下内容放入您的 cargo.toml 文件中

[dependencies]
comprez_macro = 0.2.7
comprez = 0.2.7

示例

use comprez_macro::Comprezable;
use comprez::comprezable::Comprezable;   

#[derive(Comprezable, Debug, Clone)]
struct MyStruct {
    [#maxNum=10000] //Compulsory for each integer field except for u8
    num1: u32,
    [#maxNum=888]
    num2: u16,
    [#maxNum=100]
    num3: i8, //use i8 instead of u8
    other_struct: OtherStruct,
    vec1: Vec<u8>,
    vec2: Vec<OtherStruct>,
    enum1: MyEnum::Num5(10)
}

#[derive(Comprezable, Debug, Clone)]
struct OtherStruct {
    #[maxNum=1000000]
    num4: u128,
}

#[derive(Comprezable, Debug, Clone)]
enum MyEnum {
    #[maxNum=100]
    Num5(u32),
    Vec3(Vec<u8>)
}

fn main() {
    let demo_data = Mystruct {
        num1: 900,
        num2: 100,
        num3: 10,
        other_struct: OtherStruct { num4: 200 },
        vec1: vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
        vec2: vec![OtherStruct{num4: 100}, OtherStruct{num4: 200}],
    };
    
    let compressed = demo_data.compress().unwrap();
    let compressed_bytes = compressed.to_bytes();
    let compressed_binaries = compressed.to_binaries();

    let compressed = Compressed::from_bytes(compressed_bytes);
    let compressed = Compressed::from_binaries(compressed_binaries);
    let decompressed = Mystruct::decompressed(compressed).unwrap();
    println!("{:?}", decompressed);
}

性能

待办事项!

特性

  • 无符号
  • 有符号
  • Vec::u8
  • 可压缩项的 Vec
  • 枚举
  • 异步读写
  • 偶数
  • 字符串
  • 切片和向量

鸣谢

  • u8 向量使用 LZ4 flex 库进行压缩。

要来杯咖啡吗?

"Buy Me A Coffee"

依赖项

~1.5MB
~35K SLoC