parity_wasm/builder/
misc.rs1use super::invoke::{Identity, Invoke};
2use crate::elements;
3use alloc::vec::Vec;
4
5pub struct ValueTypeBuilder<F = Identity> {
6 callback: F,
7}
8
9impl<F> ValueTypeBuilder<F>
10where
11 F: Invoke<elements::ValueType>,
12{
13 pub fn with_callback(callback: F) -> Self {
14 ValueTypeBuilder { callback }
15 }
16
17 pub fn i32(self) -> F::Result {
18 self.callback.invoke(elements::ValueType::I32)
19 }
20
21 pub fn i64(self) -> F::Result {
22 self.callback.invoke(elements::ValueType::I64)
23 }
24
25 pub fn f32(self) -> F::Result {
26 self.callback.invoke(elements::ValueType::F32)
27 }
28
29 pub fn f64(self) -> F::Result {
30 self.callback.invoke(elements::ValueType::F64)
31 }
32}
33
34pub struct ValueTypesBuilder<F = Identity> {
35 callback: F,
36 value_types: Vec<elements::ValueType>,
37}
38
39impl<F> ValueTypesBuilder<F>
40where
41 F: Invoke<Vec<elements::ValueType>>,
42{
43 pub fn with_callback(callback: F) -> Self {
44 ValueTypesBuilder { callback, value_types: Vec::new() }
45 }
46
47 pub fn i32(mut self) -> Self {
48 self.value_types.push(elements::ValueType::I32);
49 self
50 }
51
52 pub fn i64(mut self) -> Self {
53 self.value_types.push(elements::ValueType::I64);
54 self
55 }
56
57 pub fn f32(mut self) -> Self {
58 self.value_types.push(elements::ValueType::F32);
59 self
60 }
61
62 pub fn f64(mut self) -> Self {
63 self.value_types.push(elements::ValueType::F64);
64 self
65 }
66
67 pub fn build(self) -> F::Result {
68 self.callback.invoke(self.value_types)
69 }
70}