#object #binary #sized #vector #entries #different #serialization

bumpy_vector

具有不同大小元素的向量-like 对象

5 个版本

0.0.4 2020 年 7 月 5 日
0.0.3 2020 年 7 月 5 日
0.0.2 2020 年 6 月 29 日
0.0.1 2020 年 5 月 26 日
0.0.0 2020 年 5 月 25 日

#17 in #sized

MIT 许可证

40KB
523

bumpy_vector

Crate

一种向量-like 对象,其中元素可以大于一个项。我们主要用它来表示由一个或多个字节组成的二进制对象。

目标

h2gb 是一种分析二进制文件的工具。重要的是,二进制文件是一系列对象,每个对象占用一定数量的字节。我们需要一种数据类型来表示这种特殊需求,因此就有了 BumpyVector!

用法

使用最大大小实例化,然后像向量一样使用

use bumpy_vector::{BumpyEntry, BumpyVector};

// Instantiate with a maximum size of 100 and a type of String
let mut v: BumpyVector<String> = BumpyVector::new(100);

// Create a 10-byte entry at the start
let entry: BumpyEntry<String> = BumpyEntry {
  entry: String::from("hello"),
  size: 10,
  index: 0,
};

// Insert it into the BumpyVector
assert!(v.insert(entry).is_ok());

// Create another entry, this time from a tuple, that overlaps the first
let entry: BumpyEntry<String> = (String::from("error"), 1, 5).into();
assert!(v.insert(entry).is_err());

// Create an entry that's off the end of the object
let entry: BumpyEntry<String> = (String::from("error"), 1000, 5).into();
assert!(v.insert(entry).is_err());

// There is still one entry in this vector
assert_eq!(1, v.len());

序列化/反序列化

当使用 'serialize' 功能安装时

bumpy_vector = { version = "~0.0.0", features = ["serialize"] }

启用使用 serde 的序列化支持。可以使用 Serde 支持的任何序列化器序列化 BumpyVector,例如 ron

use bumpy_vector::BumpyVector;

// Assumes "serialize" feature is enabled: `bumpy_vector = { features = ["serialize"] }`
fn main() {
    let mut h: BumpyVector<String> = BumpyVector::new(10);
    h.insert((String::from("a"), 1, 2).into()).unwrap();

    // Serialize
    let serialized = ron::ser::to_string(&h).unwrap();

    // Deserialize
    let h: BumpyVector<String> = ron::de::from_str(&serialized).unwrap();
}

许可证: MIT

依赖关系

~0–315KB