inve_etcd/cluster/
member_add.rs

1use crate::proto::etcdserverpb;
2use crate::{Member, ResponseHeader};
3
4#[derive(Debug, Clone)]
5pub struct MemberAddRequest {
6    proto: etcdserverpb::MemberAddRequest,
7}
8
9impl MemberAddRequest {
10    pub fn new(peer_urls: impl Into<Vec<String>>, is_learner: bool) -> Self {
11        Self {
12            proto: etcdserverpb::MemberAddRequest {
13                peer_ur_ls: peer_urls.into(),
14                is_learner,
15            },
16        }
17    }
18}
19
20impl<I> From<I> for MemberAddRequest
21where
22    I: Into<Vec<String>>,
23{
24    fn from(peer_urls: I) -> Self {
25        Self::new(peer_urls, false)
26    }
27}
28
29impl From<MemberAddRequest> for etcdserverpb::MemberAddRequest {
30    fn from(req: MemberAddRequest) -> Self {
31        req.proto
32    }
33}
34
35#[derive(Debug, Clone)]
36pub struct MemberAddResponse {
37    pub header: ResponseHeader,
38    pub member: Member,
39    pub members: Vec<Member>,
40}
41
42impl From<etcdserverpb::MemberAddResponse> for MemberAddResponse {
43    fn from(proto: etcdserverpb::MemberAddResponse) -> Self {
44        Self {
45            header: From::from(proto.header.expect("must fetch header")),
46            member: From::from(proto.member.expect("must get a new member")),
47            members: proto.members.into_iter().map(From::from).collect(),
48        }
49    }
50}