cml_chain_wasm/builders/
redeemer_builder.rs1use super::{
2 certificate_builder::CertificateBuilderResult, input_builder::InputBuilderResult,
3 mint_builder::MintBuilderResult, proposal_builder::ProposalBuilderResult,
4 vote_builder::VoteBuilderResult, withdrawal_builder::WithdrawalBuilderResult,
5};
6use crate::plutus::{ExUnits, LegacyRedeemer, PlutusData, RedeemerTag, Redeemers};
7use cml_core_wasm::impl_wasm_conversions;
8use wasm_bindgen::prelude::{wasm_bindgen, JsError};
9
10#[wasm_bindgen]
11#[derive(Clone, Copy, PartialOrd, Ord, Debug, PartialEq, Eq, Hash)]
12pub struct RedeemerWitnessKey(cml_chain::builders::redeemer_builder::RedeemerWitnessKey);
13
14impl_wasm_conversions!(
15 cml_chain::builders::redeemer_builder::RedeemerWitnessKey,
16 RedeemerWitnessKey
17);
18
19#[wasm_bindgen]
20impl RedeemerWitnessKey {
21 pub fn new(tag: RedeemerTag, index: u64) -> Self {
22 cml_chain::builders::redeemer_builder::RedeemerWitnessKey::new(tag, index).into()
23 }
24
25 pub fn from_redeemer(redeemer: &LegacyRedeemer) -> Self {
26 cml_chain::builders::redeemer_builder::RedeemerWitnessKey::from(redeemer.as_ref()).into()
27 }
28}
29
30#[wasm_bindgen]
34#[derive(Clone, Debug)]
35pub struct UntaggedRedeemer(cml_chain::builders::redeemer_builder::UntaggedRedeemer);
36
37impl_wasm_conversions!(
38 cml_chain::builders::redeemer_builder::UntaggedRedeemer,
39 UntaggedRedeemer
40);
41
42#[wasm_bindgen]
43impl UntaggedRedeemer {
44 pub fn new(data: &PlutusData, ex_units: &ExUnits) -> Self {
45 cml_chain::builders::redeemer_builder::UntaggedRedeemer::new(
46 data.clone().into(),
47 ex_units.clone().into(),
48 )
49 .into()
50 }
51}
52
53#[wasm_bindgen]
56#[derive(Clone, Default, Debug)]
57pub struct RedeemerSetBuilder(cml_chain::builders::redeemer_builder::RedeemerSetBuilder);
58
59impl_wasm_conversions!(
60 cml_chain::builders::redeemer_builder::RedeemerSetBuilder,
61 RedeemerSetBuilder
62);
63
64#[wasm_bindgen]
65impl RedeemerSetBuilder {
66 pub fn new() -> Self {
67 Self::default()
68 }
69
70 pub fn is_empty(&self) -> bool {
71 self.0.is_empty()
72 }
73
74 pub fn update_ex_units(&mut self, key: &RedeemerWitnessKey, ex_units: &ExUnits) {
76 self.0
77 .update_ex_units((*key).into(), ex_units.clone().into());
78 }
79
80 pub fn add_spend(&mut self, result: &InputBuilderResult) {
81 self.0.add_spend(result.as_ref());
82 }
83
84 pub fn add_mint(&mut self, result: &MintBuilderResult) {
85 self.0.add_mint(result.as_ref());
86 }
87
88 pub fn add_reward(&mut self, result: &WithdrawalBuilderResult) {
89 self.0.add_reward(result.as_ref());
90 }
91
92 pub fn add_cert(&mut self, result: &CertificateBuilderResult) {
93 self.0.add_cert(result.as_ref());
94 }
95
96 pub fn add_proposal(&mut self, result: &ProposalBuilderResult) {
97 self.0.add_proposal(result.as_ref());
98 }
99
100 pub fn add_vote(&mut self, result: &VoteBuilderResult) {
101 self.0.add_vote(result.as_ref());
102 }
103
104 pub fn build(&self, default_to_dummy_exunits: bool) -> Result<Redeemers, JsError> {
105 self.0
106 .build(default_to_dummy_exunits)
107 .map(Into::into)
108 .map_err(Into::into)
109 }
110}