use exonum::crypto::PublicKey;
use std::{
collections::VecDeque,
ops::{Deref, DerefMut},
};
use crate::messages::Message;
#[derive(Debug, Default)]
pub struct GuardedQueue(VecDeque<(PublicKey, Message)>);
impl Deref for GuardedQueue {
type Target = VecDeque<(PublicKey, Message)>;
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl DerefMut for GuardedQueue {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.0
}
}
impl Drop for GuardedQueue {
fn drop(&mut self) {
if !std::thread::panicking() {
if let Some((addr, msg)) = self.0.pop_front() {
panic!("Sent unexpected message {:?} to {}", msg, addr);
}
}
}
}