#[cfg(test)]
pub(crate) use self::tests::EventContext;
use super::graph::Graph;
use crate::{
id::SecretId,
network_event::NetworkEvent,
observation::{ConsensusMode, ObservationStore},
peer_list::PeerList,
};
pub(crate) struct EventContextRef<'a, T: NetworkEvent, S: SecretId> {
pub(crate) graph: &'a Graph<S::PublicId>,
pub(crate) peer_list: &'a PeerList<S>,
pub(crate) observations: &'a ObservationStore<T, S::PublicId>,
pub(crate) consensus_mode: ConsensusMode,
}
impl<'a, T: NetworkEvent, S: SecretId> Clone for EventContextRef<'a, T, S> {
fn clone(&self) -> Self {
Self {
graph: self.graph,
peer_list: self.peer_list,
observations: self.observations,
consensus_mode: self.consensus_mode,
}
}
}
impl<'a, T: NetworkEvent, S: SecretId> Copy for EventContextRef<'a, T, S> {}
#[cfg(test)]
mod tests {
use super::*;
use crate::mock::{PeerId, Transaction};
pub(crate) struct EventContext {
pub graph: Graph<PeerId>,
pub peer_list: PeerList<PeerId>,
pub observations: ObservationStore<Transaction, PeerId>,
pub consensus_mode: ConsensusMode,
}
impl EventContext {
pub fn new(our_id: PeerId) -> Self {
let peer_list = PeerList::new(our_id);
Self {
graph: Graph::new(),
peer_list,
observations: ObservationStore::new(),
consensus_mode: ConsensusMode::Supermajority,
}
}
pub fn as_ref(&self) -> EventContextRef<Transaction, PeerId> {
EventContextRef {
graph: &self.graph,
peer_list: &self.peer_list,
observations: &self.observations,
consensus_mode: self.consensus_mode,
}
}
}
}