#二进制编码 #borsh #表示 #哈希 #项目 #一致性 #安全性

不使用std 程序+库 血清-borsh

用于哈希的二进制对象表示序列化器

2个版本

0.8.1-serum.12021年1月31日
0.8.0-serum.12021年1月15日
0.7.2+serum.2 2021年1月15日

#2060编码

Download history • Rust 包仓库 457/week @ 2024-03-14 • Rust 包仓库 243/week @ 2024-03-21 • Rust 包仓库 352/week @ 2024-03-28 • Rust 包仓库 163/week @ 2024-04-04 • Rust 包仓库 175/week @ 2024-04-11 • Rust 包仓库 259/week @ 2024-04-18 • Rust 包仓库 190/week @ 2024-04-25 • Rust 包仓库 169/week @ 2024-05-02 • Rust 包仓库 295/week @ 2024-05-09 • Rust 包仓库 297/week @ 2024-05-16 • Rust 包仓库 218/week @ 2024-05-23 • Rust 包仓库 207/week @ 2024-05-30 • Rust 包仓库 236/week @ 2024-06-06 • Rust 包仓库 207/week @ 2024-06-13 • Rust 包仓库 203/week @ 2024-06-20 • Rust 包仓库 127/week @ 2024-06-27 • Rust 包仓库

797 每月下载
用于 3 个crates(2 个直接使用)

MIT/Apache

98KB
2K SLoC

Borsh在Rust中   构建状态 最新版本 borsh: rustc 1.40+ 许可证 Apache-2.0徽章 许可证 MIT徽章

borsh-rsBorsh 二进制序列化格式的Rust实现。

Borsh代表 用于哈希的二进制对象表示序列化器。它旨在用于安全关键型项目,因为它优先考虑 一致性、安全性、速度,并提供了一个严格的 规范

示例

use borsh::{BorshSerialize, BorshDeserialize};

#[derive(BorshSerialize, BorshDeserialize, PartialEq, Debug)]
struct A {
    x: u64,
    y: String,
}

#[test]
fn test_simple_struct() {
    let a = A {
        x: 3301,
        y: "liber primus".to_string(),
    };
    let encoded_a = a.try_to_vec().unwrap();
    let decoded_a = A::try_from_slice(&encoded_a).unwrap();
    assert_eq!(a, decoded_a);
}

功能

选择不使用Serde允许borsh拥有一些目前对于Serde兼容序列化器不可用的功能。目前我们支持两个功能: borsh_initborsh_skip(前者在Serde中不可用)。

borsh_init 允许在反序列化后自动运行一个初始化函数。这对于设计为严格不可变的对象来说增加了许多便利。使用示例

#[derive(BorshSerialize, BorshDeserialize)]
#[borsh_init(init)]
struct Message {
    message: String,
    timestamp: u64,
    public_key: CryptoKey,
    signature: CryptoSignature
    hash: CryptoHash
}

impl Message {
    pub fn init(&mut self) {
        self.hash = CryptoHash::new().write_string(self.message).write_u64(self.timestamp);
        self.signature.verify(self.hash, self.public_key);
    }
}

borsh_skip 允许跳过序列化/反序列化字段,前提是它们实现了 Default 特性,类似于 #[serde(skip)].

#[derive(BorshSerialize, BorshDeserialize)]
struct A {
    x: u64,
    #[borsh_skip]
    y: f32,
}

发布

在您将更改合并到主分支并升级所有三个crates的版本后,是时候正式发布新版本了。

确保 borshborsh-deriveborsh-derive-internalborsh-schema-derive-internal 都具有新的crate版本。然后运行 publish.sh 脚本

sh publish.sh

确保您位于主分支上,然后对代码进行标记并推送标记

git tag -a v9.9.9 -m "My superawesome change."
git push origin v9.9.9

许可证

本仓库根据MIT许可证和Apache许可证(版本2.0)的条款进行分发。有关详细信息,请参阅LICENSE-MITLICENSE-APACHE

依赖项

~17–26MB
~433K SLoC