connect_stream_types/
lib.rs1use serde::Deserialize;
2use serde::Serialize;
3
4#[derive(Clone, Serialize, Deserialize, Debug)]
6#[serde(untagged)]
7pub enum Value {
8 String(String),
9 Double(f64),
10 Integer(i64),
11}
12
13impl From<String> for Value {
14 fn from(value: String) -> Self {
15 Value::String(value)
16 }
17}
18
19impl From<&str> for Value {
20 fn from(value: &str) -> Self {
21 Value::String(value.to_owned())
22 }
23}
24
25impl From<f64> for Value {
26 fn from(value: f64) -> Self {
27 Value::Double(value)
28 }
29}
30
31impl From<i64> for Value {
32 fn from(value: i64) -> Self {
33 Value::Integer(value)
34 }
35}
36
37impl Default for Value {
38 fn default() -> Value {
39 Value::Double(0.0)
40 }
41}
42
43impl Value {
44 pub fn into_series(self) -> ValueSeries {
45 match self {
46 Value::String(string) => ValueSeries::String(vec![string]),
47 Value::Double(double) => ValueSeries::Double(vec![double]),
48 Value::Integer(int) => ValueSeries::Integer(vec![int]),
49 }
50 }
51}
52
53#[derive(Clone, Serialize, Deserialize, Debug)]
57#[serde(untagged)]
58pub enum ValueSeries {
59 String(Vec<String>),
60 Double(Vec<f64>),
61 Integer(Vec<i64>),
62}
63
64impl From<Vec<String>> for ValueSeries {
65 fn from(values: Vec<String>) -> Self {
66 ValueSeries::String(values)
67 }
68}
69
70impl From<Vec<&str>> for ValueSeries {
71 fn from(values: Vec<&str>) -> Self {
72 ValueSeries::String(values.into_iter().map(|s| s.to_owned()).collect())
73 }
74}
75
76impl From<Vec<f64>> for ValueSeries {
77 fn from(values: Vec<f64>) -> Self {
78 ValueSeries::Double(values)
79 }
80}
81
82impl From<Vec<i64>> for ValueSeries {
83 fn from(values: Vec<i64>) -> Self {
84 ValueSeries::Integer(values)
85 }
86}
87
88impl Default for ValueSeries {
89 fn default() -> ValueSeries {
90 ValueSeries::Double(Vec::new())
91 }
92}
93
94impl ValueSeries {
95 pub fn len(&self) -> usize {
96 match self {
97 ValueSeries::String(values) => values.len(),
98 ValueSeries::Double(values) => values.len(),
99 ValueSeries::Integer(values) => values.len(),
100 }
101 }
102
103 pub fn is_empty(&self) -> bool {
104 self.len() == 0
105 }
106 pub fn truncate(&mut self, size: usize) {
108 match self {
109 ValueSeries::String(values) => values.truncate(size),
110 ValueSeries::Double(values) => values.truncate(size),
111 ValueSeries::Integer(values) => values.truncate(size),
112 }
113 }
114}