use crate::imports::*;
use crate::result::Result;
use kaspa_txscript::script_builder::ScriptBuilder as Inner;
#[derive(Clone)]
#[wasm_bindgen]
pub struct ScriptBuilder {
inner: Arc<Mutex<Inner>>,
}
impl ScriptBuilder {
pub fn inner(&self) -> MutexGuard<'_, Inner> {
self.inner.lock().unwrap()
}
}
#[wasm_bindgen]
impl ScriptBuilder {
pub fn script(&self) -> String {
let inner = self.inner();
let script = inner.script();
script.to_hex()
}
pub fn drain(&self) -> String {
let mut inner = self.inner();
let script = inner.drain();
script.to_hex()
}
#[wasm_bindgen(js_name = "addOp")]
pub fn add_op(&self, opcode: u8) -> Result<ScriptBuilder> {
self.inner().add_op(opcode)?;
Ok(self.clone())
}
#[wasm_bindgen(js_name = "addOps")]
pub fn add_ops(&self, opcodes: JsValue) -> Result<ScriptBuilder> {
let opcodes = opcodes.try_as_vec_u8()?;
self.inner().add_ops(&opcodes)?;
Ok(self.clone())
}
#[wasm_bindgen(js_name = "addData")]
pub fn add_data(&self, data: JsValue) -> Result<ScriptBuilder> {
let data = data.try_as_vec_u8()?;
self.inner().add_data(&data)?;
Ok(self.clone())
}
#[wasm_bindgen(js_name = "addI64")]
pub fn add_i64(&self, val: i64) -> Result<ScriptBuilder> {
self.inner().add_i64(val)?;
Ok(self.clone())
}
#[wasm_bindgen(js_name = "addLockTime")]
pub fn add_lock_time(&self, lock_time: u64) -> Result<ScriptBuilder> {
self.inner().add_lock_time(lock_time)?;
Ok(self.clone())
}
#[wasm_bindgen(js_name = "addSequence")]
pub fn add_sequence(&self, sequence: u64) -> Result<ScriptBuilder> {
self.inner().add_sequence(sequence)?;
Ok(self.clone())
}
}