cml_chain_wasm/byron/
mod.rs

1#![allow(
2    clippy::len_without_is_empty,
3    clippy::too_many_arguments,
4    clippy::new_without_default
5)]
6// This file was code-generated using an experimental CDDL to rust tool:
7// https://github.com/dcSpark/cddl-codegen
8
9pub mod crc32;
10pub mod utils;
11
12pub use self::crc32::Crc32;
13pub use self::utils::{AddressId, ByronScript, ProtocolMagic, StakeholderId};
14pub use cml_chain::byron::ByronAddrType;
15use cml_core_wasm::{impl_wasm_cbor_event_serialize_api, impl_wasm_conversions};
16use cml_crypto_wasm::{Bip32PublicKey, PublicKey};
17use wasm_bindgen::prelude::wasm_bindgen;
18
19#[derive(Clone, Debug)]
20#[wasm_bindgen]
21pub struct AddrAttributes(cml_chain::byron::AddrAttributes);
22
23impl_wasm_conversions!(cml_chain::byron::AddrAttributes, AddrAttributes);
24
25impl_wasm_cbor_event_serialize_api!(AddrAttributes);
26
27#[wasm_bindgen]
28impl AddrAttributes {
29    pub fn set_stake_distribution(&mut self, stake_distribution: &StakeDistribution) {
30        self.0.stake_distribution = Some(stake_distribution.clone().into())
31    }
32
33    pub fn stake_distribution(&self) -> Option<StakeDistribution> {
34        self.0
35            .stake_distribution
36            .clone()
37            .map(std::convert::Into::into)
38    }
39
40    pub fn set_derivation_path(&mut self, derivation_path: &HDAddressPayload) {
41        self.0.derivation_path = Some(derivation_path.clone().into())
42    }
43
44    pub fn derivation_path(&self) -> Option<HDAddressPayload> {
45        self.0.derivation_path.clone().map(std::convert::Into::into)
46    }
47
48    pub fn set_protocol_magic(&mut self, protocol_magic: &ProtocolMagic) {
49        self.0.protocol_magic = Some((*protocol_magic).into())
50    }
51
52    pub fn protocol_magic(&self) -> Option<ProtocolMagic> {
53        self.0.protocol_magic.map(std::convert::Into::into)
54    }
55
56    pub fn new() -> Self {
57        Self(cml_chain::byron::AddrAttributes::new())
58    }
59}
60
61#[derive(Clone, Debug)]
62#[wasm_bindgen]
63pub struct AddressContent(cml_chain::byron::AddressContent);
64
65impl_wasm_conversions!(cml_chain::byron::AddressContent, AddressContent);
66
67impl_wasm_cbor_event_serialize_api!(AddressContent);
68
69#[wasm_bindgen]
70impl AddressContent {
71    pub fn address_id(&self) -> AddressId {
72        self.0.address_id.into()
73    }
74
75    pub fn addr_attributes(&self) -> AddrAttributes {
76        self.0.addr_attributes.clone().into()
77    }
78
79    pub fn addr_type(&self) -> ByronAddrType {
80        self.0.addr_type
81    }
82
83    pub fn new(
84        address_id: &AddressId,
85        addr_attributes: &AddrAttributes,
86        addr_type: ByronAddrType,
87    ) -> Self {
88        Self(cml_chain::byron::AddressContent::new(
89            address_id.clone().into(),
90            addr_attributes.clone().into(),
91            addr_type,
92        ))
93    }
94}
95
96#[derive(Clone, Debug)]
97#[wasm_bindgen]
98pub struct ByronAddress(cml_chain::byron::ByronAddress);
99
100impl_wasm_conversions!(cml_chain::byron::ByronAddress, ByronAddress);
101
102impl_wasm_cbor_event_serialize_api!(ByronAddress);
103
104#[wasm_bindgen]
105impl ByronAddress {
106    pub fn content(&self) -> AddressContent {
107        self.0.content.clone().into()
108    }
109
110    pub fn crc(&self) -> Crc32 {
111        self.0.crc.into()
112    }
113
114    pub fn new(content: &AddressContent, crc: &Crc32) -> Self {
115        Self(cml_chain::byron::ByronAddress::new(
116            content.clone().into(),
117            (*crc).into(),
118        ))
119    }
120}
121
122#[derive(Clone, Debug)]
123#[wasm_bindgen]
124pub struct HDAddressPayload(cml_chain::byron::HDAddressPayload);
125
126impl_wasm_conversions!(cml_chain::byron::HDAddressPayload, HDAddressPayload);
127
128impl_wasm_cbor_event_serialize_api!(HDAddressPayload);
129
130#[wasm_bindgen]
131impl HDAddressPayload {
132    pub fn get(&self) -> Vec<u8> {
133        self.0.get().clone()
134    }
135}
136
137#[derive(Clone, Debug)]
138#[wasm_bindgen]
139pub struct SpendingData(cml_chain::byron::SpendingData);
140
141impl_wasm_conversions!(cml_chain::byron::SpendingData, SpendingData);
142
143impl_wasm_cbor_event_serialize_api!(SpendingData);
144
145#[wasm_bindgen]
146impl SpendingData {
147    pub fn new_spending_data_pub_key(pubkey: &Bip32PublicKey) -> Self {
148        Self(cml_chain::byron::SpendingData::new_spending_data_pub_key(
149            (*pubkey).clone().into(),
150        ))
151    }
152
153    pub fn new_spending_data_script(script: &ByronScript) -> Self {
154        Self(cml_chain::byron::SpendingData::new_spending_data_script(
155            script.clone().into(),
156        ))
157    }
158
159    pub fn new_spending_data_redeem(redeem: &PublicKey) -> Self {
160        Self(cml_chain::byron::SpendingData::new_spending_data_redeem(
161            redeem.clone().into(),
162        ))
163    }
164
165    pub fn kind(&self) -> SpendingDataKind {
166        match &self.0 {
167            cml_chain::byron::SpendingData::SpendingDataPubKey(_) => {
168                SpendingDataKind::SpendingDataPubKey
169            }
170            cml_chain::byron::SpendingData::SpendingDataScript(_) => {
171                SpendingDataKind::SpendingDataScript
172            }
173            cml_chain::byron::SpendingData::SpendingDataRedeem(_) => {
174                SpendingDataKind::SpendingDataRedeem
175            }
176        }
177    }
178
179    pub fn as_spending_data_pub_key(&self) -> Option<Bip32PublicKey> {
180        match &self.0 {
181            cml_chain::byron::SpendingData::SpendingDataPubKey(pubkey) => {
182                Some(pubkey.clone().into())
183            }
184            _ => None,
185        }
186    }
187
188    pub fn as_spending_data_script(&self) -> Option<ByronScript> {
189        match &self.0 {
190            cml_chain::byron::SpendingData::SpendingDataScript(script) => Some((*script).into()),
191            _ => None,
192        }
193    }
194
195    pub fn as_spending_data_redeem(&self) -> Option<PublicKey> {
196        match &self.0 {
197            cml_chain::byron::SpendingData::SpendingDataRedeem(redeem) => {
198                Some(redeem.clone().into())
199            }
200            _ => None,
201        }
202    }
203}
204
205#[wasm_bindgen]
206pub enum SpendingDataKind {
207    SpendingDataPubKey,
208    SpendingDataScript,
209    SpendingDataRedeem,
210}
211
212#[derive(Clone, Debug)]
213#[wasm_bindgen]
214pub struct StakeDistribution(cml_chain::byron::StakeDistribution);
215
216impl_wasm_conversions!(cml_chain::byron::StakeDistribution, StakeDistribution);
217
218impl_wasm_cbor_event_serialize_api!(StakeDistribution);
219
220#[wasm_bindgen]
221impl StakeDistribution {
222    pub fn new_single_key(stakeholder_id: &StakeholderId) -> Self {
223        Self(cml_chain::byron::StakeDistribution::new_single_key(
224            stakeholder_id.clone().into(),
225        ))
226    }
227
228    pub fn new_bootstrap_era() -> Self {
229        Self(cml_chain::byron::StakeDistribution::new_bootstrap_era())
230    }
231
232    pub fn kind(&self) -> StakeDistributionKind {
233        match &self.0 {
234            cml_chain::byron::StakeDistribution::SingleKey(_) => StakeDistributionKind::SingleKey,
235            cml_chain::byron::StakeDistribution::BootstrapEra => {
236                StakeDistributionKind::BootstrapEra
237            }
238        }
239    }
240
241    pub fn as_single_key(&self) -> Option<StakeholderId> {
242        match &self.0 {
243            cml_chain::byron::StakeDistribution::SingleKey(stakeholder_id) => {
244                Some((*stakeholder_id).into())
245            }
246            _ => None,
247        }
248    }
249}
250
251#[wasm_bindgen]
252pub enum StakeDistributionKind {
253    SingleKey,
254    BootstrapEra,
255}
256
257#[derive(Clone, Debug)]
258#[wasm_bindgen]
259pub struct ByronTxOut(cml_chain::byron::ByronTxOut);
260
261impl_wasm_conversions!(cml_chain::byron::ByronTxOut, ByronTxOut);
262
263impl_wasm_cbor_event_serialize_api!(ByronTxOut);
264
265#[wasm_bindgen]
266impl ByronTxOut {
267    pub fn address(&self) -> ByronAddress {
268        self.0.address.clone().into()
269    }
270
271    pub fn amount(&self) -> u64 {
272        self.0.amount
273    }
274
275    pub fn new(address: &ByronAddress, amount: u64) -> Self {
276        Self(cml_chain::byron::ByronTxOut::new(
277            address.clone().into(),
278            amount,
279        ))
280    }
281}