use crate::entities::{
BlockHash, BlockNumber, CardanoBlockTransactionMkTreeNode, CardanoTransaction, SlotNumber,
TransactionHash,
};
#[derive(Debug, Clone, PartialEq)]
pub struct CardanoBlock {
pub block_hash: BlockHash,
pub block_number: BlockNumber,
pub slot_number: SlotNumber,
}
impl CardanoBlock {
pub fn new<U: Into<BlockHash>>(
block_hash: U,
block_number: BlockNumber,
slot_number: SlotNumber,
) -> Self {
Self {
block_hash: block_hash.into(),
block_number,
slot_number,
}
}
}
#[derive(Debug, Clone, PartialEq)]
pub struct CardanoBlockWithTransactions {
pub block_hash: BlockHash,
pub block_number: BlockNumber,
pub slot_number: SlotNumber,
pub transactions_hashes: Vec<TransactionHash>,
}
impl CardanoBlockWithTransactions {
pub fn new<U: Into<BlockHash>, T: Into<TransactionHash>>(
block_hash: U,
block_number: BlockNumber,
slot_number: SlotNumber,
tx_hashes: Vec<T>,
) -> Self {
Self {
block_hash: block_hash.into(),
block_number,
slot_number,
transactions_hashes: tx_hashes.into_iter().map(Into::into).collect(),
}
}
pub fn into_transactions(self) -> Vec<CardanoTransaction> {
self.transactions_hashes
.into_iter()
.map(|tx_hash| {
CardanoTransaction::new(
tx_hash,
self.block_number,
self.slot_number,
self.block_hash.clone(),
)
})
.collect()
}
pub fn into_mk_tree_node(self) -> Vec<CardanoBlockTransactionMkTreeNode> {
let mut result = Vec::with_capacity(self.transactions_hashes.len() + 1);
result.push(CardanoBlockTransactionMkTreeNode::Block {
block_hash: self.block_hash.clone(),
block_number: self.block_number,
slot_number: self.slot_number,
});
result.extend(self.transactions_hashes.into_iter().map(|tx_hash| {
CardanoBlockTransactionMkTreeNode::Transaction {
transaction_hash: tx_hash,
block_hash: self.block_hash.clone(),
block_number: self.block_number,
slot_number: self.slot_number,
}
}));
result
}
pub fn transactions_count(&self) -> usize {
self.transactions_hashes.len()
}
}
impl From<CardanoBlockWithTransactions> for CardanoBlock {
fn from(value: CardanoBlockWithTransactions) -> Self {
Self {
block_hash: value.block_hash,
block_number: value.block_number,
slot_number: value.slot_number,
}
}
}