1use serde_json::Value;
2mod flags;
3pub use flags::*;
4mod generated_tracing;
5
6pub use generated_tracing::*;
7
8impl 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}