ZooKeeper client writes in async rust.
StateWatcher
trackes session state updates.OneshotWatcher
tracks oneshot ZooKeeper node event.PersistentWatcher
tracks persistent and recursive persistent ZooKeeper node events.XyzWatchRemoved
as there is no way to receive such event after watchers dropped.Client
and Client::chroot
enables session sharing cross multiple different rooted clients.```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); ```
```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.
The MIT License (MIT). See LICENSE for the full license text.