use js_export_macro::js_export;
use miden_client::transaction::TransactionSummary as NativeTransactionSummary;
use super::account_delta::AccountDelta;
use super::input_notes::InputNotes;
use super::output_notes::OutputNotes;
use super::word::Word;
use crate::platform::{JsBytes, JsErr};
use crate::utils::{deserialize_from_bytes, serialize_to_bytes};
#[derive(Clone)]
#[js_export]
pub struct TransactionSummary(NativeTransactionSummary);
#[js_export]
impl TransactionSummary {
pub fn serialize(&self) -> JsBytes {
serialize_to_bytes(&self.0)
}
pub fn deserialize(bytes: JsBytes) -> Result<TransactionSummary, JsErr> {
deserialize_from_bytes::<NativeTransactionSummary>(&bytes).map(TransactionSummary)
}
#[js_export(js_name = "accountDelta")]
pub fn account_delta(&self) -> Result<AccountDelta, JsErr> {
Ok(self.0.account_delta().into())
}
#[js_export(js_name = "inputNotes")]
pub fn input_notes(&self) -> Result<InputNotes, JsErr> {
Ok(self.0.input_notes().into())
}
#[js_export(js_name = "outputNotes")]
pub fn output_notes(&self) -> Result<OutputNotes, JsErr> {
Ok(self.0.output_notes().into())
}
pub fn salt(&self) -> Result<Word, JsErr> {
Ok(self.0.salt().into())
}
#[js_export(js_name = "toCommitment")]
pub fn to_commitment(&self) -> Word {
self.0.to_commitment().into()
}
}
impl From<TransactionSummary> for NativeTransactionSummary {
fn from(transaction_summary: TransactionSummary) -> Self {
transaction_summary.0
}
}
impl From<&TransactionSummary> for NativeTransactionSummary {
fn from(transaction_summary: &TransactionSummary) -> Self {
transaction_summary.0.clone()
}
}
impl From<NativeTransactionSummary> for TransactionSummary {
fn from(transaction_summary: NativeTransactionSummary) -> Self {
TransactionSummary(transaction_summary)
}
}
impl From<&NativeTransactionSummary> for TransactionSummary {
fn from(transaction_summary: &NativeTransactionSummary) -> Self {
TransactionSummary(transaction_summary.clone())
}
}
impl_napi_from_value!(TransactionSummary);