veecle_telemetry/protocol/
owned.rs1use alloc::string::ToString;
10use alloc::vec::Vec;
11use serde::{Deserialize, Serialize};
12
13use crate::protocol::{base, transient};
14
15#[derive(Clone, Copy, Debug, serde::Serialize, serde::Deserialize)]
20pub struct Owned;
21
22impl base::Sealed for Owned {}
23impl base::StorageFamily for Owned {
24 type String<'a>
25 = alloc::string::String
26 where
27 Self: 'a;
28
29 type List<'a, T: Clone + core::fmt::Debug + serde::Serialize + 'a>
30 = alloc::vec::Vec<T>
31 where
32 Self: 'a;
33
34 type Value<'a>
35 = Value
36 where
37 Self: 'a;
38}
39
40pub use base::{
42 ProcessId, Severity, SpanAddLinkMessage, SpanCloseMessage, SpanContext, SpanEnterMessage,
43 SpanExitMessage, SpanId, ThreadId, TimeSyncMessage,
44};
45
46pub type KeyValue = base::KeyValue<'static, Owned>;
48pub type InstanceMessage = base::InstanceMessage<'static, Owned>;
50pub type TelemetryMessage = base::TelemetryMessage<'static, Owned>;
52pub type LogMessage = base::LogMessage<'static, Owned>;
54pub type TracingMessage = base::TracingMessage<'static, Owned>;
56pub type SpanCreateMessage = base::SpanCreateMessage<'static, Owned>;
58pub type SpanSetAttributeMessage = base::SpanSetAttributeMessage<'static, Owned>;
60pub type SpanAddEventMessage = base::SpanAddEventMessage<'static, Owned>;
62
63#[derive(Clone, Debug, Serialize, Deserialize)]
92#[cfg(feature = "alloc")]
93pub enum Value {
94 String(alloc::string::String),
96
97 Bool(bool),
99
100 I64(i64),
102
103 F64(f64),
105}
106
107#[cfg(feature = "alloc")]
108impl core::fmt::Display for Value {
109 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
110 match self {
111 Self::String(value) => write!(f, "{value:?}"),
115 Self::Bool(value) => write!(f, "{value}"),
116 Self::I64(value) => write!(f, "{value}"),
117 Self::F64(value) => write!(f, "{value}"),
118 }
119 }
120}
121
122impl From<transient::InstanceMessage<'_>> for InstanceMessage {
125 fn from(value: transient::InstanceMessage<'_>) -> Self {
126 InstanceMessage {
127 thread_id: value.thread_id,
128 message: value.message.into(),
129 }
130 }
131}
132
133impl From<transient::TelemetryMessage<'_>> for TelemetryMessage {
134 fn from(value: transient::TelemetryMessage<'_>) -> Self {
135 match value {
136 transient::TelemetryMessage::Log(msg) => TelemetryMessage::Log(msg.into()),
137 transient::TelemetryMessage::Tracing(msg) => TelemetryMessage::Tracing(msg.into()),
138 transient::TelemetryMessage::TimeSync(msg) => TelemetryMessage::TimeSync(msg),
139 }
140 }
141}
142
143impl From<transient::LogMessage<'_>> for LogMessage {
144 fn from(value: transient::LogMessage<'_>) -> Self {
145 LogMessage {
146 time_unix_nano: value.time_unix_nano,
147 severity: value.severity,
148 body: value.body.to_string(),
149 attributes: Vec::from_iter(value.attributes.as_ref().iter().map(|kv| kv.into())),
150 }
151 }
152}
153
154impl From<transient::TracingMessage<'_>> for TracingMessage {
155 fn from(value: transient::TracingMessage<'_>) -> Self {
156 match value {
157 transient::TracingMessage::CreateSpan(msg) => TracingMessage::CreateSpan(msg.into()),
158 transient::TracingMessage::EnterSpan(msg) => TracingMessage::EnterSpan(msg),
159 transient::TracingMessage::ExitSpan(msg) => TracingMessage::ExitSpan(msg),
160 transient::TracingMessage::CloseSpan(msg) => TracingMessage::CloseSpan(msg),
161 transient::TracingMessage::AddEvent(msg) => TracingMessage::AddEvent(msg.into()),
162 transient::TracingMessage::AddLink(msg) => TracingMessage::AddLink(msg),
163 transient::TracingMessage::SetAttribute(msg) => {
164 TracingMessage::SetAttribute(msg.into())
165 }
166 }
167 }
168}
169
170impl From<transient::SpanCreateMessage<'_>> for SpanCreateMessage {
171 fn from(value: transient::SpanCreateMessage<'_>) -> Self {
172 SpanCreateMessage {
173 span_id: value.span_id,
174 name: value.name.to_string(),
175 start_time_unix_nano: value.start_time_unix_nano,
176 attributes: Vec::from_iter(value.attributes.as_ref().iter().map(|kv| kv.into())),
177 }
178 }
179}
180
181impl From<transient::SpanSetAttributeMessage<'_>> for SpanSetAttributeMessage {
182 fn from(value: transient::SpanSetAttributeMessage<'_>) -> Self {
183 SpanSetAttributeMessage {
184 span_id: value.span_id,
185 attribute: value.attribute.into(),
186 }
187 }
188}
189
190impl From<transient::SpanAddEventMessage<'_>> for SpanAddEventMessage {
191 fn from(value: transient::SpanAddEventMessage<'_>) -> Self {
192 SpanAddEventMessage {
193 span_id: value.span_id,
194 name: value.name.to_string(),
195 time_unix_nano: value.time_unix_nano,
196 attributes: Vec::from_iter(value.attributes.as_ref().iter().map(|kv| kv.into())),
197 }
198 }
199}
200
201impl From<transient::KeyValue<'_>> for KeyValue {
202 fn from(value: transient::KeyValue<'_>) -> Self {
203 KeyValue {
204 key: value.key.to_string(),
205 value: value.value.into(),
206 }
207 }
208}
209
210impl From<&transient::KeyValue<'_>> for KeyValue {
211 fn from(value: &transient::KeyValue<'_>) -> Self {
212 KeyValue {
213 key: value.key.to_string(),
214 value: (&value.value).into(),
215 }
216 }
217}
218
219impl From<transient::Value<'_>> for Value {
220 fn from(value: transient::Value<'_>) -> Self {
221 match value {
222 transient::Value::String(s) => Value::String(s.to_string()),
223 transient::Value::Formatted(s) => Value::String(s.to_string()),
224 transient::Value::Bool(b) => Value::Bool(b),
225 transient::Value::I64(i) => Value::I64(i),
226 transient::Value::F64(f) => Value::F64(f),
227 }
228 }
229}
230
231impl From<&transient::Value<'_>> for Value {
232 fn from(value: &transient::Value<'_>) -> Self {
233 match value {
234 transient::Value::String(s) => Value::String(s.to_string()),
235 transient::Value::Formatted(s) => Value::String(s.to_string()),
236 transient::Value::Bool(b) => Value::Bool(*b),
237 transient::Value::I64(i) => Value::I64(*i),
238 transient::Value::F64(f) => Value::F64(*f),
239 }
240 }
241}