use js_export_macro::js_export;
use miden_client::{Felt as NativeFelt, Word as NativeWord};
use super::miden_arrays::FeltArray;
use super::word::Word;
use crate::models::miden_arrays::TransactionScriptInputPairArray;
#[derive(Clone)]
#[js_export]
pub struct TransactionScriptInputPair {
word: Word,
felts: FeltArray,
}
#[js_export]
impl TransactionScriptInputPair {
#[js_export(constructor)]
pub fn new(word: Word, felts: FeltArray) -> TransactionScriptInputPair {
TransactionScriptInputPair { word, felts }
}
pub fn word(&self) -> Word {
self.word.clone()
}
pub fn felts(&self) -> FeltArray {
self.felts.clone()
}
}
impl From<TransactionScriptInputPair> for (NativeWord, Vec<NativeFelt>) {
fn from(transaction_script_input_pair: TransactionScriptInputPair) -> Self {
let native_word: NativeWord = transaction_script_input_pair.word.into();
let native_felts: Vec<NativeFelt> =
transaction_script_input_pair.felts.into_iter().map(Into::into).collect();
(native_word, native_felts)
}
}
impl From<&TransactionScriptInputPair> for (NativeWord, Vec<NativeFelt>) {
fn from(transaction_script_input_pair: &TransactionScriptInputPair) -> Self {
let native_word: NativeWord = transaction_script_input_pair.word.clone().into();
let native_felts: Vec<NativeFelt> =
transaction_script_input_pair.felts.iter().map(Into::into).collect();
(native_word, native_felts)
}
}
impl From<TransactionScriptInputPairArray> for Vec<(NativeWord, Vec<NativeFelt>)> {
fn from(transaction_script_input_pair_array: TransactionScriptInputPairArray) -> Self {
transaction_script_input_pair_array.into_iter().map(Into::into).collect()
}
}
impl From<&TransactionScriptInputPairArray> for Vec<(NativeWord, Vec<NativeFelt>)> {
fn from(transaction_script_input_pair_array: &TransactionScriptInputPairArray) -> Self {
transaction_script_input_pair_array.iter().map(Into::into).collect()
}
}
impl_napi_from_value!(TransactionScriptInputPair);