etcd_rs/cluster/
mod.rs

1mod member_add;
2mod member_list;
3mod member_remove;
4mod member_update;
5
6pub use member_add::{MemberAddRequest, MemberAddResponse};
7pub use member_list::{MemberListRequest, MemberListResponse};
8pub use member_remove::{MemberRemoveRequest, MemberRemoveResponse};
9pub use member_update::{MemberUpdateRequest, MemberUpdateResponse};
10
11use async_trait::async_trait;
12
13use crate::proto::etcdserverpb;
14use crate::Result;
15
16#[async_trait]
17pub trait ClusterOp {
18    async fn member_add<R>(&self, req: R) -> Result<MemberAddResponse>
19    where
20        R: Into<MemberAddRequest> + Send;
21
22    async fn member_remove<R>(&self, req: R) -> Result<MemberRemoveResponse>
23    where
24        R: Into<MemberRemoveRequest> + Send;
25
26    async fn member_update<R>(&self, req: R) -> Result<MemberUpdateResponse>
27    where
28        R: Into<MemberUpdateRequest> + Send;
29
30    async fn member_list(&self) -> Result<MemberListResponse>;
31}
32
33#[derive(Debug, Clone)]
34pub struct Member {
35    pub id: u64,
36    pub name: String,
37    pub peer_urls: Vec<String>,
38    pub client_urls: Vec<String>,
39    pub is_learner: bool,
40}
41
42impl From<etcdserverpb::Member> for Member {
43    fn from(proto: etcdserverpb::Member) -> Self {
44        Self {
45            id: proto.id,
46            name: proto.name,
47            peer_urls: proto.peer_ur_ls,
48            client_urls: proto.client_ur_ls,
49            is_learner: proto.is_learner,
50        }
51    }
52}
53
54impl Into<etcdserverpb::Member> for Member {
55    fn into(self) -> etcdserverpb::Member {
56        etcdserverpb::Member {
57            id: self.id,
58            name: self.name,
59            peer_ur_ls: self.peer_urls,
60            client_ur_ls: self.client_urls,
61            is_learner: self.is_learner,
62        }
63    }
64}