# Zookeeper-cache-rust [![mit-license](https://img.shields.io/github/license/misssonder/zookeeper-cache-rust)](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. ## Example Cache will watch root node and it's children nodes recursively. ```rust use futures::StreamExt; use zookeeper_cache_rust::CacheBuilder; #[tokio::main] async fn main() -> zookeeper_cache_rust::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. ```rust #[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"))); } ``` ## License [![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fmisssonder%2Fzookeeper-cache-rust.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fmisssonder%2Fzookeeper-cache-rust?ref=badge_large)