cml_chain_wasm/builders/
proposal_builder.rs

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