Skip to main content

vtcode_exec_events/
tracing_support.rs

1use tracing::Level;
2
3use super::{EVENT_SCHEMA_VERSION, EventEmitter, ThreadEvent, VersionedThreadEvent};
4
5/// Emits structured events as `tracing` events at the specified level.
6#[derive(Debug, Clone)]
7pub struct TracingEmitter {
8    level: Level,
9}
10
11impl TracingEmitter {
12    /// Creates a new [`TracingEmitter`] with the provided [`Level`].
13    pub fn new(level: Level) -> Self {
14        Self { level }
15    }
16}
17
18impl Default for TracingEmitter {
19    fn default() -> Self {
20        Self { level: Level::INFO }
21    }
22}
23
24impl EventEmitter for TracingEmitter {
25    fn emit(&mut self, event: &ThreadEvent) {
26        match self.level {
27            Level::TRACE => tracing::event!(
28                target: "vtcode_exec_events",
29                Level::TRACE,
30                schema_version = EVENT_SCHEMA_VERSION,
31                event = ?VersionedThreadEvent::new(event.clone()),
32                "vtcode_exec_event"
33            ),
34            Level::DEBUG => tracing::event!(
35                target: "vtcode_exec_events",
36                Level::DEBUG,
37                schema_version = EVENT_SCHEMA_VERSION,
38                event = ?VersionedThreadEvent::new(event.clone()),
39                "vtcode_exec_event"
40            ),
41            Level::INFO => tracing::event!(
42                target: "vtcode_exec_events",
43                Level::INFO,
44                schema_version = EVENT_SCHEMA_VERSION,
45                event = ?VersionedThreadEvent::new(event.clone()),
46                "vtcode_exec_event"
47            ),
48            Level::WARN => tracing::event!(
49                target: "vtcode_exec_events",
50                Level::WARN,
51                schema_version = EVENT_SCHEMA_VERSION,
52                event = ?VersionedThreadEvent::new(event.clone()),
53                "vtcode_exec_event"
54            ),
55            Level::ERROR => tracing::event!(
56                target: "vtcode_exec_events",
57                Level::ERROR,
58                schema_version = EVENT_SCHEMA_VERSION,
59                event = ?VersionedThreadEvent::new(event.clone()),
60                "vtcode_exec_event"
61            ),
62        }
63    }
64}
65
66pub use TracingEmitter as PublicTracingEmitter;