diff --git a/tarpc/src/rpc/server/mod.rs b/tarpc/src/rpc/server/mod.rs index bd303da..f1df204 100644 --- a/tarpc/src/rpc/server/mod.rs +++ b/tarpc/src/rpc/server/mod.rs @@ -197,11 +197,16 @@ where Self::new(Config::default(), transport) } - /// Returns the inner transport. + /// Returns the inner transport over which messages are sent and received. pub fn get_ref(&self) -> &T { self.transport.get_ref() } + /// Returns the inner transport over which messages are sent and received. + pub fn get_pin_ref(self: Pin<&mut Self>) -> Pin<&mut T> { + self.project().transport.get_pin_mut() + } + fn cancel_request(mut self: Pin<&mut Self>, trace_context: &trace::Context, request_id: u64) { // It's possible the request was already completed, so it's fine // if this is None. @@ -400,6 +405,11 @@ where C: Channel, S: Serve, { + /// Returns the inner channel over which messages are sent and received. + pub fn get_pin_channel(self: Pin<&mut Self>) -> Pin<&mut C> { + self.project().channel + } + fn pump_read( mut self: Pin<&mut Self>, cx: &mut Context<'_>, diff --git a/tarpc/src/serde_transport/mod.rs b/tarpc/src/serde_transport/mod.rs index 7c1b7ff..3762199 100644 --- a/tarpc/src/serde_transport/mod.rs +++ b/tarpc/src/serde_transport/mod.rs @@ -23,6 +23,13 @@ pub struct Transport { inner: SerdeFramed, Item, SinkItem, Codec>, } +impl Transport { + /// Returns the inner transport over which messages are sent and received. + pub fn get_ref(&self) -> &S { + self.inner.get_ref().get_ref() + } +} + impl Stream for Transport where S: AsyncWrite + AsyncRead,