zookeeper 0.8.0

A minimal ZooKeeper client
Documentation
extern crate env_logger;
extern crate uuid;
extern crate zookeeper;

use std::{env, sync::Arc, thread, time::Duration};
use uuid::Uuid;
use zookeeper::{recipes::leader::LeaderLatch, WatchedEvent, Watcher, ZooKeeper};

const LATCH_PATH: &str = "/latch-ex";

struct NoopWatcher;

impl Watcher for NoopWatcher {
    fn handle(&self, _ev: WatchedEvent) {}
}

fn zk_server_urls() -> String {
    let key = "ZOOKEEPER_SERVERS";
    match env::var(key) {
        Ok(val) => val,
        Err(_) => "localhost:2181".to_string(),
    }
}

fn main() {
    env_logger::init();

    let zk_urls = zk_server_urls();
    log::info!("connecting to {}", zk_urls);

    let zk = ZooKeeper::connect(&*zk_urls, Duration::from_millis(2500), NoopWatcher).unwrap();

    let id = Uuid::new_v4().to_string();
    log::info!("starting host with id: {:?}", id);

    let latch = LeaderLatch::new(Arc::new(zk), id.clone(), LATCH_PATH.into());
    latch.start().unwrap();

    loop {
        if latch.has_leadership() {
            log::info!("{:?} is the leader", id);
        } else {
            log::info!("{:?} is a follower", id);
        }
        thread::sleep(Duration::from_millis(1000));
    }
}