3 releases

0.1.2 Jul 31, 2024
0.1.1 Jul 23, 2024
0.1.0 Jul 23, 2024

#643 in Asynchronous

Download history 15/week @ 2024-09-10 7/week @ 2024-09-17 17/week @ 2024-09-24 18/week @ 2024-10-01

113 downloads per month

MIT license

34KB
767 lines

Zookeeper-cache-rust

crates.io docs.rs mit-license

Zookeeper-cache-rust is a asynchronous, pure rust implementation of ZooKeeper client cache, which provides a easy to watch the nodes' status of zookeeper.

Usage

cargo add zookeeper-cache

Example

Cache will watch root node and it's children nodes recursively.

use futures::StreamExt;
use zookeeper_cache::CacheBuilder;
#[tokio::main]
async fn main() -> zookeeper_cache::Result<()> {
    let (cache, mut stream) = CacheBuilder::default().build("localhost:2181").await?;
    tokio::spawn(async move {
        while let Some(event) = stream.next().await {
            // handle event
            println!("get event: {:?}", event);
        }
    });
    cache.get("/test").await;
    Ok(())
}

When a cache be created, it will return a Stream also, the item of the stream is Event. There three event types which instead of the data created, data updated, data deleted.

#[tokio::main]
async fn main() {
    let url = String::from("localhost:2181");
    let (cache, mut stream) = CacheBuilder::new("/test").build(&url).await.unwrap();
    let client = server.client().await.unwrap();
    client.create("/test", &[], PERSISTENT_OPEN).await.unwrap();
    let event = stream.next().await.unwrap();
    assert!(matches!(event, Event::Add(data) if data.path.eq("/test")));
    assert!(cache.get("/test").await.is_some());

    client.set_data("/test", &[1], None).await.unwrap();
    let event = stream.next().await.unwrap();
    assert!(matches!(event, Event::Update{old,..} if old.path.eq("/test")));

    client.delete("/test", None).await.unwrap();
    let event = stream.next().await.unwrap();
    assert!(matches!(event, Event::Delete(data) if data.path.eq("/test")));
}

Reference

Use zookeeper-client-rust to connect ZooKeeper

License

FOSSA Status

Dependencies

~17–27MB
~481K SLoC