pub trait Messenger<T> {
// Required methods
fn send_prepare(&mut self, msg: Message<T>);
fn send_promise(&mut self, msg: Message<T>);
fn send_accept(&mut self, msg: Message<T>);
fn send_accepted(&mut self, msg: Message<T>);
fn on_resolution(&mut self, proposal_n: u64, value: Arc<T>);
}