20 stable releases

1.12.1 Oct 21, 2024
1.11.0 Aug 19, 2024
1.10.1 Jun 11, 2024
1.9.5 Mar 30, 2024
1.7.3 Nov 8, 2023

#861 in Database interfaces

Download history 16/week @ 2024-07-20 53/week @ 2024-07-27 86/week @ 2024-08-03 35/week @ 2024-08-10 225/week @ 2024-08-17 26/week @ 2024-08-24 17/week @ 2024-08-31 30/week @ 2024-09-07 22/week @ 2024-09-14 84/week @ 2024-09-21 192/week @ 2024-09-28 235/week @ 2024-10-05 227/week @ 2024-10-12 352/week @ 2024-10-19 224/week @ 2024-10-26 274/week @ 2024-11-02

1,083 downloads per month
Used in reduct-cli

MPL-2.0 license

120KB
2.5K SLoC

ReductStore Client SDK for Rust

Crates.io Docs.rs GitHub Workflow Status

This package provides an HTTP client for interacting with the ReductStore, time-series database for unstructured data.

Features

Example

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.

Dependencies

~17–29MB
~528K SLoC