tracing_lv_proto/
lib.rs

1use serde_json::Value;
2mod flags;
3pub use flags::*;
4mod generated_tracing;
5
6pub use generated_tracing::*;
7
8// tonic::include_proto!("tracing");
9
10impl From<f32> for field_value::Variant {
11    fn from(value: f32) -> Self {
12        field_value::Variant::F64(value.into())
13    }
14}
15impl From<f64> for field_value::Variant {
16    fn from(value: f64) -> Self {
17        field_value::Variant::F64(value.into())
18    }
19}
20
21impl From<u32> for field_value::Variant {
22    fn from(value: u32) -> Self {
23        field_value::Variant::U64(value.into())
24    }
25}
26
27impl From<u64> for field_value::Variant {
28    fn from(value: u64) -> Self {
29        field_value::Variant::U64(value.into())
30    }
31}
32
33impl From<bool> for field_value::Variant {
34    fn from(value: bool) -> Self {
35        field_value::Variant::Bool(value)
36    }
37}
38
39impl From<String> for field_value::Variant {
40    fn from(value: String) -> Self {
41        field_value::Variant::String(value)
42    }
43}
44
45impl From<&'static str> for field_value::Variant {
46    fn from(value: &'static str) -> Self {
47        field_value::Variant::String(value.into())
48    }
49}
50
51impl From<FieldValue> for serde_json::Value {
52    fn from(value: FieldValue) -> Self {
53        value.variant.unwrap().into()
54    }
55}
56
57impl From<field_value::Variant> for serde_json::Value {
58    fn from(value: field_value::Variant) -> Self {
59        match value {
60            field_value::Variant::F64(n) => {
61                serde_json::Value::Number(serde_json::Number::from_f64(n).unwrap())
62            }
63            field_value::Variant::I64(n) => serde_json::Value::Number(n.into()),
64            field_value::Variant::U64(n) => serde_json::Value::Number(n.into()),
65            field_value::Variant::Bool(n) => serde_json::Value::Bool(n),
66            field_value::Variant::String(n) => serde_json::Value::String(n),
67            field_value::Variant::Null(_) => serde_json::Value::Null,
68        }
69    }
70}
71
72impl From<serde_json::Value> for field_value::Variant {
73    fn from(value: Value) -> Self {
74        match value {
75            serde_json::Value::Number(n) if n.is_f64() => {
76                field_value::Variant::F64(n.as_f64().unwrap())
77            }
78            serde_json::Value::Number(n) if n.is_u64() => {
79                field_value::Variant::U64(n.as_u64().unwrap())
80            }
81            serde_json::Value::Number(n) if n.is_i64() => {
82                field_value::Variant::I64(n.as_i64().unwrap())
83            }
84            serde_json::Value::Bool(n) => field_value::Variant::Bool(n),
85            serde_json::Value::String(n) => field_value::Variant::String(n),
86            serde_json::Value::Null => field_value::Variant::Null(true),
87            _ => field_value::Variant::Null(false),
88        }
89    }
90}
91
92impl From<serde_json::Value> for FieldValue {
93    fn from(value: Value) -> Self {
94        let variant = value.into();
95        FieldValue {
96            variant: Some(variant),
97        }
98    }
99}