use crate::{BlockReplacement, DerivedRefPair};
use alloc::{format, string::String, vec::Vec};
use derive_more::Constructor;
use kona_protocol::BlockInfo;
#[derive(Debug, Clone, Default, PartialEq, Eq, Constructor)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))]
pub struct ManagedEvent {
pub reset: Option<String>,
pub unsafe_block: Option<BlockInfo>,
pub derivation_update: Option<DerivedRefPair>,
pub exhaust_l1: Option<DerivedRefPair>,
pub replace_block: Option<BlockReplacement>,
pub derivation_origin_update: Option<BlockInfo>,
}
impl core::fmt::Display for ManagedEvent {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
let mut parts = Vec::new();
if let Some(ref reset) = self.reset {
parts.push(format!("reset: {reset}"));
}
if let Some(ref block) = self.unsafe_block {
parts.push(format!("unsafe_block: {block}"));
}
if let Some(ref pair) = self.derivation_update {
parts.push(format!("derivation_update: {pair}"));
}
if let Some(ref pair) = self.exhaust_l1 {
parts.push(format!("exhaust_l1: {pair}"));
}
if let Some(ref replacement) = self.replace_block {
parts.push(format!("replace_block: {replacement}"));
}
if let Some(ref origin) = self.derivation_origin_update {
parts.push(format!("derivation_origin_update: {origin}"));
}
if parts.is_empty() { write!(f, "none") } else { write!(f, "{}", parts.join(", ")) }
}
}