cml_chain_wasm/builders/
proposal_builder.rs1use 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}