use miden_client::Word as NativeWord;
use miden_client::transaction::TransactionId as NativeTransactionId;
use wasm_bindgen::prelude::*;
use super::felt::Felt;
use super::word::Word;
use crate::js_error_with_context;
#[derive(Clone)]
#[wasm_bindgen]
pub struct TransactionId(NativeTransactionId);
#[wasm_bindgen]
impl TransactionId {
#[wasm_bindgen(js_name = "fromHex")]
pub fn from_hex(hex: &str) -> Result<TransactionId, JsValue> {
let native_word = NativeWord::try_from(hex).map_err(|err| {
js_error_with_context(err, "error instantiating TransactionId from hex")
})?;
let native_tx_id = NativeTransactionId::from_raw(native_word);
Ok(TransactionId(native_tx_id))
}
#[wasm_bindgen(js_name = "asElements")]
pub fn as_elements(&self) -> Vec<Felt> {
self.0.as_elements().iter().map(Into::into).collect()
}
#[wasm_bindgen(js_name = "asBytes")]
pub fn as_bytes(&self) -> Vec<u8> {
self.0.as_bytes().to_vec()
}
#[wasm_bindgen(js_name = "toHex")]
pub fn to_hex(&self) -> String {
self.0.to_hex()
}
pub fn inner(&self) -> Word {
self.0.as_word().into()
}
}
impl From<NativeTransactionId> for TransactionId {
fn from(native_id: NativeTransactionId) -> Self {
TransactionId(native_id)
}
}
impl From<&NativeTransactionId> for TransactionId {
fn from(native_id: &NativeTransactionId) -> Self {
TransactionId(*native_id)
}
}
impl From<TransactionId> for NativeTransactionId {
fn from(transaction_id: TransactionId) -> Self {
transaction_id.0
}
}
impl From<&TransactionId> for NativeTransactionId {
fn from(id: &TransactionId) -> Self {
id.0
}
}