1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
use crate::{FrcValue, traits::IntoFrcValue, TimestampedValue};


impl From<f64> for FrcValue {
    fn from(v: f64) -> Self {
        FrcValue::Double(v)
    }
}
impl From<f32> for FrcValue {
    fn from(v: f32) -> Self {
        FrcValue::Float(v)
    }
}
impl From<i64> for FrcValue {
    fn from(v: i64) -> Self {
        FrcValue::Int(v)
    }
}
impl From<i32> for FrcValue {
    fn from(v: i32) -> Self {
        FrcValue::Int(v as i64)
    }
}
impl From<i16> for FrcValue {
    fn from(v: i16) -> Self {
        FrcValue::Int(v as i64)
    }
}
impl From<i8> for FrcValue {
    fn from(v: i8) -> Self {
        FrcValue::Int(v as i64)
    }
}
impl From<u64> for FrcValue {
    fn from(v: u64) -> Self {
        FrcValue::Int(v as i64)
    }
}
impl From<u32> for FrcValue {
    fn from(v: u32) -> Self {
        FrcValue::Int(v as i64)
    }
}
impl From<u16> for FrcValue {
    fn from(v: u16) -> Self {
        FrcValue::Int(v as i64)
    }
}
impl From<u8> for FrcValue {
    fn from(v: u8) -> Self {
        FrcValue::Int(v as i64)
    }
}
impl From<bool> for FrcValue {
    fn from(v: bool) -> Self {
        FrcValue::Bool(v)
    }
}
impl From<String> for FrcValue {
    fn from(v: String) -> Self {
        FrcValue::String(v)
    }
}
impl From<&str> for FrcValue {
    fn from(v: &str) -> Self {
        FrcValue::String(v.to_string())
    }
}
impl From<Vec<bool>> for FrcValue {
    fn from(v: Vec<bool>) -> Self {
        FrcValue::BoolArray(v)
    }
}
impl From<Vec<i64>> for FrcValue {
    fn from(v: Vec<i64>) -> Self {
        FrcValue::IntArray(v)
    }
}
impl From<Vec<i32>> for FrcValue {
    fn from(v: Vec<i32>) -> Self {
        FrcValue::IntArray(v.iter().map(|v| *v as i64).collect())
    }
}
impl From<Vec<u64>> for FrcValue {
    fn from(v: Vec<u64>) -> Self {
        FrcValue::IntArray(v.iter().map(|v| *v as i64).collect())
    }
}
impl From<Vec<u32>> for FrcValue {
    fn from(v: Vec<u32>) -> Self {
        FrcValue::IntArray(v.iter().map(|v| *v as i64).collect())
    }
}
impl From<Vec<f32>> for FrcValue {
    fn from(v: Vec<f32>) -> Self {
        FrcValue::FloatArray(v)
    }
}
impl From<Vec<f64>> for FrcValue {
    fn from(v: Vec<f64>) -> Self {
        FrcValue::DoubleArray(v)
    }
}
impl From<Vec<String>> for FrcValue {
    fn from(v: Vec<String>) -> Self {
        FrcValue::StringArray(v)
    }
}
impl From<Vec<&str>> for FrcValue {
    fn from(v: Vec<&str>) -> Self {
        FrcValue::StringArray(v.iter().map(|s| s.to_string()).collect())
    }
}

impl<T: Into<FrcValue>> IntoFrcValue for T {
    fn into_frc_value(self) -> FrcValue {
        self.into()
    }
}

impl IntoFrcValue for TimestampedValue {
    fn into_frc_value(self) -> FrcValue {
        self.value
    }
}