Skip to main content

openstack_keystone_distributed_storage/proto_impl/
impl_vote_request.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::VoteRequest;
15use crate::{StoreError, pb};
16
17impl From<VoteRequest> for pb::raft::VoteRequest {
18    fn from(vote_req: VoteRequest) -> Self {
19        pb::raft::VoteRequest {
20            vote: Some(vote_req.vote),
21            last_log_id: vote_req.last_log_id.map(|log_id| log_id.into()),
22        }
23    }
24}
25
26impl TryFrom<pb::raft::VoteRequest> for VoteRequest {
27    type Error = StoreError;
28    fn try_from(proto_vote_req: pb::raft::VoteRequest) -> Result<Self, Self::Error> {
29        let vote = proto_vote_req
30            .vote
31            .ok_or_else(|| StoreError::RaftMissingParameter("VoteResponse.Vote".into()))?;
32        let last_log_id = proto_vote_req.last_log_id.map(|log_id| log_id.into());
33        Ok(VoteRequest::new(vote, last_log_id))
34    }
35}