failover 0.1.0

failover based on etcd
Documentation
use std::time::Duration;

use failover::Node;

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    tracing_subscriber::fmt::init();
    let name = std::env::args().nth(1).unwrap();
    let l1 = spawn_leader(name.to_string());
    l1.await;
    Ok(())
}

async fn spawn_leader(peer_name: String) {
    tracing::info!(peer_name, "spawning peer");

    let config = failover::Config {
        etcd_options: None,
        lease_time: Duration::from_secs(10),
        prefix: "example".to_owned(),
    };

    let client = Node::new(["http://localhost:2379".to_string()], &peer_name, config)
        .await
        .unwrap();

    let commited = client
        .get_committed(-1, 1337)
        .await
        .unwrap()
        .unwrap_or_default();
    println!("Commited: {:?}", commited);

    tracing::info!("pre commit");
    for i in 0..500_000 {
        if client.commit(-1, 1337, i).await.unwrap() {
            println!("{} {}", peer_name, i);
            tokio::time::sleep(Duration::from_millis(500)).await;
        }else {
            println!("not leader {i} {peer_name}");
        }
    }
    tracing::info!("{} is done", peer_name);
}