#算术编码 #无损 #编码

nightly minnow

一个用于使用算术编码对结构体进行极其紧凑编码的库和推导宏

1 个不稳定版本

0.1.0 2022年8月6日

#698压缩

GPL-3.0 许可证

24KB
573 代码行

Minnow

Minnow是一个库,用于使用算术编码将对象序列化为极其紧凑的二进制表示形式。

Minnow是一个推导宏和便捷层,基于算术编码库。

use minnow::Encodeable;

#[derive(Debug, Encodeable, PartialEq)]
pub struct NavigationReport {
    #[encode(float(min = -10_000.0, max = 10_000.0, precision = 1))]
    pub x: f64,
    #[encode(float(min = -10_000.0, max = 10_000.0, precision = 1))]
    pub y: f64,
    #[encode(float(min = -5_000.0, max = 0.0, precision = 0))]
    pub z: f64,
    pub vehicle_class: Option<VehicleClass>,
    pub battery_ok: Option<bool>,
}

#[derive(Debug, Encodeable, PartialEq)]
pub enum VehicleClass {
    Auv,
    Usv,
    Ship,
}

let input = NavigationReport {
    x: 450.0,
    y: 550.0,
    z: -100.0,
    vehicle_class: Some(VehicleClass::Auv),
    battery_ok: Some(true),
};

let compressed = input.encode_bytes().unwrap();
let output = NavigationReport::decode_bytes(&compressed).unwrap();

assert_eq!(input, output);

Minnow最初构思为一个用于创建水下声学通信紧凑消息的库。它受到了动态紧凑控制语言(DCCL)的极大启发。

许可

本项目在GNU通用公共许可证v3.0下公开发布。通过商业协议,本项目可选择性在MIT许可下分发。

依赖关系

~1.1–1.7MB
~30K SLoC