1#[derive(Clone, Debug, PartialEq)]
2pub enum Value {
3 Str(String),
4 I64(i64),
5 F64(f64),
6 Bool(bool),
7 Null,
8}
9
10impl From<&str> for Value {
11 fn from(s: &str) -> Self { Value::Str(s.to_string()) }
12}
13
14impl From<String> for Value {
15 fn from(s: String) -> Self { Value::Str(s) }
16}
17
18impl From<i32> for Value {
19 fn from(n: i32) -> Self { Value::I64(n as i64) }
20}
21
22impl From<i64> for Value {
23 fn from(n: i64) -> Self { Value::I64(n) }
24}
25
26impl From<u32> for Value {
27 fn from(n: u32) -> Self { Value::I64(n as i64) }
28}
29
30impl From<u64> for Value {
31 fn from(n: u64) -> Self { Value::I64(n as i64) }
32}
33
34impl From<f64> for Value {
35 fn from(n: f64) -> Self { Value::F64(n) }
36}
37
38impl From<f32> for Value {
39 fn from(n: f32) -> Self { Value::F64(n as f64) }
40}
41
42impl From<bool> for Value {
43 fn from(b: bool) -> Self { Value::Bool(b) }
44}
45
46pub fn opt_val<T: Into<Value>>(val: Option<T>) -> Value {
47 val.map(Into::into).unwrap_or(Value::Null)
48}