use std::fmt;
use bytes::Bytes;
use vapory_types::H256;
use crate::snapshot::ManifestData;
#[derive(Debug)]
pub enum ClientIoMessage<C> {
NewChainHead,
BlockVerified,
BeginRestoration(ManifestData),
FeedStateChunk(H256, Bytes),
FeedBlockChunk(H256, Bytes),
TakeSnapshot(u64),
Execute(Callback<C>),
}
impl<C> ClientIoMessage<C> {
pub fn execute<F: Fn(&C) + Send + Sync + 'static>(fun: F) -> Self {
ClientIoMessage::Execute(Callback(Box::new(fun)))
}
}
pub struct Callback<C>(pub Box<dyn Fn(&C) + Send + Sync>);
impl<C> fmt::Debug for Callback<C> {
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
write!(fmt, "<callback>")
}
}