use crate::Membership;
use crate::RaftTypeConfig;
use crate::raft::responder::core_responder::CoreResponder;
use crate::type_config::alias::LogIdOf;
pub(crate) enum ApplyResponderInner<C: RaftTypeConfig> {
Normal {
log_id: LogIdOf<C>,
responder: CoreResponder<C>,
},
Membership {
log_id: LogIdOf<C>,
membership: Membership<C::NodeId, C::Node>,
responder: CoreResponder<C>,
},
}
impl<C: RaftTypeConfig> ApplyResponderInner<C> {
pub(crate) fn send(self, response: C::R) {
use crate::raft::ClientWriteResponse;
use crate::raft::responder::Responder as ResponderTrait;
match self {
ApplyResponderInner::Normal { log_id, responder } => {
let res = Ok(ClientWriteResponse {
log_id,
data: response,
membership: None,
});
responder.on_complete(res);
}
ApplyResponderInner::Membership {
log_id,
membership,
responder,
} => {
let res = Ok(ClientWriteResponse {
log_id,
data: response,
membership: Some(membership),
});
responder.on_complete(res);
}
}
}
}