aether_telemetry/
trace_context.rs1use opentelemetry::propagation::Extractor;
2use schemars::JsonSchema;
3use serde::{Deserialize, Serialize};
4
5#[derive(Clone, Debug, Deserialize, Eq, JsonSchema, PartialEq, Serialize)]
6#[serde(deny_unknown_fields)]
7pub struct AgentTraceContext {
8 pub traceparent: String,
10 #[serde(default, skip_serializing_if = "Option::is_none")]
12 pub tracestate: Option<String>,
13}
14
15impl Extractor for AgentTraceContext {
16 fn get(&self, key: &str) -> Option<&str> {
17 match key {
18 "traceparent" => Some(&self.traceparent),
19 "tracestate" => self.tracestate.as_deref(),
20 _ => None,
21 }
22 }
23
24 fn keys(&self) -> Vec<&str> {
25 let mut keys = vec!["traceparent"];
26 if self.tracestate.is_some() {
27 keys.push("tracestate");
28 }
29 keys
30 }
31}