ZooKeeper client in async rust

crates.io docs.rs github-ci mit-license codecov

ZooKeeper client writes in async rust.

Features

Examples

Basics

```rust use zookeeper_client as zk;

let path = "/abc"; let data = "pathdata".asbytes().tovec(); let childpath = "/abc/efg"; let childdata = "childpathdata".asbytes().tovec(); let createoptions = zk::CreateMode::Persistent.withacls(zk::Acls::anyoneall());

let cluster = "localhost:2181"; let client = zk::Client::connect(cluster).await.unwrap(); let (, statwatcher) = client.checkandwatch_stat(path).await.unwrap();

let (stat, ) = client.create(path, &data, &createoptions).await.unwrap(); asserteq!((data.clone(), stat), client.getdata(path).await.unwrap());

let event = statwatcher.changed().await; asserteq!(event.eventtype, zk::EventType::NodeCreated); asserteq!(event.path, path);

let pathclient = client.clone().chroot(path).unwrap(); asserteq!((data, stat), pathclient.getdata("/").await.unwrap());

let (, _, childwatcher) = client.getandwatch_children(path).await.unwrap();

let (childstat, _) = client.create(childpath, &childdata, &createoptions).await.unwrap();

let childevent = childwatcher.changed().await; asserteq!(childevent.eventtype, zk::EventType::NodeChildrenChanged); asserteq!(child_event.path, path);

let relativechildpath = childpath.stripprefix(path).unwrap(); asserteq!((childdata.clone(), childstat), pathclient.getdata(relativechild_path).await.unwrap());

let (, _, eventwatcher) = client.getandwatchdata("/").await.unwrap(); drop(client); drop(pathclient);

let sessionevent = eventwatcher.changed().await; asserteq!(sessionevent.eventtype, zk::EventType::Session); asserteq!(sessionevent.sessionstate, zk::SessionState::Closed); ```

Recipes

```rust use zookeeper_client as zk;

let cluster = "localhost:2181"; let client = zk::Client::connect(cluster).await.unwrap();

let prefix = zk::LockPrefix::newcurator("/app/locks", "latch-").unwrap(); let options = zk::LockOptions::new(zk::Acls::anyoneall()) .withancestoroptions(zk::CreateMode::Persistent.withacls(zk::Acls::anyoneall())) .unwrap(); let latch = client.lock(prefix, b"", options).await.unwrap(); latch.create("/app/data", b"data", &zk::CreateMode::Ephemeral.withacls(zk::Acls::anyoneall())).await.unwrap(); ```

For more examples, see zookeeper.rs.

TODO

License

The MIT License (MIT). See LICENSE for the full license text.

References