1#[derive(Clone)]
5pub enum Type {
6 I32,
7 I64,
8 F32,
9 F64,
10}
11
12#[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 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 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 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 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}