2 个不稳定版本

0.2.0 2022年12月26日
0.1.0 2022年12月26日

#7 in #cid

Apache-2.0 OR MIT

22KB
388

Ceramic StreamID

License Crates.io

此包包含 Ceramic StreamID 和 CommitID 实现。

实现了 ceramic 规范和 CIP 中定义的 Ceramic 流 IDs,表示为 StreamIdStreamId,以增强 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.

将未知输入解析为适当的 CommitIdStreamId,您可以使用 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