Skip to main content

vtcode_llm/open_responses/bridge/
emitter.rs

1//! Dual emitter bridging ThreadEvent and normalized streams.
2
3use super::*;
4
5/// Adapter that wraps a VT Code event sink and also emits Open Responses events.
6pub struct DualEventEmitter<E: StreamEventEmitter> {
7    open_responses_emitter: E,
8    builder: ResponseBuilder,
9}
10
11impl<E: StreamEventEmitter> DualEventEmitter<E> {
12    /// Creates a new dual emitter with the given Open Responses emitter and model.
13    pub fn new(emitter: E, model: impl Into<String>) -> Self {
14        Self {
15            open_responses_emitter: emitter,
16            builder: ResponseBuilder::new(model),
17        }
18    }
19
20    /// Processes a VT Code event and emits corresponding Open Responses events.
21    pub fn process(&mut self, event: &ThreadEvent) {
22        self.builder.process_event(event, &mut self.open_responses_emitter);
23    }
24
25    /// Processes a normalized provider stream event and emits corresponding Open Responses events.
26    pub fn process_normalized(&mut self, event: &NormalizedStreamEvent) {
27        self.builder.process_normalized_event(event, &mut self.open_responses_emitter);
28    }
29
30    /// Returns a reference to the current response.
31    pub fn response(&self) -> &Response {
32        self.builder.response()
33    }
34
35    /// Returns the underlying Open Responses emitter.
36    pub fn into_emitter(self) -> E {
37        self.open_responses_emitter
38    }
39
40    /// Consumes the adapter and returns the final response.
41    pub fn into_response(self) -> Response {
42        self.builder.build()
43    }
44}