2个版本
0.8.1-serum.1 | 2021年1月31日 |
---|---|
0.8.0-serum.1 | 2021年1月15日 |
0.7.2+serum.2 |
|
#2060 在 编码
797 每月下载
用于 3 个crates(2 个直接使用)
98KB
2K SLoC
Borsh在Rust中

borsh-rs 是 Borsh 二进制序列化格式的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_init
和 borsh_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的版本后,是时候正式发布新版本了。
确保 borsh
、borsh-derive
、borsh-derive-internal
和 borsh-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-MIT和LICENSE-APACHE。
依赖项
~17–26MB
~433K SLoC