#graph #macro #orientdb

orientdb-macro

OrientDB Rust客户端的宏。请勿直接使用

2个不稳定版本

0.2.0 2020年6月22日
0.1.0 2020年6月5日

#7 in #graphs


orientdb-client中使用

Apache-2.0

4KB

orientdb-rs

OrientDB的Rust客户端

OrientDB客户端

OrientDB的Rust客户端。支持同步和异步(tokio和async-std)

安装

crates.io安装

[dependencies]
orientdb-client = "*"

Cargo功能

  • async-std-runtime:使用async-std的异步API。
  • tokio-runtime:使用tokio的异步API。
  • uuid:添加UUID支持。
  • sugar:添加用于查询和将结果绑定到结构的简洁API。

示例

基本用法(同步)


use orientdb_client::{OrientDB};

fn main() -> Result<(), Box<std::error::Error>> {
    let client = OrientDB::connect(("localhost",2424))?;

    let session = client.session("demodb","admin","admin")?;

    let results : Vec<_> = session.query("select from V where id = :param").named(&[("param", &1)]).run()?.collect();


    println!("{:?}", results);

    Ok(())
}

基本用法(异步)

对于async-std

激活功能async-std-runtime

orientdb-client= {version= "*",features= ["async-std-runtime"] }

use async_std::task::block_on;
use futures::StreamExt;
use orientdb_client::aio::OrientDB;
use orientdb_client::OrientResult;

fn main() -> OrientResult<()> {
    block_on(async {
        let client = OrientDB::connect(("localhost", 2424)).await?;

        let session = client.session("demodb", "admin", "admin").await?;

        let mut stream = session.query("select from V limit 10").run().await?;

        while let Some(item) = stream.next().await {
            println!("Record {:?}", item?);
        }

        Ok(())
    })
}

对于tokio

激活功能tokio-runtime

orientdb-client= {version= "*",features= ["tokio-runtime"] }

use futures::StreamExt;
use orientdb_client::aio::OrientDB;
use orientdb_client::OrientResult;

#[tokio::main]
async fn main() -> OrientResult<()> {
    let client = OrientDB::connect(("localhost", 2424)).await?;

    let session = client.session("demodb", "admin", "admin").await?;

    let mut stream = session.query("select from V limit 10").run().await?;

    while let Some(item) = stream.next().await {
        println!("Record {:?}", item?);
    }

    Ok(())
}

附加功能

sugar功能

sugar功能为查询构建器添加了3个用于启动查询的方法。

  • fetch_one
  • fetch
  • stream用于异步或iter用于同步

当您想执行查询并将OResult映射到结构时,应使用它们而不是run API。

sugar支持同步和异步模式。

fetch_one

消耗流并获取第一个结果(如果有的话)。

use orientdb_client::derive::FromResult;
#[derive(FromResult, Debug)]
struct User {
    name: String,
}

// fetch one
let user: Option<User> = session
    .query("select from OUser limit 1")
    .fetch_one()
    .await?;

println!("User {:?}", user);`

fetch

将流收集到Vec中并将其映射到结构。

use orientdb_client::derive::FromResult;
#[derive(FromResult, Debug)]
struct User {
    name: String,
}

// fetch 
let user: Vec<User> = session
    .query("select from OUser limit 1")
    .fetch()
    .await?;

println!("Users {:?}", user);`

stream

将流中的每个项映射到结构。

use orientdb_client::derive::FromResult;
#[derive(FromResult, Debug)]
struct User {
    name: String,
}

// fetch stream and collect
let stream = session
            .query("select from OUser")
            .stream::<User>()
            .await?
            .collect::<Vec<_>>()
            .await;
println!("Users {:?}", user);

开发

编译

git clone https://github.com/wolf4ood/orientdb-rs.git
cd orientdb-rs
cargo build

运行测试

您可以使用docker-compose启动一个用于测试的实例。使用环境变量ORIENTDB_SERVER来指定OrientDB的版本

cd docker-compose
export ORIENTDB_SERVER=3.0.23
docker-compose up -d
cd ..
cargo test

依赖项

~1.5MB
~35K SLoC