cml_chain_wasm/builders/
vote_builder.rs

1use wasm_bindgen::{prelude::wasm_bindgen, JsError};
2
3use cml_core_wasm::impl_wasm_conversions;
4
5use crate::{
6    governance::{GovActionId, Voter, VotingProcedure},
7    plutus::PlutusData,
8    transaction::NativeScript,
9    RequiredSigners,
10};
11
12use super::witness_builder::{NativeScriptWitnessInfo, PartialPlutusWitness};
13
14#[wasm_bindgen]
15#[derive(Clone, Debug)]
16pub struct VoteBuilderResult(cml_chain::builders::vote_builder::VoteBuilderResult);
17
18impl_wasm_conversions!(
19    cml_chain::builders::vote_builder::VoteBuilderResult,
20    VoteBuilderResult
21);
22
23#[wasm_bindgen]
24#[derive(Clone, Debug)]
25pub struct VoteBuilder(cml_chain::builders::vote_builder::VoteBuilder);
26
27impl_wasm_conversions!(cml_chain::builders::vote_builder::VoteBuilder, VoteBuilder);
28
29#[wasm_bindgen]
30impl VoteBuilder {
31    pub fn new() -> Self {
32        Self(cml_chain::builders::vote_builder::VoteBuilder::new())
33    }
34
35    pub fn with_vote(
36        &self,
37        voter: &Voter,
38        gov_action_id: &GovActionId,
39        procedure: &VotingProcedure,
40    ) -> Result<VoteBuilder, JsError> {
41        self.0
42            .clone()
43            .with_vote(
44                voter.clone().into(),
45                gov_action_id.clone().into(),
46                procedure.clone().into(),
47            )
48            .map(Into::into)
49            .map_err(Into::into)
50    }
51
52    pub fn with_native_script_vote(
53        &self,
54        voter: &Voter,
55        gov_action_id: &GovActionId,
56        procedure: &VotingProcedure,
57        native_script: NativeScript,
58        witness_info: NativeScriptWitnessInfo,
59    ) -> Result<VoteBuilder, JsError> {
60        self.0
61            .clone()
62            .with_native_script_vote(
63                voter.clone().into(),
64                gov_action_id.clone().into(),
65                procedure.clone().into(),
66                native_script.clone().into(),
67                witness_info.clone().into(),
68            )
69            .map(Into::into)
70            .map_err(Into::into)
71    }
72
73    pub fn with_plutus_vote(
74        &self,
75        voter: &Voter,
76        gov_action_id: &GovActionId,
77        procedure: &VotingProcedure,
78        partial_witness: &PartialPlutusWitness,
79        required_signers: &RequiredSigners,
80        datum: &PlutusData,
81    ) -> Result<VoteBuilder, JsError> {
82        self.0
83            .clone()
84            .with_plutus_vote(
85                voter.clone().into(),
86                gov_action_id.clone().into(),
87                procedure.clone().into(),
88                partial_witness.clone().into(),
89                required_signers.clone().into(),
90                datum.clone().into(),
91            )
92            .map(Into::into)
93            .map_err(Into::into)
94    }
95
96    pub fn with_plutus_vote_inline_datum(
97        &self,
98        voter: &Voter,
99        gov_action_id: &GovActionId,
100        procedure: &VotingProcedure,
101        partial_witness: PartialPlutusWitness,
102        required_signers: RequiredSigners,
103    ) -> Result<VoteBuilder, JsError> {
104        self.0
105            .clone()
106            .with_plutus_vote_inline_datum(
107                voter.clone().into(),
108                gov_action_id.clone().into(),
109                procedure.clone().into(),
110                partial_witness.clone().into(),
111                required_signers.clone().into(),
112            )
113            .map(Into::into)
114            .map_err(Into::into)
115    }
116
117    pub fn build(&self) -> VoteBuilderResult {
118        self.0.clone().build().into()
119    }
120}