inkpad_executor/
value.rs

1//! WASM value
2
3/// Value types
4#[derive(Clone)]
5pub enum Type {
6    I32,
7    I64,
8    F32,
9    F64,
10}
11
12/// Custom value
13#[derive(Clone, Copy, PartialEq, Eq, Debug)]
14pub enum Value {
15    I32(i32),
16    I64(i64),
17    F32(u32),
18    F64(u64),
19}
20
21impl Default for Value {
22    fn default() -> Value {
23        Value::F32(0)
24    }
25}
26
27impl Value {
28    /// try convert to i32
29    pub fn as_i32(self) -> i32 {
30        match self {
31            Value::I32(v) => v,
32            Value::I64(v) => v as i32,
33            Value::F32(v) => v as i32,
34            Value::F64(v) => v as i32,
35        }
36    }
37
38    /// try convert to i64
39    pub fn as_i64(self) -> i64 {
40        match self {
41            Value::I32(v) => v as i64,
42            Value::I64(v) => v,
43            Value::F32(v) => v as i64,
44            Value::F64(v) => v as i64,
45        }
46    }
47
48    /// try convert to u32
49    pub fn as_u32(self) -> u32 {
50        match self {
51            Value::I32(v) => v as u32,
52            Value::I64(v) => v as u32,
53            Value::F32(v) => v,
54            Value::F64(v) => v as u32,
55        }
56    }
57
58    /// try convert to u64
59    pub fn as_u64(self) -> u64 {
60        match self {
61            Value::I32(v) => v as u64,
62            Value::I64(v) => v as u64,
63            Value::F32(v) => v as u64,
64            Value::F64(v) => v,
65        }
66    }
67}
68
69impl From<Value> for i32 {
70    fn from(v: Value) -> i32 {
71        v.as_i32()
72    }
73}
74
75impl From<Value> for i64 {
76    fn from(v: Value) -> i64 {
77        v.as_i64()
78    }
79}
80
81impl From<Value> for u32 {
82    fn from(v: Value) -> u32 {
83        v.as_u32()
84    }
85}
86
87impl From<Value> for u64 {
88    fn from(v: Value) -> u64 {
89        v.as_u64()
90    }
91}