30次发布
新 0.4.1 | 2024年8月12日 |
---|---|
0.3.5 | 2024年4月27日 |
0.3.4 | 2023年12月13日 |
0.3.1 | 2023年8月11日 |
0.1.6 | 2021年9月24日 |
#288 in 编码
2,224 每月下载量
用于 16 个crate (5 个直接)
38KB
875 代码行
serde-BOLT
闪电BOLT消息序列化格式的未完整实现。与rust-bitcoin的Encodable
和Decodable
特性兼容。
与rust-bitcoin不同,默认是大端编码,对于以下类型的长度字段使用u16/u32
- 字节(u16长度字段)
- 数组(u16长度字段)
- 大字节(u32长度字段)
- 忽略大字节(u32长度字段)
Option
实现为一个单字节,None
为0x00
,Some
为0x01
,随后是值。
特定领域的类型尚未实现。您可以使用Array<u8>
或其包装版本,例如[u8; nnn]
。
结构和元组被认为是透明的 - 它们在流中不被分隔。
未实现
- TLVs
用法
use hex::{encode, decode};
extern crate alloc;
use serde_bolt::{to_vec, from_vec, bitcoin::consensus::{Encodable, Decodable}, Array};
use bitcoin_consensus_derive::{Encodable, Decodable};
#[derive(Encodable, Decodable, PartialEq, Debug)]
struct Thing([u8; 3]);
#[derive(Encodable, Decodable, Debug)]
struct Test {
x: bool,
a: u32,
b: u8,
c: Option<u16>,
d: Option<u16>,
e: Array<u8>,
/// Sub-structs are transparent
f: Thing
}
#[test]
fn test_simple() {
let test = Test {
x: true,
a: 65538, b:160, c: None, d: Some(3),
e: vec![0x33, 0x44].into(),
f: Thing([0x55, 0x66, 0x77])
};
let result = to_vec(&test).unwrap();
assert_eq!("0100010002a00001000300023344556677", encode(&result));
let decoded: Test = from_vec(&mut result.clone()).unwrap();
assert_eq!(test.a, decoded.a);
assert_eq!(test.f, decoded.f);
}
依赖项
~8.5MB
~116K SLoC