etcd-rs 1.0.1

etcd client for rust
Documentation
use crate::proto::etcdserverpb;
use crate::{Member, ResponseHeader};

#[derive(Debug, Clone)]
pub struct MemberAddRequest {
    proto: etcdserverpb::MemberAddRequest,
}

impl MemberAddRequest {
    pub fn new(peer_urls: impl Into<Vec<String>>, is_learner: bool) -> Self {
        Self {
            proto: etcdserverpb::MemberAddRequest {
                peer_ur_ls: peer_urls.into(),
                is_learner,
            },
        }
    }
}

impl<I> From<I> for MemberAddRequest
where
    I: Into<Vec<String>>,
{
    fn from(peer_urls: I) -> Self {
        Self::new(peer_urls, false)
    }
}

impl From<MemberAddRequest> for etcdserverpb::MemberAddRequest {
    fn from(req: MemberAddRequest) -> Self {
        req.proto
    }
}

#[derive(Debug, Clone)]
pub struct MemberAddResponse {
    pub header: ResponseHeader,
    pub member: Member,
    pub members: Vec<Member>,
}

impl From<etcdserverpb::MemberAddResponse> for MemberAddResponse {
    fn from(proto: etcdserverpb::MemberAddResponse) -> Self {
        Self {
            header: From::from(proto.header.expect("must fetch header")),
            member: From::from(proto.member.expect("must get a new member")),
            members: proto.members.into_iter().map(From::from).collect(),
        }
    }
}