parity_wasm/builder/
misc.rs

1use 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}