use js_export_macro::js_export;
use miden_client::note::Note as NativeNote;
use miden_client::transaction::TransactionRequest as NativeTransactionRequest;
use crate::models::note::Note;
use crate::models::word::Word;
use crate::platform::{JsBytes, JsErr};
use crate::utils::{deserialize_from_bytes, serialize_to_bytes};
pub mod note_and_args;
pub mod note_details_and_tag;
pub mod note_id_and_args;
pub mod transaction_request_builder;
use note_details_and_tag::NoteDetailsAndTag;
#[derive(Clone)]
#[js_export]
pub struct TransactionRequest(NativeTransactionRequest);
#[js_export]
impl TransactionRequest {
pub fn serialize(&self) -> JsBytes {
serialize_to_bytes(&self.0)
}
pub fn deserialize(bytes: JsBytes) -> Result<TransactionRequest, JsErr> {
deserialize_from_bytes::<NativeTransactionRequest>(&bytes).map(TransactionRequest)
}
#[js_export(js_name = "expectedOutputOwnNotes")]
pub fn expected_output_own_notes(&self) -> Result<Vec<Note>, JsErr> {
let native_notes: Vec<NativeNote> = self.0.expected_output_own_notes();
let notes: Vec<Note> = native_notes.into_iter().map(Into::into).collect();
Ok(notes)
}
#[js_export(js_name = "expectedFutureNotes")]
pub fn expected_future_notes(&self) -> Result<Vec<NoteDetailsAndTag>, JsErr> {
self.0
.expected_future_notes()
.cloned() .map(|(note_details, note_tag)| {
Ok(NoteDetailsAndTag::new(
note_details.into(),
note_tag.into()
))
})
.collect::<Result<Vec<NoteDetailsAndTag>, _>>()
}
#[js_export(js_name = "scriptArg")]
pub fn script_arg(&self) -> Option<Word> {
self.0.script_arg().map(Word::from)
}
#[js_export(js_name = "authArg")]
pub fn auth_arg(&self) -> Option<Word> {
self.0.auth_arg().map(Word::from)
}
}
impl From<TransactionRequest> for NativeTransactionRequest {
fn from(transaction_request: TransactionRequest) -> Self {
transaction_request.0
}
}
impl From<&TransactionRequest> for NativeTransactionRequest {
fn from(transaction_request: &TransactionRequest) -> Self {
transaction_request.0.clone()
}
}
impl From<NativeTransactionRequest> for TransactionRequest {
fn from(transaction_request: NativeTransactionRequest) -> Self {
TransactionRequest(transaction_request)
}
}
impl From<&NativeTransactionRequest> for TransactionRequest {
fn from(transaction_request: &NativeTransactionRequest) -> Self {
TransactionRequest(transaction_request.clone())
}
}