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.15"
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//! - `tls-openssl`: Enables the `openssl`-based TLS connections. This would make your binary dynamically link to `libssl`.
55//! - `tls-openssl-vendored`: Like `tls-openssl`, however compile openssl from source code and statically link to it.
56//! - `build-server`: Builds a server variant of the etcd protobuf and re-exports it under the same `proto` package as the `pub-response-field` feature does.
57
58#![cfg_attr(docsrs, feature(doc_cfg))]
59
60mod auth;
61mod channel;
62mod client;
63mod error;
64mod intercept;
65mod lock;
66mod namespace;
67mod openssl_tls;
68mod rpc;
69mod vec;
70
71pub use crate::client::{Client, ConnectOptions};
72pub use crate::error::Error;
73pub use crate::namespace::{KvClientPrefix, LeaseClientPrefix};
74pub use crate::rpc::auth::{
75    AuthClient, AuthDisableResponse, AuthEnableResponse, AuthenticateResponse, Permission,
76    PermissionType, RoleAddResponse, RoleDeleteResponse, RoleGetResponse,
77    RoleGrantPermissionResponse, RoleListResponse, RoleRevokePermissionOptions,
78    RoleRevokePermissionResponse, UserAddOptions, UserAddResponse, UserChangePasswordResponse,
79    UserDeleteResponse, UserGetResponse, UserGrantRoleResponse, UserListResponse,
80    UserRevokeRoleResponse,
81};
82pub use crate::rpc::cluster::{
83    ClusterClient, Member, MemberAddOptions, MemberAddResponse, MemberListResponse,
84    MemberPromoteResponse, MemberRemoveResponse, MemberUpdateResponse,
85};
86pub use crate::rpc::election::{
87    CampaignResponse, ElectionClient, LeaderKey, LeaderResponse, ObserveStream, ProclaimOptions,
88    ProclaimResponse, ResignOptions, ResignResponse,
89};
90pub use crate::rpc::kv::{
91    CompactionOptions, CompactionResponse, Compare, CompareOp, DeleteOptions, DeleteResponse,
92    GetOptions, GetResponse, KvClient, PutOptions, PutResponse, SortOrder, SortTarget, Txn, TxnOp,
93    TxnOpResponse, TxnResponse,
94};
95pub use crate::rpc::lease::{
96    LeaseClient, LeaseGrantOptions, LeaseGrantResponse, LeaseKeepAliveResponse,
97    LeaseKeepAliveStream, LeaseKeeper, LeaseLeasesResponse, LeaseRevokeResponse, LeaseStatus,
98    LeaseTimeToLiveOptions, LeaseTimeToLiveResponse,
99};
100pub use crate::rpc::lock::{LockClient, LockOptions, LockResponse, UnlockResponse};
101pub use crate::rpc::maintenance::{
102    AlarmAction, AlarmMember, AlarmOptions, AlarmResponse, AlarmType, DefragmentResponse,
103    HashKvResponse, HashResponse, MaintenanceClient, MoveLeaderResponse, SnapshotResponse,
104    SnapshotStreaming, StatusResponse,
105};
106pub use crate::rpc::watch::{
107    Event, EventType, WatchClient, WatchFilterType, WatchOptions, WatchResponse, WatchStream,
108    Watcher,
109};
110pub use crate::rpc::{KeyValue, ResponseHeader};
111
112#[cfg(feature = "tls")]
113#[cfg_attr(docsrs, doc(cfg(feature = "tls")))]
114pub use tonic::transport::{Certificate, ClientTlsConfig as TlsOptions, Identity};
115
116#[cfg(feature = "tls-openssl")]
117#[cfg_attr(docsrs, doc(cfg(feature = "tls-openssl")))]
118pub use crate::openssl_tls::{OpenSslClientConfig, OpenSslResult, SslConnectorBuilder};
119
120/// Exposes internal protobuf representations used to create regular public response types.
121#[cfg(feature = "pub-response-field")]
122#[cfg_attr(docsrs, doc(cfg(feature = "pub-response-field")))]
123pub mod proto {
124    pub use crate::rpc::pb::etcdserverpb::AlarmMember as PbAlarmMember;
125    pub use crate::rpc::pb::etcdserverpb::{
126        AlarmResponse as PbAlarmResponse, AuthDisableResponse as PbAuthDisableResponse,
127        AuthEnableResponse as PbAuthEnableResponse, AuthRoleAddResponse as PbAuthRoleAddResponse,
128        AuthRoleDeleteResponse as PbAuthRoleDeleteResponse,
129        AuthRoleGetResponse as PbAuthRoleGetResponse,
130        AuthRoleGrantPermissionResponse as PbAuthRoleGrantPermissionResponse,
131        AuthRoleListResponse as PbAuthRoleListResponse,
132        AuthRoleRevokePermissionResponse as PbAuthRoleRevokePermissionResponse,
133        AuthUserAddResponse as PbAuthUserAddResponse,
134        AuthUserChangePasswordResponse as PbAuthUserChangePasswordResponse,
135        AuthUserDeleteResponse as PbAuthUserDeleteResponse,
136        AuthUserGetResponse as PbAuthUserGetResponse,
137        AuthUserGrantRoleResponse as PbAuthUserGrantRoleResponse,
138        AuthUserListResponse as PbAuthUserListResponse,
139        AuthUserRevokeRoleResponse as PbAuthUserRevokeRoleResponse,
140        AuthenticateResponse as PbAuthenticateResponse, CompactionResponse as PbCompactionResponse,
141        Compare as PbCompare, DefragmentResponse as PbDefragmentResponse,
142        DeleteRangeResponse as PbDeleteResponse, HashKvResponse as PbHashKvResponse,
143        HashResponse as PbHashResponse, LeaseGrantResponse as PbLeaseGrantResponse,
144        LeaseKeepAliveResponse as PbLeaseKeepAliveResponse,
145        LeaseLeasesResponse as PbLeaseLeasesResponse, LeaseRevokeResponse as PbLeaseRevokeResponse,
146        LeaseStatus as PbLeaseStatus, LeaseTimeToLiveResponse as PbLeaseTimeToLiveResponse,
147        Member as PbMember, MemberAddResponse as PbMemberAddResponse,
148        MemberListResponse as PbMemberListResponse,
149        MemberPromoteResponse as PbMemberPromoteResponse,
150        MemberRemoveResponse as PbMemberRemoveResponse,
151        MemberUpdateResponse as PbMemberUpdateResponse, MoveLeaderResponse as PbMoveLeaderResponse,
152        PutResponse as PbPutResponse, RangeResponse as PbRangeResponse,
153        ResponseHeader as PbResponseHeader, SnapshotResponse as PbSnapshotResponse,
154        StatusResponse as PbStatusResponse, TxnResponse as PbTxnResponse,
155        WatchResponse as PbWatchResponse,
156    };
157    pub use crate::rpc::pb::mvccpb::Event as PbEvent;
158    pub use crate::rpc::pb::mvccpb::KeyValue as PbKeyValue;
159    pub use crate::rpc::pb::v3electionpb::{
160        CampaignResponse as PbCampaignResponse, LeaderKey as PbLeaderKey,
161        LeaderResponse as PbLeaderResponse, ProclaimResponse as PbProclaimResponse,
162        ResignResponse as PbResignResponse,
163    };
164    pub use crate::rpc::pb::v3lockpb::{
165        LockResponse as PbLockResponse, UnlockResponse as PbUnlockResponse,
166    };
167
168    #[cfg(feature = "build-server")]
169    pub use crate::rpc::pb::etcdserverpb::{
170        auth_server::{Auth as PbAuthService, AuthServer as PbAuthServer},
171        cluster_server::{Cluster as PbClusterService, ClusterServer as PbClusterServer},
172        kv_server::{Kv as PbKvService, KvServer as PbKvServer},
173        lease_server::{Lease as PbLeaseService, LeaseServer as PbLeaseServer},
174        maintenance_server::{
175            Maintenance as PbMaintenanceService, MaintenanceServer as PbMaintenanceServer,
176        },
177        watch_server::{Watch as PbWatchService, WatchServer as PbWatchServer},
178    };
179
180    #[cfg(feature = "build-server")]
181    pub use crate::rpc::pb::etcdserverpb::{
182        AlarmRequest as PbAlarmRequest, AuthDisableRequest as PbAuthDisableRequest,
183        AuthEnableRequest as PbAuthEnableRequest, AuthRoleAddRequest as PbAuthRoleAddRequest,
184        AuthRoleDeleteRequest as PbAuthRoleDeleteRequest,
185        AuthRoleGetRequest as PbAuthRoleGetRequest,
186        AuthRoleGrantPermissionRequest as PbAuthRoleGrantPermissionRequest,
187        AuthRoleListRequest as PbAuthRoleListRequest,
188        AuthRoleRevokePermissionRequest as PbAuthRoleRevokePermissionRequest,
189        AuthUserAddRequest as PbAuthUserAddRequest,
190        AuthUserChangePasswordRequest as PbAuthUserChangePasswordRequest,
191        AuthUserDeleteRequest as PbAuthUserDeleteRequest,
192        AuthUserGetRequest as PbAuthUserGetRequest,
193        AuthUserGrantRoleRequest as PbAuthUserGrantRoleRequest,
194        AuthUserListRequest as PbAuthUserListRequest,
195        AuthUserRevokeRoleRequest as PbAuthUserRevokeRoleRequest,
196        AuthenticateRequest as PbAuthenticateRequest, CompactionRequest as PbCompactionRequest,
197        DefragmentRequest as PbDefragmentRequest, DeleteRangeRequest as PbDeleteRequest,
198        HashKvRequest as PbHashKvRequest, HashRequest as PbHashRequest,
199        LeaseGrantRequest as PbLeaseGrantRequest, LeaseKeepAliveRequest as PbLeaseKeepAliveRequest,
200        LeaseLeasesRequest as PbLeaseLeasesRequest, LeaseRevokeRequest as PbLeaseRevokeRequest,
201        LeaseTimeToLiveRequest as PbLeaseTimeToLiveRequest, MemberAddRequest as PbMemberAddRequest,
202        MemberListRequest as PbMemberListRequest, MemberPromoteRequest as PbMemberPromoteRequest,
203        MemberRemoveRequest as PbMemberRemoveRequest, MemberUpdateRequest as PbMemberUpdateRequest,
204        MoveLeaderRequest as PbMoveLeaderRequest, PutRequest as PbPutRequest,
205        RangeRequest as PbRangeRequest, SnapshotRequest as PbSnapshotRequest,
206        StatusRequest as PbStatusRequest, TxnRequest as PbTxnRequest,
207        WatchRequest as PbWatchRequest,
208    };
209}