unreql

Crates.iounreql
lib.rsunreql
version0.1.8
sourcesrc
created_at2024-01-21 09:18:58.43829
updated_at2024-04-27 18:31:45.79242
descriptionWell documented and easy to use RethinkDB Rust Driver
homepage
repositoryhttps://github.com/vettich/un-rethinkdb-rs.git
max_upload_size
id1107462
size382,205
(vettich)

documentation

https://docs.rs/unreql

README

Unofficial RethinkDB Driver for Rust

Well documented and easy to use

github crates.io docs.rs

Motivation

The official driver is difficult to support, awkward to use, and has little to no documentation or examples. Therefore, an attempt was made by me to remedy these shortcomings

Install

$ cargo add unreql

or

[dependencies]
unreql = "0.1.8"

Import

use unreql::r;

Connect

let conn = r.connect(()).await?;

Get data

Get by ID

let user: User = r.table("users").get(1).exec(&conn).await?;

Get all data

let users: Vec<User> = r.table("users").exec_to_vec(&conn).await?;

or

let mut cur = r.table("users").run(&conn);
let mut users: Vec<User> = vec![];
while let Ok(Some(user)) = cur.try_next().await? {
    users.push(user);
}

Update data

Use a nested reql query

r.table("users")
  .get(1)
  .update(rjson!({
    "name": "John",
    "upd_count": r.row().g("upd_count").add(1),
  }))
  .run(&conn);

Use connection pool

Implemented session manager for async deadpool

use unreql::{r, cmd::connect};
use unreql_deadpool::{IntoPoolWrapper, SessionManager};
use deadpool::managed::Pool;

// config to connect to rethinkdb
let config = connect::Options::default();
// new session manager
let manager = SessionManager::new(config);
// create a pool that is wrapped for ease of use (to be able to be passed to `.run(&pool)`)
let pool = Pool::builder(manager).max_size(20).build().unwrap().wrapper();

// now you can to pass `pool` to `.run()` and `.exec()`
let user: User = r.table("users").get(1).exec(&pool).await?;
Commit count: 34

cargo fmt