Struct mz_pgwire::codec::FramedConn
source · pub struct FramedConn<A> {
conn_id: ConnectionId,
peer_addr: Option<IpAddr>,
inner: Buffer<Framed<Conn<A>, Codec>, BackendMessage>,
}
Expand description
A connection that manages the encoding and decoding of pgwire frames.
Fields§
§conn_id: ConnectionId
§peer_addr: Option<IpAddr>
§inner: Buffer<Framed<Conn<A>, Codec>, BackendMessage>
Implementations§
source§impl<A> FramedConn<A>
impl<A> FramedConn<A>
sourcepub fn new(
conn_id: ConnectionId,
peer_addr: Option<IpAddr>,
inner: Conn<A>,
) -> FramedConn<A>
pub fn new( conn_id: ConnectionId, peer_addr: Option<IpAddr>, inner: Conn<A>, ) -> FramedConn<A>
Constructs a new framed connection.
The underlying connection, inner
, is expected to be something like a
TCP stream. Anything that implements AsyncRead
and AsyncWrite
will do.
The supplied conn_id
is used to identify the connection in logging
messages.
sourcepub async fn recv(&mut self) -> Result<Option<FrontendMessage>, Error>
pub async fn recv(&mut self) -> Result<Option<FrontendMessage>, Error>
Reads and decodes one frontend message from the client.
Blocks until the client sends a complete message. If the client
terminates the stream, returns None
. Returns an error if the client
sends a malformed message or if the connection underlying is broken.
§Cancel safety
This method is cancel safe. The returned future only holds onto a reference to thea underlying stream, so dropping it will never lose a value.
https://docs.rs/tokio-stream/latest/tokio_stream/trait.StreamExt.html#cancel-safety-1
sourcepub async fn send<M>(&mut self, message: M) -> Result<(), Error>where
M: Into<BackendMessage>,
pub async fn send<M>(&mut self, message: M) -> Result<(), Error>where
M: Into<BackendMessage>,
Encodes and sends one backend message to the client.
Note that the connection is not flushed after calling this method. You
must call FramedConn::flush
explicitly. Returns an error if the
underlying connection is broken.
Please use StateMachine::send
instead if calling from StateMachine
,
as it applies session-based filters before calling this method.
sourcepub async fn send_all(
&mut self,
messages: impl IntoIterator<Item = BackendMessage>,
) -> Result<(), Error>
pub async fn send_all( &mut self, messages: impl IntoIterator<Item = BackendMessage>, ) -> Result<(), Error>
Encodes and sends the backend messages in the messages
iterator to the
client.
As with FramedConn::send
, the connection is not flushed after
calling this method. You must call FramedConn::flush
explicitly.
Returns an error if the underlying connection is broken.
sourcepub fn set_encode_state(&mut self, encode_state: Vec<(Type, Format)>)
pub fn set_encode_state(&mut self, encode_state: Vec<(Type, Format)>)
Injects state that affects how certain backend messages are encoded.
Specifically, the encoding of BackendMessage::DataRow
depends upon the
types of the datums in the row. To avoid including the same type
information in each message, we use this side channel to install the
type information in the codec before sending any data row messages. This
violates the abstraction boundary a bit but results in much better
performance.
sourcepub async fn wait_closed(&self) -> Error
pub async fn wait_closed(&self) -> Error
Waits for the connection to be closed.
Returns a “connection closed” error when the connection is closed. If another error occurs before the connection is closed, that error is returned instead.
Use this method when you have an unbounded stream of data to forward to the connection and the protocol does not require the client to periodically acknowledge receipt. If you don’t call this method to periodically check if the connection has closed, you may not notice that the client has gone away for an unboundedly long amount of time; usually not until the stream of data produces its next message and you attempt to write the data to the connection.
sourcepub fn conn_id(&self) -> &ConnectionId
pub fn conn_id(&self) -> &ConnectionId
Returns the ID associated with this connection.
source§impl<A> FramedConn<A>
impl<A> FramedConn<A>
Trait Implementations§
source§impl<A> AsyncReady for FramedConn<A>
impl<A> AsyncReady for FramedConn<A>
Auto Trait Implementations§
impl<A> Freeze for FramedConn<A>where
A: Freeze,
impl<A> RefUnwindSafe for FramedConn<A>where
A: RefUnwindSafe,
impl<A> Send for FramedConn<A>where
A: Send,
impl<A> Sync for FramedConn<A>where
A: Sync,
impl<A> Unpin for FramedConn<A>where
A: Unpin,
impl<A> UnwindSafe for FramedConn<A>where
A: UnwindSafe,
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> FmtForward for T
impl<T> FmtForward for T
source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.source§impl<T> FutureExt for T
impl<T> FutureExt for T
source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T
in a tonic::Request
source§impl<T, U> OverrideFrom<Option<&T>> for Uwhere
U: OverrideFrom<T>,
impl<T, U> OverrideFrom<Option<&T>> for Uwhere
U: OverrideFrom<T>,
source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moresource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moresource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.source§impl<T> Pointable for T
impl<T> Pointable for T
source§impl<P, R> ProtoType<R> for Pwhere
R: RustType<P>,
impl<P, R> ProtoType<R> for Pwhere
R: RustType<P>,
source§fn into_rust(self) -> Result<R, TryFromProtoError>
fn into_rust(self) -> Result<R, TryFromProtoError>
RustType::from_proto
.source§fn from_rust(rust: &R) -> P
fn from_rust(rust: &R) -> P
RustType::into_proto
.source§impl<'a, S, T> Semigroup<&'a S> for Twhere
T: Semigroup<S>,
impl<'a, S, T> Semigroup<&'a S> for Twhere
T: Semigroup<S>,
source§fn plus_equals(&mut self, rhs: &&'a S)
fn plus_equals(&mut self, rhs: &&'a S)
std::ops::AddAssign
, for types that do not implement AddAssign
.source§impl<T> Tap for T
impl<T> Tap for T
source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read moresource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read moresource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read moresource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read moresource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read moresource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read moresource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.