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