https://github.com/wolf4ood/orientdb-rs
A Rust client for OrientDB
https://github.com/wolf4ood/orientdb-rs
graph orientdb rust
Last synced: 9 months ago
JSON representation
A Rust client for OrientDB
- Host: GitHub
- URL: https://github.com/wolf4ood/orientdb-rs
- Owner: wolf4ood
- License: apache-2.0
- Created: 2019-08-01T20:58:50.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2024-10-25T07:27:56.000Z (over 1 year ago)
- Last Synced: 2025-09-27T19:36:06.636Z (9 months ago)
- Topics: graph, orientdb, rust
- Language: Rust
- Homepage:
- Size: 189 KB
- Stars: 17
- Watchers: 2
- Forks: 4
- Open Issues: 8
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
orientdb-rs
A Rust Client for OrientDB
## OrientDB Client
A Rust Client for OrientDB. Supports sync and async (tokio and async-std)
### Installation
Install from [crates.io](https://crates.io/)
```toml
[dependencies]
orientdb-client = "*"
```
### Cargo Features
- `async-std-runtime`: use the async APIs with `async-std`.
- `tokio-runtime`: use the async APIs with `tokio`.
- `uuid`: Add support for UUID.
- `sugar`: Add ergonimic APIs for querying and binding results to structs
### Example
#### Basic Usage Synchronous
```rust
use orientdb_client::{OrientDB};
fn main() -> Result<(), Box> {
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(())
}
```
#### Basic Usage Asynchronous
For [async-std](https://async.rs/)
activate the feature `async-std-runtime`
`orientdb-client = { version = "*", features = ["async-std-runtime"] }`
```rust
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(())
})
}
```
For [tokio](https://tokio.rs/)
activate the feature `tokio-runtime`
`orientdb-client = { version = "*", features = ["tokio-runtime"] }`
```rust
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(())
}
```
### Additional Features
#### `sugar` feature
The `sugar` feature add 3 methods to the query builder for spawning the query.
- `fetch_one`
- `fetch`
- `stream` for async or `iter` for sync
They should be used instead of `run` APIs when you want to execute the query and map the `OResult` into a struct.
The `sugar` is supported in sync and async mode.
**fetch_one**
Consume the stream and fetch the first result if any.
```rust
use orientdb_client::derive::FromResult;
#[derive(FromResult, Debug)]
struct User {
name: String,
}
// fetch one
let user: Option = session
.query("select from OUser limit 1")
.fetch_one()
.await?;
println!("User {:?}", user);`
```
**fetch**
Collect the stream to a `Vec` and map to struct.
```rust
use orientdb_client::derive::FromResult;
#[derive(FromResult, Debug)]
struct User {
name: String,
}
// fetch
let user: Vec = session
.query("select from OUser limit 1")
.fetch()
.await?;
println!("Users {:?}", user);`
```
**stream**
Map each item of the stream to a struct.
```rust
use orientdb_client::derive::FromResult;
#[derive(FromResult, Debug)]
struct User {
name: String,
}
// fetch stream and collect
let stream = session
.query("select from OUser")
.stream::()
.await?
.collect::>()
.await;
println!("Users {:?}", user);
```
### Development
#### Compiling
```
git clone https://github.com/wolf4ood/orientdb-rs.git
cd orientdb-rs
cargo build
```
#### Running Tests
You can use docker-compose to start an instance for testing. Use the env variable `ORIENTDB_SERVER`
in order to specify the version of OrientDB
```
cd docker-compose
export ORIENTDB_SERVER=3.0.23
docker-compose up -d
cd ..
cargo test
```