Crate infinispan[][src]

Expand description

infinispan-rs is a Rust client for the Infinispan REST API.

Basic operation

use infinispan::Infinispan;
use infinispan::errors::InfinispanError;
use infinispan::request;

#[tokio::main]
async fn main() {
    // Create a client
    let client = Infinispan::new("http://localhost:11222", "username", "password");

    // Create a cache
    let req = request::caches::create_local("some_cache");
    let _ = client.run(&req).await.unwrap();

    // Create an entry
    let req = request::entries::create("some_cache", "some_entry").with_value("a_value".into());
    let _ = client.run(&req).await.unwrap();

    // Read the entry
    let req = request::entries::get("some_cache", "some_entry");
    let resp = client.run(&req).await.unwrap();

    // resp is an instance of `reqwest::Response`
    assert!(resp.status().is_success());
    assert_eq!("a_value", resp.text_with_charset("utf-8").await.unwrap());
}

infinispan-rs supports requests to manage Caches, Entries, and Counters, but for now, it only implements a reduced subset of the REST API. Here are some examples:

Caches

use infinispan::Infinispan;
use infinispan::request;

#[tokio::main]
async fn main() {
    let client = Infinispan::new("http://localhost:11222", "username", "password");

    // Create a cache
    let req = request::caches::create_local("some_cache");
    let _ = client.run(&req).await.unwrap();

    // Delete a cache
    let req = request::caches::delete("some_cache");
    let _ = client.run(&req).await.unwrap();
}

Entries

use infinispan::Infinispan;
use infinispan::request;
use std::time::Duration;
use http::StatusCode;

#[tokio::main]
async fn main() {
    let client = Infinispan::new("http://localhost:11222", "username", "password");

    // Create a cache
    let req = request::caches::create_local("some_cache");
    let _ = client.run(&req).await.unwrap();

    // Create an entry
    let req = request::entries::create("some_cache", "some_entry").with_value("a_value".into());
    let _ = client.run(&req).await.unwrap();

    // Create an entry with a value and TTL
    let req = request::entries::create("some_cache", "some_entry_with_ttl")
        .with_value("a_value".into()).with_ttl(Duration::from_secs(5));
    let _ = client.run(&req).await.unwrap();

    // Check if an entry exists
    let req = request::entries::exists("some_cache", "some_entry");
    let resp = client.run(&req).await.unwrap();
    assert!(resp.status().is_success());

    let req = request::entries::exists("some_cache", "non_existing");
    let resp = client.run(&req).await.unwrap();
    assert_eq!(StatusCode::NOT_FOUND, resp.status());

    // Update an entry
    let req = request::entries::update("some_cache", "some_entry", "new_val");
    let _ = client.run(&req).await.unwrap();

    // Delete an entry
    let req = request::entries::delete("some_cache", "some_entry");
    let _ = client.run(&req).await.unwrap();
}

Counters

use infinispan::Infinispan;
use infinispan::request;

#[tokio::main]
async fn main() {
    let client = Infinispan::new("http://localhost:11222", "username", "password");

    // Create a weak counter
    let req = request::counters::create_weak("some_counter").with_value(100);
    let _ = client.run(&req).await.unwrap();

    // Increment a counter
    let req = request::counters::increment("some_counter");
    let _ = client.run(&req).await.unwrap();

    // Increment a counter by a given delta
    let req = request::counters::increment("some_counter").by(10);
    let _ = client.run(&req).await.unwrap();

    // Delete a counter
    let req = request::counters::delete("some_counter");
    let _ = client.run(&req).await.unwrap();

    // Create a strong counter
    let req = request::counters::create_strong("some_strong_counter");
    let _ = client.run(&req).await.unwrap();
}

Modules

Structs