use js_export_macro::js_export;
use miden_client::transaction::TransactionScript as NativeTransactionScript;
use crate::models::package::Package;
use crate::models::word::Word;
use crate::platform::JsErr;
#[derive(Clone)]
#[js_export]
pub struct TransactionScript(NativeTransactionScript);
#[js_export]
impl TransactionScript {
pub fn root(&self) -> Word {
miden_client::Word::from(self.0.root()).into()
}
#[js_export(js_name = "fromPackage")]
pub fn from_package(package: &Package) -> Result<TransactionScript, JsErr> {
let program = package.as_program()?;
let native_transaction_script = NativeTransactionScript::new(program.into());
Ok(native_transaction_script.into())
}
}
impl From<NativeTransactionScript> for TransactionScript {
fn from(native_transaction_script: NativeTransactionScript) -> Self {
TransactionScript(native_transaction_script)
}
}
impl From<&NativeTransactionScript> for TransactionScript {
fn from(native_transaction_script: &NativeTransactionScript) -> Self {
TransactionScript(native_transaction_script.clone())
}
}
impl From<TransactionScript> for NativeTransactionScript {
fn from(transaction_script: TransactionScript) -> Self {
transaction_script.0
}
}
impl From<&TransactionScript> for NativeTransactionScript {
fn from(transaction_script: &TransactionScript) -> Self {
transaction_script.0.clone()
}
}