use etcd_client::*;
#[tokio::main]
async fn main() -> Result<(), Error> {
let mut client = Client::connect(["localhost:2379"], None).await?;
let resp = client.lease_grant(10, None).await?;
let lease_id = resp.id();
println!("grant ttl:{:?}, id:{:?}", resp.ttl(), resp.id());
let resp = client.campaign("myElection", "123", lease_id).await?;
let leader = resp.leader().unwrap();
println!(
"election name:{:?}, leaseId:{:?}",
leader.name_str(),
leader.lease()
);
let resp = client
.proclaim(
"123",
Some(ProclaimOptions::new().with_leader(leader.clone())),
)
.await?;
let header = resp.header();
println!("proclaim header {:?}", header.unwrap());
let mut msg = client.observe(leader.name()).await?;
loop {
if let Some(resp) = msg.message().await? {
println!("observe key {:?}", resp.kv().unwrap().key_str());
if resp.kv().is_some() {
break;
}
}
}
let resp = client.leader("myElection").await?;
let kv = resp.kv().unwrap();
println!("key is {:?}", kv.key_str());
println!("value is {:?}", kv.value_str());
let resign_option = ResignOptions::new().with_leader(leader.clone());
let resp = client.resign(Some(resign_option)).await?;
let header = resp.header();
println!("resign header {:?}", header.unwrap());
Ok(())
}