susy_wasm/builder/
misc.rs

1use std::vec::Vec;
2use super::invoke::{Invoke, Identity};
3use elements;
4
5pub struct ValueTypeBuilder<F=Identity> {
6	callback: F,
7}
8
9impl<F> ValueTypeBuilder<F> where F: Invoke<elements::ValueType> {
10	pub fn with_callback(callback: F) -> Self {
11		ValueTypeBuilder { callback: callback }
12	}
13
14	pub fn i32(self) -> F::Result {
15		self.callback.invoke(elements::ValueType::I32)
16	}
17
18	pub fn i64(self) -> F::Result {
19		self.callback.invoke(elements::ValueType::I64)
20	}
21
22	pub fn f32(self) -> F::Result {
23		self.callback.invoke(elements::ValueType::F32)
24	}
25
26	pub fn f64(self) -> F::Result {
27		self.callback.invoke(elements::ValueType::F64)
28	}
29}
30
31pub struct OptionalValueTypeBuilder<F=Identity> {
32	callback: F,
33}
34
35impl<F> OptionalValueTypeBuilder<F> where F: Invoke<Option<elements::ValueType>> {
36	pub fn with_callback(callback: F) -> Self {
37		OptionalValueTypeBuilder { callback: callback }
38	}
39
40	pub fn i32(self) -> F::Result {
41		self.callback.invoke(Some(elements::ValueType::I32))
42	}
43
44	pub fn i64(self) -> F::Result {
45		self.callback.invoke(Some(elements::ValueType::I64))
46	}
47
48	pub fn f32(self) -> F::Result {
49		self.callback.invoke(Some(elements::ValueType::F32))
50	}
51
52	pub fn f64(self) -> F::Result {
53		self.callback.invoke(Some(elements::ValueType::F64))
54	}
55}
56
57pub struct ValueTypesBuilder<F=Identity> {
58	callback: F,
59	value_types: Vec<elements::ValueType>,
60}
61
62impl<F> ValueTypesBuilder<F> where F: Invoke<Vec<elements::ValueType>> {
63	pub fn with_callback(callback: F) -> Self {
64		ValueTypesBuilder {
65			callback: callback,
66			value_types: Vec::new(),
67		}
68	}
69
70	pub fn i32(mut self) -> Self {
71		self.value_types.push(elements::ValueType::I32);
72		self
73	}
74
75	pub fn i64(mut self) -> Self {
76		self.value_types.push(elements::ValueType::I64);
77		self
78	}
79
80	pub fn f32(mut self) -> Self {
81		self.value_types.push(elements::ValueType::F32);
82		self
83	}
84
85	pub fn f64(mut self) -> Self {
86		self.value_types.push(elements::ValueType::F64);
87		self
88	}
89
90	pub fn build(self) -> F::Result {
91		self.callback.invoke(self.value_types)
92	}
93}