Encode a [`RaftRpc`] into a framed binary message.
(rpc: &RaftRpc)
| 54 | |
| 55 | /// Encode a [`RaftRpc`] into a framed binary message. |
| 56 | pub fn encode(rpc: &RaftRpc) -> Result<Vec<u8>> { |
| 57 | let mut out = Vec::with_capacity(HEADER_SIZE + 64); |
| 58 | match rpc { |
| 59 | RaftRpc::AppendEntriesRequest(m) => raft_msgs::encode_append_entries_req(m, &mut out), |
| 60 | RaftRpc::AppendEntriesResponse(m) => raft_msgs::encode_append_entries_resp(m, &mut out), |
| 61 | RaftRpc::RequestVoteRequest(m) => raft_msgs::encode_request_vote_req(m, &mut out), |
| 62 | RaftRpc::RequestVoteResponse(m) => raft_msgs::encode_request_vote_resp(m, &mut out), |
| 63 | RaftRpc::InstallSnapshotRequest(m) => raft_msgs::encode_install_snapshot_req(m, &mut out), |
| 64 | RaftRpc::InstallSnapshotResponse(m) => raft_msgs::encode_install_snapshot_resp(m, &mut out), |
| 65 | RaftRpc::JoinRequest(m) => cluster_mgmt::encode_join_req(m, &mut out), |
| 66 | RaftRpc::JoinResponse(m) => cluster_mgmt::encode_join_resp(m, &mut out), |
| 67 | RaftRpc::Ping(m) => cluster_mgmt::encode_ping(m, &mut out), |
| 68 | RaftRpc::Pong(m) => cluster_mgmt::encode_pong(m, &mut out), |
| 69 | RaftRpc::TopologyUpdate(m) => cluster_mgmt::encode_topology_update(m, &mut out), |
| 70 | RaftRpc::TopologyAck(m) => cluster_mgmt::encode_topology_ack(m, &mut out), |
| 71 | RaftRpc::VShardEnvelope(bytes) => vshard::encode_vshard_envelope(bytes, &mut out), |
| 72 | RaftRpc::MetadataProposeRequest(m) => metadata::encode_metadata_propose_req(m, &mut out), |
| 73 | RaftRpc::MetadataProposeResponse(m) => metadata::encode_metadata_propose_resp(m, &mut out), |
| 74 | RaftRpc::ExecuteRequest(m) => execute::encode_execute_req(m, &mut out), |
| 75 | RaftRpc::ExecuteResponse(m) => execute::encode_execute_resp(m, &mut out), |
| 76 | RaftRpc::DataProposeRequest(m) => data_propose::encode_data_propose_req(m, &mut out), |
| 77 | RaftRpc::DataProposeResponse(m) => data_propose::encode_data_propose_resp(m, &mut out), |
| 78 | }?; |
| 79 | Ok(out) |
| 80 | } |
| 81 | |
| 82 | /// Encode a [`RaftRpc`] and wrap the framed bytes in a v2 versioned envelope. |
| 83 | /// |