Skip to main content

openstack_keystone_distributed_storage/proto_impl/
impl_vote_response.rs

1// Licensed under the Apache License, Version 2.0 (the "License");
2// you may not use this file except in compliance with the License.
3// You may obtain a copy of the License at
4//
5//     http://www.apache.org/licenses/LICENSE-2.0
6//
7// Unless required by applicable law or agreed to in writing, software
8// distributed under the License is distributed on an "AS IS" BASIS,
9// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10// See the License for the specific language governing permissions and
11// limitations under the License.
12//
13// SPDX-License-Identifier: Apache-2.0
14use crate::types::VoteResponse;
15use crate::{StoreError, pb};
16
17impl From<VoteResponse> for pb::raft::VoteResponse {
18    fn from(vote_resp: VoteResponse) -> Self {
19        pb::raft::VoteResponse {
20            vote: Some(vote_resp.vote),
21            vote_granted: vote_resp.vote_granted,
22            last_log_id: vote_resp.last_log_id.map(|log_id| log_id.into()),
23        }
24    }
25}
26
27impl TryFrom<pb::raft::VoteResponse> for VoteResponse {
28    type Error = StoreError;
29    fn try_from(proto_vote_resp: pb::raft::VoteResponse) -> Result<Self, Self::Error> {
30        let vote = proto_vote_resp
31            .vote
32            .ok_or_else(|| StoreError::RaftMissingParameter("VoteResponse.Vote".into()))?;
33        let last_log_id = proto_vote_resp.last_log_id.map(|log_id| log_id.into());
34        Ok(VoteResponse::new(
35            vote,
36            last_log_id,
37            proto_vote_resp.vote_granted,
38        ))
39    }
40}