rqlite-rs is a Rust client for rqlite, the distributed relational database built on SQLite, providing an async interface for seamless integration with Rust's async ecosystems. Utilizing reqwest for efficient connection management, it offers a Rustic, high-level API for easy and efficient interaction with rqlite clusters.
- Asynchronous Interface: Fully async, compatible with Tokio, async-std, and smol.
- Connection Pooling: Efficient management of connections to the rqlite cluster.
- High-Level API: Simplifies interactions with the rqlite API.
- Resilience: Automatic failover to a secondary node on connectivity issues.
- Cluster Management: Full control over the cluster with node query and management features.
Add to your Cargo.toml
:
[dependencies]
...
+ rqlite-rs = "0.4.0"
Ensure you have a running rqlite cluster. Replace localhost:4001
and localhost:4002
with your node addresses:
use rqlite_rs::prelude::*;
#[derive(FromRow)]
pub struct Table {
name: String,
}
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let client = RqliteClientBuilder::new()
.known_host("localhost:4001")
.build()?;
let query = rqlite_rs::query!(
"SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%'"
)?;
let rows = client.fetch(query).await?;
let tables = rows.into_typed::<Table>()?;
for table in tables {
println!("Table: {}", table.name);
}
Ok(())
}
The client supports automatic failover, attempting to connect to the next known node if a connection error or timeout occurs, ensuring high availability.
For detailed API documentation and advanced usage, visit rqlite-rs documentation.
Contributions are welcome!
rqlite-rs is licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.