use std::{collections::VecDeque, sync::Arc};
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use tari_common_types::types::HashOutput;
use tari_node_components::blocks::ChainBlock;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct Reorg {
pub new_height: u64,
pub new_hash: HashOutput,
pub prev_height: u64,
pub prev_hash: HashOutput,
pub num_blocks_added: u64,
pub num_blocks_removed: u64,
pub local_time: DateTime<Utc>,
}
impl Reorg {
pub fn from_reorged_blocks(added: &VecDeque<Arc<ChainBlock>>, removed: &[Arc<ChainBlock>]) -> Self {
Self {
new_height: added.front().map(|b| b.header().height).unwrap_or_default(),
new_hash: added.front().map(|b| *b.hash()).unwrap_or_default(),
prev_height: removed.first().map(|b| b.header().height).unwrap_or_default(),
prev_hash: removed.first().map(|b| *b.hash()).unwrap_or_default(),
num_blocks_added: added.len() as u64,
num_blocks_removed: removed.len() as u64,
local_time: Utc::now(),
}
}
}