2 个不稳定版本
0.2.0 | 2022年12月26日 |
---|---|
0.1.0 | 2022年12月26日 |
#7 in #cid
22KB
388 行
Ceramic StreamID
此包包含 Ceramic StreamID 和 CommitID 实现。
实现了 ceramic 规范和 CIP 中定义的 Ceramic 流 IDs,表示为 StreamId
和 StreamId
,以增强 API 的清晰度。
StreamId
代表整个流的引用,因此不包含提交信息。
CommitId
代表流演变中的特定提交的引用。
<streamid> ::= <multibase-prefix><multicodec-streamid><type><genesis-cid-bytes>
或包括 StreamId
提交
<streamid> ::= <multibase-prefix><multicodec-streamid><type><genesis-cid-bytes><commit-cid-bytes>
入门指南
安装
$ cargo add streamid
使用方法
有关如何使用此包的更多详细信息,请参阅 ceramic 开发者网站。
要引用整个流,请使用 StreamId
。您可以从部分创建实例。需要流类型字符串或整数以及 CID 实例或字符串。
use std::str::FromStr;
use cid::Cid;
use streamid::*;
const CID_STRING: &str = "bagcqcerakszw2vsovxznyp5gfnpdj4cqm2xiv76yd24wkjewhhykovorwo6a";
const STREAM_ID_STRING: &str = "kjzl6cwe1jw147dvq16zluojmraqvwdmbh61dx9e0c59i344lcrsgqfohexp60s";
let stream_id = StreamId::from_str(STREAM_ID_STRING).unwrap();
assert_eq!(stream_id.stream_type(), StreamType::Tile);
assert_eq!(stream_id.stream_type().to_string(), "tile");
assert_eq!(stream_id.cid().to_string(), CID_STRING);
assert_eq!(stream_id.to_string(), STREAM_ID_STRING);
assert_eq!(stream_id.to_url(), format!("ceramic://{STREAM_ID_STRING}"));
您还可以从 StreamId
字符串或字节创建 StreamId
实例。
use std::str::FromStr;
use streamid::*;
const STREAM_ID_STRING: &str = "kjzl6cwe1jw147dvq16zluojmraqvwdmbh61dx9e0c59i344lcrsgqfohexp60s";
let stream_id = StreamId::from_str(STREAM_ID_STRING).unwrap();
use streamid::*;
let stream_id = StreamId::from_slice(vec![]).unwrap();
要引用流演变中的特定点,请使用 CommitId
。除了流类型 (StreamType
) 和创世引用 ([Cid
]),还应提供一个提交引用 ([Cid
])。如果您传递 None
,这将引用创世提交。
use std::str::FromStr;
use streamid::*;
const BASE_CID_STRING: &str = "bagcqcerakszw2vsovxznyp5gfnpdj4cqm2xiv76yd24wkjewhhykovorwo6a";
const COMMIT_CID_STRING: &str = "bagjqcgzaday6dzalvmy5ady2m5a5legq5zrbsnlxfc2bfxej532ds7htpova";
const COMMIT_ID_STRING: &str =
"k1dpgaqe3i64kjqcp801r3sn7ysi5i0k7nxvs7j351s7kewfzr3l7mdxnj7szwo4kr9mn2qki5nnj0cv836ythy1t1gya9s25cn1nexst3jxi5o3h6qprfyju";
let commit_id = CommitId::from_str(COMMIT_ID_STRING).unwrap();
assert_eq!(commit_id.stream_type(), StreamType::Tile);
assert_eq!(commit_id.stream_type().to_string(), "tile");
assert_eq!(commit_id.cid().to_string(), BASE_CID_STRING);
assert_eq!(commit_id.commit().to_string(), COMMIT_CID_STRING);
assert_eq!(commit_id.to_string(), COMMIT_ID_STRING);
assert_eq!(commit_id.to_url(), format!("ceramic://{COMMIT_ID_STRING}"));
要引用 StreamId
的特定 CID 或更改 CommitId
中的提交引用,请使用 StreamRefExt::at_commit
方法
use streamid::StreamRefExt;
commit_id.at_commit("bagcqcerakszw2vsov..."); // #=> new CommitId for the same stream
stream_id.at_commit("bagcqcerakszw2vsov..."); // #=> new CommitId for the same stream
CommitId
(StreamId
也用于兼容性) 可以通过 StreamRefExt::to_base_id
获取基本 StreamId
use streamid::StreamRefExt;
commit_id.to_base_id(); // #=> StreamID reference to the stream
stream_id.to_base_id(); // #=> new StreamID reference to the same stream, effectively a shallow clone.
将未知输入解析为适当的 CommitId
或 StreamId
,您可以使用 StreamRef::from_str
use std::str::FromStr;
use streamid::StreamRef;
let input = "bagcqcerakszw2vsov...";
let stream_id_or_commit_id = StreamRef::from_str(input).unwrap();
开发
运行测试
cargo test
运行代码检查器
cargo clippy
cargo fmt
贡献
我们乐于接受大小不同的贡献。请查阅Ceramic规范了解协议的详细工作方式。
许可证
MIT或Apache-2.0
依赖项
约4.5-6MB
约112K SLoC