7个不稳定版本 (3个破坏性更新)
0.4.1 | 2024年3月28日 |
---|---|
0.4.0 | 2024年3月26日 |
0.3.2 | 2024年3月14日 |
0.2.0 | 2024年2月23日 |
0.1.0 | 2024年1月25日 |
#315 in 编码
每月1,404次下载
在 14 个crate中使用了 (7 个直接使用)
92KB
2K SLoC
IPLD核心
这个crate提供了与IPLD交互的核心类型。编解码器不是此crate的一部分,它们是独立的,但依赖于ipld-core
。
代码基于libipld-core。主要区别是Serde被大量使用,以更好地与Rust生态系统中的其他部分进行交互。
用法
与编解码器无关的代码
IPLD的一个主要特性是您的编解码器与您正在编码的数据无关。因此,您可能希望您的代码对特定的编解码器独立,而是通用的。
以下是一个可以同时使用serde_ipld_dagcbor
或serde_ipld_dagjson
进行数据编码的函数的完整示例。
use std::str;
use ipld_core::codec::Codec;
use serde::{Deserialize, Serialize};
use serde_ipld_dagcbor::codec::DagCborCodec;
use serde_ipld_dagjson::codec::DagJsonCodec;
#[derive(Deserialize, Serialize)]
struct Tree {
height: u8,
age: u8,
}
fn encode_generic<C, T>(value: &T) -> Result<Vec<u8>, C::Error>
where
C: Codec<T>,
{
C::encode_to_vec(value)
}
fn main() {
let tree = Tree {
height: 12,
age: 91,
};
let cbor_encoded = encode_generic::<DagCborCodec, _>(&tree);
#[allow(clippy::format_collect)]
let cbor_hex = cbor_encoded
.unwrap()
.iter()
.map(|byte| format!("{:02x}", byte))
.collect::<String>();
// CBOR encoded: https://cbor.nemo157.com/#value=a2666865696768740c63616765185b
println!("CBOR encoded: https://cbor.nemo157.com/#value={}", cbor_hex);
let json_encoded = encode_generic::<DagJsonCodec, _>(&tree).unwrap();
// JSON encoded: {"height":12,"age":91}
println!("JSON encoded: {}", str::from_utf8(&json_encoded).unwrap());
}
提取链接
如果您只对编码的IPLD对象的链接(CIDs)感兴趣,则可以直接使用[Codec::links()
]
use ipld_core::{codec::{Codec, Links}, ipld, cid::Cid};
use serde_ipld_dagjson::codec::DagJsonCodec;
fn main() {
let cid = Cid::try_from("bafkreibme22gw2h7y2h7tg2fhqotaqjucnbc24deqo72b6mkl2egezxhvy").unwrap();
let data = ipld!({"some": {"nested": cid}, "or": [cid, cid], "more": true});
let mut encoded = Vec::new();
DagJsonCodec::encode(&mut encoded, &data).unwrap();
let links = DagJsonCodec::links(&encoded).unwrap().collect::<Vec<_>>();
// Extracted links: [Cid(bafkreibme22gw2h7y2h7tg2fhqotaqjucnbc24deqo72b6mkl2egezxhvy), Cid(bafkreibme22gw2h7y2h7tg2fhqotaqjucnbc24deqo72b6mkl2egezxhvy), Cid(bafkreibme22gw2h7y2h7tg2fhqotaqjucnbc24deqo72b6mkl2egezxhvy)]
println!("Extracted links: {:?}", links);
}
功能标志
std
(默认启用):使错误实现std::error::Error
和Codec
trait可用。codec
(默认启用):提供Codec
trait,该trait使得编码和解码与IPLD编解码器无关。通过禁用此功能,可以将最小支持的Rust版本(MSRV)显著降低到1.64。serde
:启用对Ipld
枚举的Serde序列化和反序列化的支持。arb
:启用对基于属性的测试的支持。
许可证
根据以下任一许可证授权:
- Apache License,版本2.0 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可(《LICENSE-MIT》或http://opensource.org/licenses/MIT)
根据您的选择。
依赖项
~1.7–2.4MB
~49K SLoC