use std::{
collections::BTreeSet,
fmt::{self, Formatter},
};
use datasize::DataSize;
use derive_more::From;
use fmt::Display;
use serde::{Deserialize, Serialize};
use casper_types::Motes;
use super::{BlockHeight, CachedState};
use crate::{
effect::requests::BlockProposerRequest,
types::{Approval, DeployHash, DeployHeader, DeployOrTransferHash, FinalizedBlock},
};
#[derive(Clone, DataSize, Debug, Deserialize, Serialize)]
pub struct DeployInfo {
pub header: DeployHeader,
pub payment_amount: Motes,
pub size: usize,
}
#[derive(DataSize, Debug, From)]
pub(crate) enum Event {
#[from]
Request(BlockProposerRequest),
Loaded {
finalized_deploys: Vec<(DeployHash, DeployHeader)>,
next_finalized_block: BlockHeight,
cached_state: CachedState,
},
BufferDeploy {
hash: DeployOrTransferHash,
approvals: BTreeSet<Approval>,
deploy_info: Box<DeployInfo>,
},
Prune,
FinalizedBlock(Box<FinalizedBlock>),
}
impl Display for Event {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match self {
Event::Request(req) => write!(f, "block-proposer request: {}", req),
Event::Loaded {
next_finalized_block,
..
} => write!(
f,
"loaded block-proposer finalized deploys; expected next finalized block: {}",
next_finalized_block
),
Event::BufferDeploy { hash, .. } => write!(f, "block-proposer add {}", hash),
Event::Prune => write!(f, "block-proposer prune"),
Event::FinalizedBlock(block) => {
write!(f, "block-proposer finalized block {}", block)
}
}
}
}