#序列化 #反序列化 #MessagePack #数据文件 #rmp

rmp_fs

一个小的库,帮助将rmp(RustMessagePack)序列化和反序列化到文件中。

7个版本 (稳定版)

1.0.4 2023年1月2日
1.0.3 2022年2月3日
1.0.2 2022年1月1日
0.2.3 2021年4月4日
0.1.0 2020年2月16日

#267 in 文件系统

MIT 许可证

12KB
158

Licence Version dependency status Download

README

rmp_fs

一个小的库,帮助将rmp(RustMessagePack)序列化和反序列化到文件中。它没有做特别的事情,只是将rmp_serde封装成可以重复使用的函数。

示例

#[macro_use]
extern crate serde_derive;

use rmp_fs::{save_to_rmp, load_from_rmp};
use std::path::Path;

// Define a struct of data
#[derive(Debug, PartialEq, Deserialize, Serialize)]
struct ExampleData {
    value: i64,
    message: String,
}

fn main() {
    let file_name = Path::new("test_rmp_fs.blob");

    let data = ExampleData {
        value: -123456,
        message: "Example rmp_fs".to_string()
    };

    // Save to a file it return Result<(), Box<dyn Error>>
    save_to_rmp(file_name, &data).expect("Fail to save as rmp.");

    // Load from a file it return Result<T, Box<dyn Error>>
    let data2: ExampleData =load_from_rmp(file_name).expect("Fail to load from rmp.");
    println!("{:?}\n{:?}",data,data2);
}

注意

根据我的测试,下面的结构体使用rmp的大小为248字节,使用cbor的大小为389字节。

#[derive(Debug, PartialEq, Deserialize, Serialize)]
    struct StructTest01 {
        text : String,
        value1 : u16,
        value2 : i32,
        value3 : u8,
        value4 : i16,
        value5 : u32,
        value6 : u64,
        value7 : i64,
        value8 : usize,
        value9 : f32,
        value10 : f64,
        array : Vec<u8>,
        tuple : (DateTime<Utc>,u64),
        complex : StructTest02,
    }

    #[derive(Debug, PartialEq, Deserialize, Serialize)]
    struct StructTest02 {
        data_v : Vec<i16>,
        data_m : HashMap<String,String>,
        state : bool,
    }

依赖项

~0.8–1.4MB
~31K SLoC