11个版本

0.2.8 2020年1月1日
0.2.7 2020年1月1日
0.2.6 2019年11月15日
0.2.1 2019年9月9日
0.1.2 2018年12月15日

#2491 in 数据库接口

每月 25 次下载

MIT/Apache

1.5MB
5K SLoC

dgraph-rs

Rust的DGraph客户端

支持Dgraph 1.1.x

需要rustc 1.39或更高版本以支持async await。

此客户端处于开发中,不支持DGraph的许多功能,例如身份验证。

创建客户端

fn local_dgraph_client() -> DgraphClient {
    let addr = "localhost";
    let port = 9080;

    let client = api_grpc::DgraphClient::with_client(
        Arc::new(
            Client::new_plain(addr, port, ClientConf {
                ..Default::default()
            }).expect("Failed to initialize client stub")
        )
    );

    DgraphClient::new(vec![client])
}

查询

fn main() {
    let dg = local_dgraph_client();
    let mut txn = dg.new_txn();
    let query_res: Value = txn.query(r#"
        {
          q0(func: has(node_key)) {
            uid
          }
        }
    "#)
        .await
        .map(|res| serde_json::from_slice(&res.json))
        .expect("Dgraph query failed")
        .expect("Json deserialize failed");
}

修改

fn main() {
    let dg = local_dgraph_client();
    
    let mu = api::Mutation {
        set_nquads: br#"
        uid(p) <node_key> "{453120d4-5c9f-43f6-b7af-28b376b3a993}" .
        uid(p) <process_name> "foo.exe" ."#.to_vec(),
        ..Default::default()
    };
    
    let txn = dg.new_txn();
    txn.mutate(mu)
        .await
        .expect("Request to dgraph failed");
}

更新插入

fn main() {
    let dg = local_dgraph_client();
    
    let query = r#"
        {
          p as var(func: eq(node_key, "{453120d4-5c9f-43f6-b7af-28b376b3a993}"))
        }
        "#;
    
    let mu = api::Mutation {
        set_nquads: br#"
        uid(p) <node_key> "{453120d4-5c9f-43f6-b7af-28b376b3a993}" .
        uid(p) <process_name> "foo.exe" ."#.to_vec(),
        ..Default::default()
    };
    
    let txn = dg.new_txn();
    txn.upsert(query, mu)
        .await
        .expect("Request to dgraph failed");
}

运行测试

测试需要本地dgraph服务器,版本1.1.0或更高。

依赖项

~12MB
~206K SLoC