use super::*;
use crate::transform::generate::{
chat_responses::stream as hr, claude_chat::stream as ch, claude_gemini::stream as cg,
gemini_responses::stream as gr,
};
mod sealed {
pub trait Edge {}
}
pub trait FanoutBridge: StreamBridge + sealed::Edge {
fn reserve(&mut self, role: IdentityRole, ids: &BTreeSet<String>)
-> Result<(), TransformError>;
}
macro_rules! edge {
($ty:ty) => {
impl sealed::Edge for $ty {}
impl FanoutBridge for $ty {
fn reserve(
&mut self,
role: IdentityRole,
ids: &BTreeSet<String>,
) -> Result<(), TransformError> {
self.reserve_external_ids(role, ids)
}
}
};
}
edge!(ch::ClaudeToChatStream);
edge!(cg::ClaudeToGeminiStream);
edge!(hr::ResponsesToChatStream);
impl sealed::Edge for gr::ResponsesToGeminiStream {}
impl FanoutBridge for gr::ResponsesToGeminiStream {
fn reserve(
&mut self,
role: IdentityRole,
ids: &BTreeSet<String>,
) -> Result<(), TransformError> {
self.reserve_external_ids(role, ids)
}
}