susy_wasm/builder/
misc.rs1use 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}