etcd-client 0.18.0

An etcd v3 API client
Documentation
//! Lock example

use etcd_client::*;

#[tokio::main]
async fn main() -> Result<(), Error> {
    let mut client = Client::connect(["localhost:2379"], None).await?;

    println!("try to lock with name \'lock-test\'");
    let resp = client.lock("lock-test", None).await?;
    let key = resp.key();
    let key_str = std::str::from_utf8(key)?;
    println!("the key is {key_str:?}");

    println!("try to unlock it");
    client.unlock(key).await?;
    println!("finish!");
    println!();

    // make a lease
    let resp = client.lease_grant(60, None).await?;
    println!(
        "grant a lease with id {:?}, ttl {:?}",
        resp.id(),
        resp.ttl()
    );
    let lease_id = resp.id();

    // lock with lease
    println!("try to lock with name \'lock-test2\' and lease {lease_id:?}");
    let lock_options = LockOptions::new().with_lease(lease_id);
    let resp = client.lock("lock-test2", Some(lock_options)).await?;
    let key = resp.key();
    let key_str = std::str::from_utf8(key);
    println!("the key is {key_str:?}");

    println!("try to unlock it");
    client.unlock(key).await?;
    println!("finish!");

    Ok(())
}