use rama_core::extensions::ExtensionsRef;
use rama_core::{Service, io::Io};
use rama_net::client::{ConnectionError, ConnectorService, EstablishedClientConnection};
use crate::Client;
#[derive(Debug, Clone, Default)]
pub struct TtrpcConnector<C> {
inner: C,
}
impl<C> TtrpcConnector<C> {
pub const fn new(inner: C) -> Self {
Self { inner }
}
}
impl<C, Input> Service<Input> for TtrpcConnector<C>
where
C: ConnectorService<Input, Connection: Io>,
Input: Send + 'static,
{
type Output = EstablishedClientConnection<Client, Input>;
type Error = ConnectionError;
async fn serve(&self, input: Input) -> Result<Self::Output, Self::Error> {
let EstablishedClientConnection { input, conn } = self.inner.connect(input).await?;
let extensions = conn.extensions().clone();
let client = Client::new_with_extensions(conn, extensions);
Ok(EstablishedClientConnection {
input,
conn: client,
})
}
}