summaryrefslogtreecommitdiffstats
path: root/third_party/rust/parity-wasm/src/builder/misc.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/parity-wasm/src/builder/misc.rs')
-rw-r--r--third_party/rust/parity-wasm/src/builder/misc.rs93
1 files changed, 93 insertions, 0 deletions
diff --git a/third_party/rust/parity-wasm/src/builder/misc.rs b/third_party/rust/parity-wasm/src/builder/misc.rs
new file mode 100644
index 0000000000..2b6cd2dcc5
--- /dev/null
+++ b/third_party/rust/parity-wasm/src/builder/misc.rs
@@ -0,0 +1,93 @@
+use alloc::vec::Vec;
+use super::invoke::{Invoke, Identity};
+use crate::elements;
+
+pub struct ValueTypeBuilder<F=Identity> {
+ callback: F,
+}
+
+impl<F> ValueTypeBuilder<F> where F: Invoke<elements::ValueType> {
+ pub fn with_callback(callback: F) -> Self {
+ ValueTypeBuilder { callback: callback }
+ }
+
+ pub fn i32(self) -> F::Result {
+ self.callback.invoke(elements::ValueType::I32)
+ }
+
+ pub fn i64(self) -> F::Result {
+ self.callback.invoke(elements::ValueType::I64)
+ }
+
+ pub fn f32(self) -> F::Result {
+ self.callback.invoke(elements::ValueType::F32)
+ }
+
+ pub fn f64(self) -> F::Result {
+ self.callback.invoke(elements::ValueType::F64)
+ }
+}
+
+pub struct OptionalValueTypeBuilder<F=Identity> {
+ callback: F,
+}
+
+impl<F> OptionalValueTypeBuilder<F> where F: Invoke<Option<elements::ValueType>> {
+ pub fn with_callback(callback: F) -> Self {
+ OptionalValueTypeBuilder { callback: callback }
+ }
+
+ pub fn i32(self) -> F::Result {
+ self.callback.invoke(Some(elements::ValueType::I32))
+ }
+
+ pub fn i64(self) -> F::Result {
+ self.callback.invoke(Some(elements::ValueType::I64))
+ }
+
+ pub fn f32(self) -> F::Result {
+ self.callback.invoke(Some(elements::ValueType::F32))
+ }
+
+ pub fn f64(self) -> F::Result {
+ self.callback.invoke(Some(elements::ValueType::F64))
+ }
+}
+
+pub struct ValueTypesBuilder<F=Identity> {
+ callback: F,
+ value_types: Vec<elements::ValueType>,
+}
+
+impl<F> ValueTypesBuilder<F> where F: Invoke<Vec<elements::ValueType>> {
+ pub fn with_callback(callback: F) -> Self {
+ ValueTypesBuilder {
+ callback: callback,
+ value_types: Vec::new(),
+ }
+ }
+
+ pub fn i32(mut self) -> Self {
+ self.value_types.push(elements::ValueType::I32);
+ self
+ }
+
+ pub fn i64(mut self) -> Self {
+ self.value_types.push(elements::ValueType::I64);
+ self
+ }
+
+ pub fn f32(mut self) -> Self {
+ self.value_types.push(elements::ValueType::F32);
+ self
+ }
+
+ pub fn f64(mut self) -> Self {
+ self.value_types.push(elements::ValueType::F64);
+ self
+ }
+
+ pub fn build(self) -> F::Result {
+ self.callback.invoke(self.value_types)
+ }
+}