cml_chain_wasm/plutus/
mod.rs

1pub mod utils;
2
3// This file was code-generated using an experimental CDDL to rust tool:
4// https://github.com/dcSpark/cddl-codegen
5
6use crate::utils::BigInteger;
7
8use super::{PlutusDataList, SubCoin};
9use crate::{LegacyRedeemerList, MapRedeemerKeyToRedeemerVal};
10pub use cml_chain::plutus::{Language, RedeemerTag};
11use cml_core_wasm::{impl_wasm_cbor_json_api, impl_wasm_conversions, impl_wasm_map};
12pub use utils::{ConstrPlutusData, PlutusMap};
13use wasm_bindgen::prelude::wasm_bindgen;
14
15impl_wasm_map!(
16    u64,
17    Vec<i64>,
18    u64,
19    Vec<i64>,
20    Vec<u64>,
21    MapU64ToArrI64,
22    true,
23    true,
24    true,
25    false
26);
27
28#[derive(Clone, Debug)]
29#[wasm_bindgen]
30pub struct CostModels(cml_chain::plutus::CostModels);
31
32impl_wasm_cbor_json_api!(CostModels);
33
34impl_wasm_conversions!(cml_chain::plutus::CostModels, CostModels);
35
36#[wasm_bindgen]
37impl CostModels {
38    pub fn inner(&self) -> MapU64ToArrI64 {
39        self.0.inner.clone().into()
40    }
41}
42
43#[derive(Clone, Debug)]
44#[wasm_bindgen]
45pub struct ExUnitPrices(cml_chain::plutus::ExUnitPrices);
46
47impl_wasm_cbor_json_api!(ExUnitPrices);
48
49impl_wasm_conversions!(cml_chain::plutus::ExUnitPrices, ExUnitPrices);
50
51#[wasm_bindgen]
52impl ExUnitPrices {
53    pub fn mem_price(&self) -> SubCoin {
54        self.0.mem_price.clone().into()
55    }
56
57    pub fn step_price(&self) -> SubCoin {
58        self.0.step_price.clone().into()
59    }
60
61    pub fn new(mem_price: &SubCoin, step_price: &SubCoin) -> Self {
62        Self(cml_chain::plutus::ExUnitPrices::new(
63            mem_price.clone().into(),
64            step_price.clone().into(),
65        ))
66    }
67}
68
69#[derive(Clone, Debug)]
70#[wasm_bindgen]
71pub struct ExUnits(cml_chain::plutus::ExUnits);
72
73impl_wasm_cbor_json_api!(ExUnits);
74
75impl_wasm_conversions!(cml_chain::plutus::ExUnits, ExUnits);
76
77#[wasm_bindgen]
78impl ExUnits {
79    pub fn mem(&self) -> u64 {
80        self.0.mem
81    }
82
83    pub fn steps(&self) -> u64 {
84        self.0.steps
85    }
86
87    pub fn new(mem: u64, steps: u64) -> Self {
88        Self(cml_chain::plutus::ExUnits::new(mem, steps))
89    }
90}
91
92#[derive(Clone, Debug)]
93#[wasm_bindgen]
94pub struct LegacyRedeemer(cml_chain::plutus::LegacyRedeemer);
95
96impl_wasm_cbor_json_api!(LegacyRedeemer);
97
98impl_wasm_conversions!(cml_chain::plutus::LegacyRedeemer, LegacyRedeemer);
99
100#[wasm_bindgen]
101impl LegacyRedeemer {
102    pub fn tag(&self) -> RedeemerTag {
103        self.0.tag
104    }
105
106    pub fn index(&self) -> u64 {
107        self.0.index
108    }
109
110    pub fn data(&self) -> PlutusData {
111        self.0.data.clone().into()
112    }
113
114    pub fn ex_units(&self) -> ExUnits {
115        self.0.ex_units.clone().into()
116    }
117
118    pub fn new(tag: RedeemerTag, index: u64, data: &PlutusData, ex_units: &ExUnits) -> Self {
119        Self(cml_chain::plutus::LegacyRedeemer::new(
120            tag,
121            index,
122            data.clone().into(),
123            ex_units.clone().into(),
124        ))
125    }
126}
127
128#[derive(Clone, Debug)]
129#[wasm_bindgen]
130pub struct PlutusData(cml_chain::plutus::PlutusData);
131
132impl_wasm_cbor_json_api!(PlutusData);
133
134impl_wasm_conversions!(cml_chain::plutus::PlutusData, PlutusData);
135
136#[wasm_bindgen]
137impl PlutusData {
138    pub fn new_constr_plutus_data(constr_plutus_data: &ConstrPlutusData) -> Self {
139        Self(cml_chain::plutus::PlutusData::new_constr_plutus_data(
140            constr_plutus_data.clone().into(),
141        ))
142    }
143
144    pub fn new_map(map: &PlutusMap) -> Self {
145        Self(cml_chain::plutus::PlutusData::new_map(map.clone().into()))
146    }
147
148    pub fn new_list(list: &PlutusDataList) -> Self {
149        Self(cml_chain::plutus::PlutusData::new_list(list.clone().into()))
150    }
151
152    pub fn new_integer(big_int: &BigInteger) -> Self {
153        Self(cml_chain::plutus::PlutusData::new_integer(
154            big_int.clone().into(),
155        ))
156    }
157
158    pub fn new_bytes(bytes: Vec<u8>) -> Self {
159        Self(cml_chain::plutus::PlutusData::new_bytes(bytes))
160    }
161
162    pub fn kind(&self) -> PlutusDataKind {
163        match &self.0 {
164            cml_chain::plutus::PlutusData::ConstrPlutusData(_) => PlutusDataKind::ConstrPlutusData,
165            cml_chain::plutus::PlutusData::Map { .. } => PlutusDataKind::Map,
166            cml_chain::plutus::PlutusData::List { .. } => PlutusDataKind::List,
167            cml_chain::plutus::PlutusData::Integer(_) => PlutusDataKind::Integer,
168            cml_chain::plutus::PlutusData::Bytes { .. } => PlutusDataKind::Bytes,
169        }
170    }
171
172    pub fn as_constr_plutus_data(&self) -> Option<ConstrPlutusData> {
173        match &self.0 {
174            cml_chain::plutus::PlutusData::ConstrPlutusData(constr_plutus_data) => {
175                Some(constr_plutus_data.clone().into())
176            }
177            _ => None,
178        }
179    }
180
181    pub fn as_map(&self) -> Option<PlutusMap> {
182        match &self.0 {
183            cml_chain::plutus::PlutusData::Map(map) => Some(map.clone().into()),
184            _ => None,
185        }
186    }
187
188    pub fn as_list(&self) -> Option<PlutusDataList> {
189        match &self.0 {
190            cml_chain::plutus::PlutusData::List { list, .. } => Some(list.clone().into()),
191            _ => None,
192        }
193    }
194
195    pub fn as_integer(&self) -> Option<BigInteger> {
196        match &self.0 {
197            cml_chain::plutus::PlutusData::Integer(big_int) => Some(big_int.clone().into()),
198            _ => None,
199        }
200    }
201
202    pub fn as_bytes(&self) -> Option<Vec<u8>> {
203        match &self.0 {
204            cml_chain::plutus::PlutusData::Bytes { bytes, .. } => Some(bytes.clone()),
205            _ => None,
206        }
207    }
208}
209
210#[wasm_bindgen]
211pub enum PlutusDataKind {
212    ConstrPlutusData,
213    Map,
214    List,
215    Integer,
216    Bytes,
217}
218
219#[derive(Clone, Debug)]
220#[wasm_bindgen]
221pub struct PlutusV1Script(cml_chain::plutus::PlutusV1Script);
222
223impl_wasm_cbor_json_api!(PlutusV1Script);
224
225impl_wasm_conversions!(cml_chain::plutus::PlutusV1Script, PlutusV1Script);
226
227#[derive(Clone, Debug)]
228#[wasm_bindgen]
229pub struct PlutusV2Script(cml_chain::plutus::PlutusV2Script);
230
231impl_wasm_cbor_json_api!(PlutusV2Script);
232
233impl_wasm_conversions!(cml_chain::plutus::PlutusV2Script, PlutusV2Script);
234
235#[derive(Clone, Debug)]
236#[wasm_bindgen]
237pub struct PlutusV3Script(cml_chain::plutus::PlutusV3Script);
238
239impl_wasm_cbor_json_api!(PlutusV3Script);
240
241impl_wasm_conversions!(cml_chain::plutus::PlutusV3Script, PlutusV3Script);
242
243#[derive(Clone, Debug)]
244#[wasm_bindgen]
245pub struct RedeemerKey(cml_chain::plutus::RedeemerKey);
246
247impl_wasm_cbor_json_api!(RedeemerKey);
248
249impl_wasm_conversions!(cml_chain::plutus::RedeemerKey, RedeemerKey);
250
251#[wasm_bindgen]
252impl RedeemerKey {
253    pub fn tag(&self) -> RedeemerTag {
254        self.0.tag
255    }
256
257    pub fn index(&self) -> u64 {
258        self.0.index
259    }
260
261    pub fn new(tag: RedeemerTag, index: u64) -> Self {
262        Self(cml_chain::plutus::RedeemerKey::new(tag, index))
263    }
264}
265
266#[derive(Clone, Debug)]
267#[wasm_bindgen]
268pub struct RedeemerVal(cml_chain::plutus::RedeemerVal);
269
270impl_wasm_cbor_json_api!(RedeemerVal);
271
272impl_wasm_conversions!(cml_chain::plutus::RedeemerVal, RedeemerVal);
273
274#[wasm_bindgen]
275impl RedeemerVal {
276    pub fn data(&self) -> PlutusData {
277        self.0.data.clone().into()
278    }
279
280    pub fn ex_units(&self) -> ExUnits {
281        self.0.ex_units.clone().into()
282    }
283
284    pub fn new(data: &PlutusData, ex_units: &ExUnits) -> Self {
285        Self(cml_chain::plutus::RedeemerVal::new(
286            data.clone().into(),
287            ex_units.clone().into(),
288        ))
289    }
290}
291
292#[derive(Clone, Debug)]
293#[wasm_bindgen]
294pub struct Redeemers(cml_chain::plutus::Redeemers);
295
296impl_wasm_cbor_json_api!(Redeemers);
297
298impl_wasm_conversions!(cml_chain::plutus::Redeemers, Redeemers);
299
300#[wasm_bindgen]
301impl Redeemers {
302    pub fn new_arr_legacy_redeemer(arr_legacy_redeemer: &LegacyRedeemerList) -> Self {
303        Self(cml_chain::plutus::Redeemers::new_arr_legacy_redeemer(
304            arr_legacy_redeemer.clone().into(),
305        ))
306    }
307
308    pub fn new_map_redeemer_key_to_redeemer_val(
309        map_redeemer_key_to_redeemer_val: &MapRedeemerKeyToRedeemerVal,
310    ) -> Self {
311        Self(
312            cml_chain::plutus::Redeemers::new_map_redeemer_key_to_redeemer_val(
313                map_redeemer_key_to_redeemer_val.clone().into(),
314            ),
315        )
316    }
317
318    pub fn kind(&self) -> RedeemersKind {
319        match &self.0 {
320            cml_chain::plutus::Redeemers::ArrLegacyRedeemer { .. } => {
321                RedeemersKind::ArrLegacyRedeemer
322            }
323            cml_chain::plutus::Redeemers::MapRedeemerKeyToRedeemerVal { .. } => {
324                RedeemersKind::MapRedeemerKeyToRedeemerVal
325            }
326        }
327    }
328
329    pub fn as_arr_legacy_redeemer(&self) -> Option<LegacyRedeemerList> {
330        match &self.0 {
331            cml_chain::plutus::Redeemers::ArrLegacyRedeemer {
332                arr_legacy_redeemer,
333                ..
334            } => Some(arr_legacy_redeemer.clone().into()),
335            _ => None,
336        }
337    }
338
339    pub fn as_map_redeemer_key_to_redeemer_val(&self) -> Option<MapRedeemerKeyToRedeemerVal> {
340        match &self.0 {
341            cml_chain::plutus::Redeemers::MapRedeemerKeyToRedeemerVal {
342                map_redeemer_key_to_redeemer_val,
343                ..
344            } => Some(map_redeemer_key_to_redeemer_val.clone().into()),
345            _ => None,
346        }
347    }
348}
349
350#[wasm_bindgen]
351pub enum RedeemersKind {
352    ArrLegacyRedeemer,
353    MapRedeemerKeyToRedeemerVal,
354}