1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
use crate::builders::{
    tx_builder::TransactionUnspentOutput,
    witness_builder::{NativeScriptWitnessInfo, PartialPlutusWitness},
};
use crate::{
    plutus::PlutusData,
    transaction::{TransactionInput, TransactionOutput},
    NativeScript, RequiredSigners,
};
use cml_core_wasm::impl_wasm_conversions;
use wasm_bindgen::prelude::{wasm_bindgen, JsError};

#[wasm_bindgen]
#[derive(Clone, Debug)]
pub struct InputBuilderResult(cml_chain::builders::input_builder::InputBuilderResult);

impl_wasm_conversions!(
    cml_chain::builders::input_builder::InputBuilderResult,
    InputBuilderResult
);

#[wasm_bindgen]
#[derive(Clone)]
pub struct SingleInputBuilder(cml_chain::builders::input_builder::SingleInputBuilder);

impl_wasm_conversions!(
    cml_chain::builders::input_builder::SingleInputBuilder,
    SingleInputBuilder
);

#[wasm_bindgen]
impl SingleInputBuilder {
    pub fn new(input: &TransactionInput, utxo_info: &TransactionOutput) -> Self {
        cml_chain::builders::input_builder::SingleInputBuilder::new(
            input.clone().into(),
            utxo_info.clone().into(),
        )
        .into()
    }

    pub fn from_transaction_unspent_output(utxo: &TransactionUnspentOutput) -> Self {
        cml_chain::builders::input_builder::SingleInputBuilder::from(Into::<
            cml_chain::builders::tx_builder::TransactionUnspentOutput,
        >::into(utxo.clone()))
        .into()
    }

    pub fn payment_key(&self) -> Result<InputBuilderResult, JsError> {
        self.0
            .clone()
            .payment_key()
            .map(Into::into)
            .map_err(Into::into)
    }

    pub fn native_script(
        &self,
        native_script: &NativeScript,
        witness_info: &NativeScriptWitnessInfo,
    ) -> Result<InputBuilderResult, JsError> {
        self.0
            .clone()
            .native_script(native_script.clone().into(), witness_info.clone().into())
            .map(Into::into)
            .map_err(Into::into)
    }

    pub fn plutus_script(
        &self,
        partial_witness: &PartialPlutusWitness,
        required_signers: &RequiredSigners,
        datum: &PlutusData,
    ) -> Result<InputBuilderResult, JsError> {
        self.0
            .clone()
            .plutus_script(
                partial_witness.clone().into(),
                required_signers.clone().into(),
                datum.clone().into(),
            )
            .map(Into::into)
            .map_err(Into::into)
    }

    pub fn plutus_script_inline_datum(
        &self,
        partial_witness: &PartialPlutusWitness,
        required_signers: &RequiredSigners,
    ) -> Result<InputBuilderResult, JsError> {
        self.0
            .clone()
            .plutus_script_inline_datum(
                partial_witness.clone().into(),
                required_signers.clone().into(),
            )
            .map(Into::into)
            .map_err(Into::into)
    }
}