cml_chain_wasm/builders/
input_builder.rs

1use crate::builders::{
2    tx_builder::TransactionUnspentOutput,
3    witness_builder::{NativeScriptWitnessInfo, PartialPlutusWitness},
4};
5use crate::{
6    plutus::PlutusData,
7    transaction::{TransactionInput, TransactionOutput},
8    NativeScript, RequiredSigners,
9};
10use cml_core_wasm::impl_wasm_conversions;
11use wasm_bindgen::prelude::{wasm_bindgen, JsError};
12
13#[wasm_bindgen]
14#[derive(Clone, Debug)]
15pub struct InputBuilderResult(cml_chain::builders::input_builder::InputBuilderResult);
16
17impl_wasm_conversions!(
18    cml_chain::builders::input_builder::InputBuilderResult,
19    InputBuilderResult
20);
21
22#[wasm_bindgen]
23#[derive(Clone)]
24pub struct SingleInputBuilder(cml_chain::builders::input_builder::SingleInputBuilder);
25
26impl_wasm_conversions!(
27    cml_chain::builders::input_builder::SingleInputBuilder,
28    SingleInputBuilder
29);
30
31#[wasm_bindgen]
32impl SingleInputBuilder {
33    pub fn new(input: &TransactionInput, utxo_info: &TransactionOutput) -> Self {
34        cml_chain::builders::input_builder::SingleInputBuilder::new(
35            input.clone().into(),
36            utxo_info.clone().into(),
37        )
38        .into()
39    }
40
41    pub fn from_transaction_unspent_output(utxo: &TransactionUnspentOutput) -> Self {
42        cml_chain::builders::input_builder::SingleInputBuilder::from(Into::<
43            cml_chain::builders::tx_builder::TransactionUnspentOutput,
44        >::into(utxo.clone()))
45        .into()
46    }
47
48    pub fn payment_key(&self) -> Result<InputBuilderResult, JsError> {
49        self.0
50            .clone()
51            .payment_key()
52            .map(Into::into)
53            .map_err(Into::into)
54    }
55
56    pub fn native_script(
57        &self,
58        native_script: &NativeScript,
59        witness_info: &NativeScriptWitnessInfo,
60    ) -> Result<InputBuilderResult, JsError> {
61        self.0
62            .clone()
63            .native_script(native_script.clone().into(), witness_info.clone().into())
64            .map(Into::into)
65            .map_err(Into::into)
66    }
67
68    pub fn plutus_script(
69        &self,
70        partial_witness: &PartialPlutusWitness,
71        required_signers: &RequiredSigners,
72        datum: &PlutusData,
73    ) -> Result<InputBuilderResult, JsError> {
74        self.0
75            .clone()
76            .plutus_script(
77                partial_witness.clone().into(),
78                required_signers.clone().into(),
79                datum.clone().into(),
80            )
81            .map(Into::into)
82            .map_err(Into::into)
83    }
84
85    pub fn plutus_script_inline_datum(
86        &self,
87        partial_witness: &PartialPlutusWitness,
88        required_signers: &RequiredSigners,
89    ) -> Result<InputBuilderResult, JsError> {
90        self.0
91            .clone()
92            .plutus_script_inline_datum(
93                partial_witness.clone().into(),
94                required_signers.clone().into(),
95            )
96            .map(Into::into)
97            .map_err(Into::into)
98    }
99}