use crate::crypto_helper::MKTreeNode;
use super::{BlockNumber, ImmutableFileNumber};
pub type TransactionHash = String;
#[derive(Debug, PartialEq, Clone)]
pub struct CardanoTransaction {
pub transaction_hash: TransactionHash,
pub block_number: BlockNumber,
pub immutable_file_number: ImmutableFileNumber,
}
impl CardanoTransaction {
pub fn new(
hash: &str,
block_number: BlockNumber,
immutable_file_number: ImmutableFileNumber,
) -> Self {
Self {
transaction_hash: hash.to_owned(),
block_number,
immutable_file_number,
}
}
}
impl From<CardanoTransaction> for MKTreeNode {
fn from(other: CardanoTransaction) -> Self {
(&other).into()
}
}
impl From<&CardanoTransaction> for MKTreeNode {
fn from(other: &CardanoTransaction) -> Self {
MKTreeNode::new(other.transaction_hash.as_bytes().to_vec())
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_convert_cardano_transaction_to_merkle_tree_node() {
let transaction = CardanoTransaction {
transaction_hash: "tx-hash-123".to_string(),
block_number: 1,
immutable_file_number: 1,
};
let computed_mktree_node: MKTreeNode = transaction.into();
let expected_mk_tree_node = MKTreeNode::new("tx-hash-123".as_bytes().to_vec());
let non_expected_mk_tree_node = MKTreeNode::new("tx-hash-456".as_bytes().to_vec());
assert_eq!(expected_mk_tree_node, computed_mktree_node);
assert_ne!(non_expected_mk_tree_node, computed_mktree_node);
}
}