#schema #abstraction-layer #p2p #async #p2panda #aquadoggo

zenode

基于p2panda和graphql的抽象层,以便于在p2panda节点上创建模式和执行操作

4个版本 (2个破坏性更新)

0.3.4 2022年10月20日
0.3.0 2022年10月2日
0.2.0 2022年9月23日
0.1.0 2022年9月21日

#856 in 数据库接口

MITAGPL-3.0-or-later

33KB
745

Zenode

这个项目是什么

该项目通过提供工具,以便于在p2panda节点上执行操作,实现了客户端与p2panda节点之间的抽象层。

开始之前

为了运行此项目,您首先需要安装 aquadoggo

git clone https://github.com/p2panda/aquadoggo.git

RUST_LOG=aquadoggo=info cargo run

Operator 结构是围绕p2panda库和graphql层的包装。

要创建一个新的 Operator,请使用 Operator::default()Operator::new()

Operator::default() 读取 ENDPOINT 环境变量,如果不存在,则使用默认端点 https://127.0.0.1:2020/graphql

运行以下命令以测试 Zenode(aquadoggo必须在后台运行)

cargo test

快速入门

use zenode::{field, Operator};
use zenode::FieldType::*;

// create an Operator
let op = Operator::default();

// create a schema
let id = op.create_schema(
    "POKEMON",
    "Pokemon schema",
    &mut [
        field_def("pokemon_id", Int), // same as field("pokemon_id", "int")
        field_def("pokemon_name", Str),
    ]
).await?;

// generate schema_id
let schema_id = format!("POKEMON_{}", id);

// create an instance
let instance_id = op.create_instance(&schema_id, &mut [
    field("pokemon_id", "1"), field("pokemon_name", "Bulbasaur")
]).await?;

// update the instance
let update_id = op.update_instance(&schema_id, &instance_id, &mut [
    field("pokemon_name", "Charmander")
]).await?;

// finally delete the instance
let _delete_id = op.delete_instance(&schema_id, &update_id).await?;

实验性模式构建器

let op = Operator::default();

let mut puppy_builder = SchemaBuilder::new("puppy", "Puppy schema", &op)
    .field("name", Str)
    .field("cuteness", Int);

puppy_builder.build().await?;

let tiramisu_id = puppy_builder
    .instantiate(&mut [field("name", "Tiramisu"), field("cuteness", "200")])
    .await?;

功能

  • 创建模式
  • 存储字段
  • 存储实例
  • 更新实例
  • 删除实例
  • 从环境变量读取端点
  • 更好的字段到json转换
  • 保存schema_id
  • 将模式名称与schema_id链接
  • 可序列化查询字符串

依赖项

~13–30MB
~452K SLoC