cml_chain_wasm/builders/
output_builder.rs1use wasm_bindgen::{prelude::wasm_bindgen, JsError};
2
3use cml_core_wasm::impl_wasm_conversions;
4
5use crate::{
6 address::Address,
7 assets::{Coin, MultiAsset, Value},
8 plutus::PlutusData,
9 transaction::{DatumOption, ScriptRef, TransactionOutput},
10};
11
12#[derive(Clone, Debug, Default)]
18#[wasm_bindgen]
19pub struct TransactionOutputBuilder(cml_chain::builders::output_builder::TransactionOutputBuilder);
20
21#[wasm_bindgen]
22impl TransactionOutputBuilder {
23 pub fn new() -> Self {
24 cml_chain::builders::output_builder::TransactionOutputBuilder::new().into()
25 }
26
27 pub fn with_address(&self, address: &Address) -> Self {
28 self.0.clone().with_address(address.clone().into()).into()
29 }
30
31 pub fn with_communication_data(&self, datum: &PlutusData) -> Self {
34 self.0
35 .clone()
36 .with_communication_data(datum.clone().into())
37 .into()
38 }
39 pub fn with_data(&self, datum: &DatumOption) -> Self {
40 self.0.clone().with_data(datum.clone().into()).into()
41 }
42
43 pub fn with_reference_script(&self, script_ref: &ScriptRef) -> Self {
44 self.0
45 .clone()
46 .with_reference_script(script_ref.clone().into())
47 .into()
48 }
49
50 pub fn next(&self) -> Result<TransactionOutputAmountBuilder, JsError> {
51 self.0.clone().next().map(Into::into).map_err(Into::into)
52 }
53}
54
55impl_wasm_conversions!(
56 cml_chain::builders::output_builder::TransactionOutputBuilder,
57 TransactionOutputBuilder
58);
59
60#[wasm_bindgen]
61#[derive(Clone, Debug)]
62pub struct TransactionOutputAmountBuilder(
63 cml_chain::builders::output_builder::TransactionOutputAmountBuilder,
64);
65
66#[wasm_bindgen]
67impl TransactionOutputAmountBuilder {
68 pub fn with_value(&self, amount: &Value) -> Self {
69 self.0
70 .clone()
71 .with_value::<cml_chain::Value>(amount.clone().into())
72 .into()
73 }
74
75 pub fn with_asset_and_min_required_coin(
76 &self,
77 multiasset: &MultiAsset,
78 coins_per_utxo_byte: Coin,
79 ) -> Result<TransactionOutputAmountBuilder, JsError> {
80 self.0
81 .clone()
82 .with_asset_and_min_required_coin(multiasset.clone().into(), coins_per_utxo_byte)
83 .map(Into::into)
84 .map_err(Into::into)
85 }
86
87 pub fn build(&self) -> Result<SingleOutputBuilderResult, JsError> {
88 self.0.clone().build().map(Into::into).map_err(Into::into)
89 }
90}
91
92impl_wasm_conversions!(
93 cml_chain::builders::output_builder::TransactionOutputAmountBuilder,
94 TransactionOutputAmountBuilder
95);
96
97#[wasm_bindgen]
98#[derive(Clone, Debug)]
99pub struct SingleOutputBuilderResult(
100 cml_chain::builders::output_builder::SingleOutputBuilderResult,
101);
102
103#[wasm_bindgen]
104impl SingleOutputBuilderResult {
105 pub fn new(output: &TransactionOutput) -> SingleOutputBuilderResult {
106 cml_chain::builders::output_builder::SingleOutputBuilderResult::new(output.clone().into())
107 .into()
108 }
109
110 pub fn output(&self) -> TransactionOutput {
111 self.0.output.clone().into()
112 }
113
114 pub fn communication_datum(&self) -> Option<PlutusData> {
115 self.0.communication_datum.clone().map(Into::into)
116 }
117}
118
119impl_wasm_conversions!(
120 cml_chain::builders::output_builder::SingleOutputBuilderResult,
121 SingleOutputBuilderResult
122);