use std::fmt;
use std::sync::Arc;
use crate::Config;
use crate::RaftTypeConfig;
use crate::core::SharedReplicateBatch;
use crate::core::notification::Notification;
use crate::progress::stream_id::StreamId;
use crate::type_config::alias::CommittedVoteOf;
use crate::type_config::alias::MpscSenderOf;
use crate::type_config::alias::WatchReceiverOf;
#[derive(Clone)]
pub(crate) struct ReplicationContext<C>
where C: RaftTypeConfig
{
#[allow(dead_code)]
pub(crate) id: C::NodeId,
pub(crate) target: C::NodeId,
pub(crate) leader_vote: CommittedVoteOf<C>,
pub(crate) stream_id: StreamId,
pub(crate) config: Arc<Config>,
#[allow(clippy::type_complexity)]
pub(crate) tx_notify: MpscSenderOf<C, Notification<C>>,
pub(crate) cancel_rx: WatchReceiverOf<C, ()>,
pub(crate) replicate_batch: SharedReplicateBatch,
}
impl<C> fmt::Display for ReplicationContext<C>
where C: RaftTypeConfig
{
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{{id: {}, target: {}, {}}}", self.id, self.target, self.stream_id)
}
}
impl<C> fmt::Debug for ReplicationContext<C>
where C: RaftTypeConfig
{
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_struct("ReplicationContext")
.field("id", &self.id)
.field("target", &self.target)
.field("session_id", &self.stream_id)
.field("config", &self.config)
.finish_non_exhaustive()
}
}