4 个版本
0.0.2-alpha.6 | 2024年3月21日 |
---|---|
0.0.2-alpha.3 | 2024年3月20日 |
0.0.2-alpha.2 | 2024年1月30日 |
#2201 in 魔法豆
2,943 每月下载量
用于 2 个crate(通过 dotrain)
155KB
3.5K SLoC
Rain 元数据工具
一个库,提供了与 RainLanguage 元数据一起工作的所有工具和实用工具。Dotrain LSP/compiler、Rain Orderbook 等,都是一些使用此库的例子。
还提供了 CLI 应用程序(可执行二进制文件),根据 元数据规范 生成所需的 Rain cbor 编码元数据,这些规范例如用于 Rain 部署 CI。
特性
cli
和 json-schema
特性是默认的,然而,在大多数情况下,不需要这些特性来使用库 crate,因此可以通过使用 default-features = false
来禁用它们,只是要注意,cli
特性是构建二进制文件所必需的。
cli
:一个基于 clap 的 CLI crate,用于此库的功能,此特性具有与wasm
家族目标构建兼容的 tokio 依赖项。启用此特性也会启用json-schema
特性,此特性是构建二进制 crate 所必需的。json-schema
:启用不同类型 Rain 元的 Json Schema 实现。tokio-full
:安装tokio,包含全部功能,这是cli
功能的依赖项,这允许CLI应用程序的多线程,但是正如tokio文档中所述,这会导致wasm
目标家族的构建错误,这个功能只对二进制crate有效,如果将其用于lib crate,则只会将tokio及其全部功能作为依赖项安装,因为整个lib crate并不依赖于tokio。这是因为tokio只用作二进制crate的运行时。
CLI(二进制crate)
Tooling and utilities for RainLanguage metadata.
Usage: rain-metadata <COMMAND>
Commands:
schema command related to meta json schema
validate command for validating a meta
magic command related to rain magic numbers
build command for building rain meta
solc command related to solc artifacts
subgraph command related to subgraphs
help Print this message or the help of the given subcommand(s)
Options:
-h, --help Print help
-V, --version Print version
示例
编码/解码
创建元项并进行cbor编码/解码
let authoring_meta_content = r#"[
{
"word": "stack",
"description": "Copies an existing value from the stack.",
"operandParserOffset": 16
},
{
"word": "constant",
"description": "Copies a constant value onto the stack.",
"operandParserOffset": 16
}
]"#;
let authoring_meta: AuthoringMeta = serde_json::from_str(authoring_meta_content)?;
// abi encode the authoring meta with performing validation
let authoring_meta_abi_encoded = authoring_meta.abi_encode_validate()?;
// Constructing a RainMeta item (cbor map)
let meta_map = RainMetaDocumentV1Item {
payload: serde_bytes::ByteBuf::from(authoring_meta_abi_encoded),
magic: KnownMagic::AuthoringMetaV1,
content_type: ContentType::Cbor,
content_encoding: ContentEncoding::None,
content_language: ContentLanguage::None,
};
// cbor encode the meta item
let cbor_encoded = meta_map.cbor_encode()?;
// decode the data back
let cbor_decoded_vec = RainMetaDocumentV1Item::cbor_decode(&cbor_encoded)?;
// unpack the payload into AuthoringMeta
let unpacked_payload: AuthoringMeta = cbor_decoded_vec[0].unpack_into()?;
元存储(CAS)
Store
是一个结构体,提供存储、读取、远程获取Rain元数据和ExpressionDeployers作为内容寻址存储(CAS)的功能,这是dotrain语言服务器协议和编译器实现的关键部分,通过缓存所有在.rain文件中导入的内容,这些内容可以被语言服务器和编译器轻松访问。
use rain_meta::meta::Store;
use std::collections::HashMap;
// to instatiate with default rain subgraphs included
let mut store = Store::default();
// add a new subgraph endpoint url to the subgraph list
store.add_subgraphs(&vec!["subgraph-url"]);
// update the store with another Store (merges the stores)
store.merge(&Store::default());
// hash of a meta to search and store
let hash = "0x56ffc3fc82109c33f1e1544157a70144fc15e7c6e9ae9c65a636fd165b1bc51c";
// updates the meta store with a new meta by searching through subgraphs
store.update(&hash);
// searches for an deployer in the subgraphs and stores the result mapped to the hash
store.search_deployer(&hash);
// to get a record from store
let meta = store.get_meta(&hash);
// to get a ExpressionDeployer record from store
let deployer_record = store.get_deployer(&hash);
// path to a .rain file
let dotrain_uri = "path/to/file.rain";
// reading the dotrain content as an example,
// Store is agnostic to dotrain contents it just maps the hash of the content to the given
// uri and puts it as a new meta into the meta cache, so obtaining and passing the correct
// content is up to the implementer
let dotrain_content = std::fs::read_to_string(&dotrain_uri);
// updates the dotrain cache for a dotrain text and uri
let (new_hash, old_hash) = store.set_dotrain(&dotrain_content, &dotrain_uri, false)?;
// to get dotrain meta bytes given a uri
let dotrain_meta_bytes = store.get_dotrain_meta(&dotrain_uri);
开发者
要从源代码构建,首先克隆此仓库,并确保您已经安装了rustup
,然后您可以使用cargo build
构建lib/binary,如果您已安装nixOS,您可以简单地运行
nix build
来构建二进制crate,或者使用以下命令进入nix
nix develop
这将获取所有必需的包并将它们放入您的路径,然后您可以使用cargo build
构建lib/binary crate。要运行测试,请使用cargo test
,要生成文档,请使用cargo doc
。
依赖项
~14–28MB
~466K SLoC