Crates.io | reduct-rs |
lib.rs | reduct-rs |
version | 1.12.1 |
source | src |
created_at | 2023-08-14 22:03:03.140959 |
updated_at | 2024-10-21 14:50:35.349347 |
description | ReductStore Client SDK for Rust. |
homepage | |
repository | https://github.com/reductstore/reduct-rs |
max_upload_size | |
id | 944523 |
size | 182,846 |
This package provides an HTTP client for interacting with the ReductStore, time-series database for unstructured data.
use bytes::Bytes;
use futures_util::stream::StreamExt;
use reduct_rs::{QuotaType, ReductClient, ReductError};
use std::pin::pin;
use std::time::{Duration, SystemTime};
use tokio;
#[tokio::main]
async fn main() -> Result<(), ReductError> {
// 1. Create a ReductStore client
let client = ReductClient::builder()
.url("http://127.0.0.1:8383")
.api_token("my-token")
.build();
// 2. Get or create a bucket with 1Gb quota
let bucket = client
.create_bucket("my-bucket")
.quota_type(QuotaType::FIFO)
.quota_size(1_000_000_000)
.exist_ok(true)
.send()
.await?;
// 3. Write some data with timestamps in the 'sensor-1' entry
let start = SystemTime::now();
bucket
.write_record("sensor-1")
.data(b"Record #1")
.timestamp(start)
.send()
.await?;
bucket
.write_record("sensor-1")
.data(b"Record #2")
.timestamp(start + Duration::from_secs(1))
.send()
.await?;
// 4. Query the data by time range
let query = bucket
.query("sensor-1")
.start(start)
.stop(start + Duration::from_secs(2))
.send()
.await?;
let mut query = pin!(query);
while let Some(record) = query.next().await {
let record = record?;
println!("Record timestamp: {:?}", record.timestamp());
println!("Record size: {}", record.content_length());
println!("{:?}", record.bytes().await?);
}
// 5. Exit
Ok(())
}
}
For more examples, see the Guides section in the ReductStore documentation.