use js_export_macro::js_export;
use miden_client::sync::SyncSummary as NativeSyncSummary;
use crate::models::account_id::AccountId;
use crate::models::note_id::NoteId;
use crate::models::transaction_id::TransactionId;
use crate::platform::{JsBytes, JsErr};
use crate::utils::{deserialize_from_bytes, serialize_to_bytes};
#[js_export]
pub struct SyncSummary(NativeSyncSummary);
#[js_export]
impl SyncSummary {
#[js_export(js_name = "blockNum")]
pub fn block_num(&self) -> u32 {
self.0.block_num.as_u32()
}
#[js_export(js_name = "committedNotes")]
pub fn committed_notes(&self) -> Vec<NoteId> {
self.0.committed_notes.iter().map(Into::into).collect()
}
#[js_export(js_name = "consumedNotes")]
pub fn consumed_notes(&self) -> Vec<NoteId> {
self.0.consumed_notes.iter().map(Into::into).collect()
}
#[js_export(js_name = "updatedAccounts")]
pub fn updated_accounts(&self) -> Vec<AccountId> {
self.0.updated_accounts.iter().map(Into::into).collect()
}
#[js_export(js_name = "committedTransactions")]
pub fn committed_transactions(&self) -> Vec<TransactionId> {
self.0.committed_transactions.iter().map(Into::into).collect()
}
pub fn serialize(&self) -> JsBytes {
serialize_to_bytes(&self.0)
}
pub fn deserialize(bytes: JsBytes) -> Result<SyncSummary, JsErr> {
deserialize_from_bytes::<NativeSyncSummary>(&bytes).map(SyncSummary)
}
}
impl From<NativeSyncSummary> for SyncSummary {
fn from(native_sync_summary: NativeSyncSummary) -> Self {
SyncSummary(native_sync_summary)
}
}