etcd_client/
lib.rs

1//! An [etcd](https://github.com/etcd-io/etcd) v3 API client for Rust.
2//! It provides asynchronous client backed by [tokio](https://github.com/tokio-rs/tokio) and [tonic](https://github.com/hyperium/tonic).
3//!
4//! # Supported APIs
5//!
6//! - KV
7//! - Watch
8//! - Lease
9//! - Auth
10//! - Maintenance
11//! - Cluster
12//! - Lock
13//! - Election
14//!
15//! # Usage
16//!
17//! Add this to your `Cargo.toml`:
18//!
19//! ```toml
20//! [dependencies]
21//! etcd-client = "0.14"
22//! tokio = { version = "1.0", features = ["full"] }
23//! ```
24//!
25//! To get started using `etcd-client`:
26//!
27//! ```rust
28//! use etcd_client::{Client, Error};
29//!
30//! #[tokio::main]
31//! async fn main() -> Result<(), Error> {
32//!     let mut client = Client::connect(["localhost:2379"], None).await?;
33//!     // put kv
34//!     client.put("foo", "bar", None).await?;
35//!     // get kv
36//!     let resp = client.get("foo", None).await?;
37//!     if let Some(kv) = resp.kvs().first() {
38//!         println!("Get kv: {{{}: {}}}", kv.key_str()?, kv.value_str()?);
39//!     }
40//!
41//!     Ok(())
42//! }
43//! ```
44//!
45//! # Examples
46//!
47//! Examples can be found in [`etcd-client/examples`](https://github.com/etcdv3/etcd-client/tree/master/examples).
48//!
49//! # Feature Flags
50//!
51//! - `tls`: Enables the `rustls`-based TLS connection. Not enabled by default.
52//! - `tls-roots`: Adds system trust roots to `rustls`-based TLS connection using the `rustls-native-certs` crate. Not enabled by default.
53//! - `pub-response-field`: Exposes structs used to create regular `etcd-client` responses including internal protobuf representations. Useful for mocking. Not enabled by default.
54
55#![cfg_attr(docsrs, feature(doc_cfg))]
56
57mod auth;
58mod channel;
59mod client;
60mod error;
61mod namespace;
62mod openssl_tls;
63mod rpc;
64mod vec;
65
66pub use crate::client::{Client, ConnectOptions};
67pub use crate::error::Error;
68pub use crate::namespace::{KvClientPrefix, LeaseClientPrefix};
69pub use crate::rpc::auth::{
70    AuthClient, AuthDisableResponse, AuthEnableResponse, AuthenticateResponse, Permission,
71    PermissionType, RoleAddResponse, RoleDeleteResponse, RoleGetResponse,
72    RoleGrantPermissionResponse, RoleListResponse, RoleRevokePermissionOptions,
73    RoleRevokePermissionResponse, UserAddOptions, UserAddResponse, UserChangePasswordResponse,
74    UserDeleteResponse, UserGetResponse, UserGrantRoleResponse, UserListResponse,
75    UserRevokeRoleResponse,
76};
77pub use crate::rpc::cluster::{
78    ClusterClient, Member, MemberAddOptions, MemberAddResponse, MemberListResponse,
79    MemberPromoteResponse, MemberRemoveResponse, MemberUpdateResponse,
80};
81pub use crate::rpc::election::{
82    CampaignResponse, ElectionClient, LeaderKey, LeaderResponse, ObserveStream, ProclaimOptions,
83    ProclaimResponse, ResignOptions, ResignResponse,
84};
85pub use crate::rpc::kv::{
86    CompactionOptions, CompactionResponse, Compare, CompareOp, DeleteOptions, DeleteResponse,
87    GetOptions, GetResponse, KvClient, PutOptions, PutResponse, SortOrder, SortTarget, Txn, TxnOp,
88    TxnOpResponse, TxnResponse,
89};
90pub use crate::rpc::lease::{
91    LeaseClient, LeaseGrantOptions, LeaseGrantResponse, LeaseKeepAliveResponse,
92    LeaseKeepAliveStream, LeaseKeeper, LeaseLeasesResponse, LeaseRevokeResponse, LeaseStatus,
93    LeaseTimeToLiveOptions, LeaseTimeToLiveResponse,
94};
95pub use crate::rpc::lock::{LockClient, LockOptions, LockResponse, UnlockResponse};
96pub use crate::rpc::maintenance::{
97    AlarmAction, AlarmMember, AlarmOptions, AlarmResponse, AlarmType, DefragmentResponse,
98    HashKvResponse, HashResponse, MaintenanceClient, MoveLeaderResponse, SnapshotResponse,
99    SnapshotStreaming, StatusResponse,
100};
101pub use crate::rpc::watch::{
102    Event, EventType, WatchClient, WatchFilterType, WatchOptions, WatchResponse, WatchStream,
103    Watcher,
104};
105pub use crate::rpc::{KeyValue, ResponseHeader};
106
107#[cfg(feature = "tls")]
108#[cfg_attr(docsrs, doc(cfg(feature = "tls")))]
109pub use tonic::transport::{Certificate, ClientTlsConfig as TlsOptions, Identity};
110
111#[cfg(feature = "tls-openssl")]
112#[cfg_attr(docsrs, doc(cfg(feature = "tls-openssl")))]
113pub use crate::openssl_tls::{OpenSslClientConfig, OpenSslResult, SslConnectorBuilder};
114
115/// Exposes internal protobuf representations used to create regular public response types.
116#[cfg(feature = "pub-response-field")]
117#[cfg_attr(docsrs, doc(cfg(feature = "pub-response-field")))]
118pub mod proto {
119    pub use crate::rpc::pb::etcdserverpb::AlarmMember as PbAlarmMember;
120    pub use crate::rpc::pb::etcdserverpb::{
121        AlarmResponse as PbAlarmResponse, AuthDisableResponse as PbAuthDisableResponse,
122        AuthEnableResponse as PbAuthEnableResponse, AuthRoleAddResponse as PbAuthRoleAddResponse,
123        AuthRoleDeleteResponse as PbAuthRoleDeleteResponse,
124        AuthRoleGetResponse as PbAuthRoleGetResponse,
125        AuthRoleGrantPermissionResponse as PbAuthRoleGrantPermissionResponse,
126        AuthRoleListResponse as PbAuthRoleListResponse,
127        AuthRoleRevokePermissionResponse as PbAuthRoleRevokePermissionResponse,
128        AuthUserAddResponse as PbAuthUserAddResponse,
129        AuthUserChangePasswordResponse as PbAuthUserChangePasswordResponse,
130        AuthUserDeleteResponse as PbAuthUserDeleteResponse,
131        AuthUserGetResponse as PbAuthUserGetResponse,
132        AuthUserGrantRoleResponse as PbAuthUserGrantRoleResponse,
133        AuthUserListResponse as PbAuthUserListResponse,
134        AuthUserRevokeRoleResponse as PbAuthUserRevokeRoleResponse,
135        AuthenticateResponse as PbAuthenticateResponse, CompactionResponse as PbCompactionResponse,
136        Compare as PbCompare, DefragmentResponse as PbDefragmentResponse,
137        DeleteRangeResponse as PbDeleteResponse, HashKvResponse as PbHashKvResponse,
138        HashResponse as PbHashResponse, LeaseGrantResponse as PbLeaseGrantResponse,
139        LeaseKeepAliveResponse as PbLeaseKeepAliveResponse,
140        LeaseLeasesResponse as PbLeaseLeasesResponse, LeaseRevokeResponse as PbLeaseRevokeResponse,
141        LeaseStatus as PbLeaseStatus, LeaseTimeToLiveResponse as PbLeaseTimeToLiveResponse,
142        Member as PbMember, MemberAddResponse as PbMemberAddResponse,
143        MemberListResponse as PbMemberListResponse,
144        MemberPromoteResponse as PbMemberPromoteResponse,
145        MemberRemoveResponse as PbMemberRemoveResponse,
146        MemberUpdateResponse as PbMemberUpdateResponse, MoveLeaderResponse as PbMoveLeaderResponse,
147        PutResponse as PbPutResponse, RangeResponse as PbRangeResponse,
148        ResponseHeader as PbResponseHeader, SnapshotResponse as PbSnapshotResponse,
149        StatusResponse as PbStatusResponse, TxnResponse as PbTxnResponse,
150        WatchResponse as PbWatchResponse,
151    };
152    pub use crate::rpc::pb::mvccpb::Event as PbEvent;
153    pub use crate::rpc::pb::mvccpb::KeyValue as PbKeyValue;
154    pub use crate::rpc::pb::v3electionpb::{
155        CampaignResponse as PbCampaignResponse, LeaderKey as PbLeaderKey,
156        LeaderResponse as PbLeaderResponse, ProclaimResponse as PbProclaimResponse,
157        ResignResponse as PbResignResponse,
158    };
159    pub use crate::rpc::pb::v3lockpb::{
160        LockResponse as PbLockResponse, UnlockResponse as PbUnlockResponse,
161    };
162}