gproxy_protocol/adapt/generate/stream/fanout/
bridge.rs1use super::*;
2use crate::transform::generate::{
3 chat_responses::stream as hr, claude_chat::stream as ch, claude_gemini::stream as cg,
4 gemini_responses::stream as gr,
5};
6
7mod sealed {
8 pub trait Edge {}
9}
10
11pub trait FanoutBridge: StreamBridge + sealed::Edge {
13 fn reserve(&mut self, role: IdentityRole, ids: &BTreeSet<String>)
14 -> Result<(), TransformError>;
15}
16
17macro_rules! edge {
18 ($ty:ty) => {
19 impl sealed::Edge for $ty {}
20 impl FanoutBridge for $ty {
21 fn reserve(
22 &mut self,
23 role: IdentityRole,
24 ids: &BTreeSet<String>,
25 ) -> Result<(), TransformError> {
26 self.reserve_external_ids(role, ids)
27 }
28 }
29 };
30}
31edge!(ch::ClaudeToChatStream);
32edge!(cg::ClaudeToGeminiStream);
33edge!(hr::ResponsesToChatStream);
34
35impl sealed::Edge for gr::ResponsesToGeminiStream {}
36impl FanoutBridge for gr::ResponsesToGeminiStream {
37 fn reserve(
38 &mut self,
39 role: IdentityRole,
40 ids: &BTreeSet<String>,
41 ) -> Result<(), TransformError> {
42 self.reserve_external_ids(role, ids)
43 }
44}