use std::{
collections::HashMap,
fmt::{self, Display, Formatter},
};
use casper_types::ExecutionResult;
use derive_more::From;
use crate::{
effect::requests::LinearChainRequest,
types::{Block, BlockSignatures, DeployHash, FinalitySignature},
};
#[derive(Debug, From)]
pub(crate) enum Event<I> {
#[from]
Request(LinearChainRequest<I>),
NewLinearChainBlock {
block: Box<Block>,
execution_results: HashMap<DeployHash, ExecutionResult>,
},
FinalitySignatureReceived(Box<FinalitySignature>, bool),
PutBlockResult {
block: Box<Block>,
},
GetStoredFinalitySignaturesResult(Box<FinalitySignature>, Option<Box<BlockSignatures>>),
IsBonded(Option<Box<BlockSignatures>>, Box<FinalitySignature>, bool),
}
impl<I: Display> Display for Event<I> {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match self {
Event::Request(req) => write!(f, "linear chain request: {}", req),
Event::NewLinearChainBlock { block, .. } => {
write!(f, "linear chain new block: {}", block.hash())
}
Event::FinalitySignatureReceived(fs, gossiped) => write!(
f,
"linear-chain new finality signature for block: {}, from: {}, external: {}",
fs.block_hash, fs.public_key, gossiped
),
Event::PutBlockResult { .. } => write!(f, "linear-chain put-block result"),
Event::GetStoredFinalitySignaturesResult(finality_signature, maybe_signatures) => {
write!(
f,
"linear chain get-stored-finality-signatures result for {} found: {}",
finality_signature.block_hash,
maybe_signatures.is_some(),
)
}
Event::IsBonded(_block, fs, is_bonded) => {
write!(
f,
"linear chain is-bonded for era {} validator {}, is_bonded: {}",
fs.era_id, fs.public_key, is_bonded
)
}
}
}
}