etcd client for Rust ==== [github](https://github.com/lodrem/etcd-rs) [crates.io](https://crates.io/crates/etcd-rs) [docs.rs](https://docs.rs/etcd-rs) [build status](https://github.com/luncj/etcd-rs/actions?query%3Amaster) [dependency status](https://deps.rs/repo/github/lodrem/etcd-rs) An [etcd](https://github.com/etcd-io/etcd) (API v3) client for Rust backed by [tokio](https://github.com/tokio-rs/tokio) and [tonic](https://github.com/hyperium/tonic). Supported APIs ---- - KV - [x] Put - [x] Range - [x] Delete - [x] Transaction - [x] Compact - Lease - [x] Grant - [x] Revoke - [x] KeepAlive - [x] TimeToLive - Watch - [x] WatchCreate - [x] WatchCancel - Auth - [x] Authenticate - [ ] RoleAdd - [ ] RoleGrantPermission - [ ] UserAdd - [ ] UserGrantRole - [ ] AuthEnable - [ ] AuthDisable - Cluster - [x] MemberAdd - [x] MemberRemove - [x] MemberUpdate - [x] MemberList - Maintenance - [ ] Alarm - [ ] Status - [ ] Defragment - [ ] Hash - [ ] Snapshot - [ ] MoveLeader Usage ---- Add following dependencies in your project `cargo.toml`: ```toml [dependencies] etcd-rs = "1.0" ``` ```rust use etcd_rs::Client; #[tokio::main] async fn main() { let cli = Client::connect(ClientConfig { endpoints: [ "http://127.0.0.1:12379", "http://127.0.0.1:22379", "http://127.0.0.1:32379", ], ..Default::default() }).await; cli.put(("foo", "bar")).await.expect("put kv"); let kvs = cli.get("foo").await.expect("get kv").take_kvs(); assert_eq!(kvs.len(), 1); } ``` Development ---- requirements: - Makefile - docker - docker-compose ### Start local etcd cluster ```shell make setup-etcd-cluster ``` stop cluster ```shell make teardown-etcd-cluster ``` ### Run tests ```shell make test ``` for specified case: ```shell TEST_CASE=test_put_error make test-one ``` License ---- This project is licensed under the [MIT license](LICENSE).