use std::fmt;
use crate::RaftTypeConfig;
use crate::type_config::alias::SnapshotMetaOf;
use crate::type_config::alias::VoteOf;
#[derive(Clone, Debug)]
#[derive(PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize), serde(bound = ""))]
pub struct InstallSnapshotRequest<C: RaftTypeConfig> {
pub vote: VoteOf<C>,
pub meta: SnapshotMetaOf<C>,
pub offset: u64,
pub data: Vec<u8>,
pub done: bool,
}
impl<C: RaftTypeConfig> fmt::Display for InstallSnapshotRequest<C> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(
f,
"InstallSnapshotRequest {{ vote:{}, meta:{}, offset:{}, len:{}, done:{} }}",
self.vote,
self.meta,
self.offset,
self.data.len(),
self.done
)
}
}
#[derive(Debug)]
#[derive(PartialEq, Eq)]
#[derive(derive_more::Display)]
#[display("{{vote:{}}}", vote)]
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize), serde(bound = ""))]
pub struct InstallSnapshotResponse<C: RaftTypeConfig> {
pub vote: VoteOf<C>,
}
#[derive(Debug, Clone)]
#[derive(PartialEq, Eq)]
#[derive(derive_more::Display)]
#[display("SnapshotResponse{{vote:{}}}", vote)]
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize), serde(bound = ""))]
pub struct SnapshotResponse<C: RaftTypeConfig> {
pub vote: VoteOf<C>,
}
impl<C: RaftTypeConfig> SnapshotResponse<C> {
pub fn new(vote: VoteOf<C>) -> Self {
Self { vote }
}
}
impl<C> From<SnapshotResponse<C>> for InstallSnapshotResponse<C>
where C: RaftTypeConfig
{
fn from(snap_resp: SnapshotResponse<C>) -> Self {
Self { vote: snap_resp.vote }
}
}