pub struct LaminarPgwireHandler {
db: Arc<LaminarDB>,
connections: Mutex<HashMap<SocketAddr, Arc<ConnState>>>,
}Fields§
§db: Arc<LaminarDB>§connections: Mutex<HashMap<SocketAddr, Arc<ConnState>>>Per-peer SimpleQuery cursor map. Entries are evicted at the start of
every do_query call once their cursors are dead and no transaction
is open — pgwire 0.39 doesn’t give us a connection-close hook, so this
is the cheapest way to keep stale state from leaking on port reuse.
Implementations§
Source§impl LaminarPgwireHandler
impl LaminarPgwireHandler
fn new(db: Arc<LaminarDB>) -> Self
fn conn_state(&self, peer: SocketAddr) -> Arc<ConnState>
fn evict_idle_peer(&self, peer: SocketAddr)
Trait Implementations§
Source§impl ExtendedQueryHandler for LaminarPgwireHandler
impl ExtendedQueryHandler for LaminarPgwireHandler
Source§fn on_sync<'life0, 'life1, 'async_trait, C>(
&'life0 self,
client: &'life1 mut C,
_message: Sync,
) -> Pin<Box<dyn Future<Output = PgWireResult<()>> + Send + 'async_trait>>where
C: ClientInfo + ClientPortalStore + Sink<PgWireBackendMessage> + Unpin + Send + Sync + 'async_trait,
C::PortalStore: PortalStore<Statement = Self::Statement>,
C::Error: Debug,
PgWireError: From<<C as Sink<PgWireBackendMessage>>::Error>,
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn on_sync<'life0, 'life1, 'async_trait, C>(
&'life0 self,
client: &'life1 mut C,
_message: Sync,
) -> Pin<Box<dyn Future<Output = PgWireResult<()>> + Send + 'async_trait>>where
C: ClientInfo + ClientPortalStore + Sink<PgWireBackendMessage> + Unpin + Send + Sync + 'async_trait,
C::PortalStore: PortalStore<Statement = Self::Statement>,
C::Error: Debug,
PgWireError: From<<C as Sink<PgWireBackendMessage>>::Error>,
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Per-Sync portal cleanup: only the unnamed portal is destroyed.
The pgwire 0.39 default on_sync calls clear_portals(), which wipes
every named portal on the connection. PostgreSQL keeps named portals
alive until Close or end-of-transaction, so the default would break
any client that does Bind named_portal; Sync; Execute named_portal;
— the standard JDBC / asyncpg / tokio-postgres pattern for chunked
fetches via setFetchSize / query_portal.
type Statement = LaminarStmt
type QueryParser = LaminarQueryParser
Source§fn query_parser(&self) -> Arc<Self::QueryParser>
fn query_parser(&self) -> Arc<Self::QueryParser>
Get a reference to associated
QueryParser implementationSource§fn do_query<'life0, 'life1, 'life2, 'async_trait, C>(
&'life0 self,
client: &'life1 mut C,
portal: &'life2 Portal<Self::Statement>,
max_rows: usize,
) -> Pin<Box<dyn Future<Output = PgWireResult<Response>> + Send + 'async_trait>>where
C: ClientInfo + ClientPortalStore + Sink<PgWireBackendMessage> + Unpin + Send + Sync + 'async_trait,
C::PortalStore: PortalStore<Statement = Self::Statement>,
C::Error: Debug,
PgWireError: From<<C as Sink<PgWireBackendMessage>>::Error>,
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn do_query<'life0, 'life1, 'life2, 'async_trait, C>(
&'life0 self,
client: &'life1 mut C,
portal: &'life2 Portal<Self::Statement>,
max_rows: usize,
) -> Pin<Box<dyn Future<Output = PgWireResult<Response>> + Send + 'async_trait>>where
C: ClientInfo + ClientPortalStore + Sink<PgWireBackendMessage> + Unpin + Send + Sync + 'async_trait,
C::PortalStore: PortalStore<Statement = Self::Statement>,
C::Error: Debug,
PgWireError: From<<C as Sink<PgWireBackendMessage>>::Error>,
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
This is the main implementation for query execution. Context has
been provided: Read more
§fn on_parse<'life0, 'life1, 'async_trait, C>(
&'life0 self,
client: &'life1 mut C,
message: Parse,
) -> Pin<Box<dyn Future<Output = Result<(), PgWireError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
C: ClientInfo + ClientPortalStore + Sink<PgWireBackendMessage> + Unpin + Send + Sync + 'async_trait,
<C as ClientPortalStore>::PortalStore: PortalStore<Statement = Self::Statement>,
<C as Sink<PgWireBackendMessage>>::Error: Debug,
PgWireError: From<<C as Sink<PgWireBackendMessage>>::Error>,
Self: 'async_trait,
fn on_parse<'life0, 'life1, 'async_trait, C>(
&'life0 self,
client: &'life1 mut C,
message: Parse,
) -> Pin<Box<dyn Future<Output = Result<(), PgWireError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
C: ClientInfo + ClientPortalStore + Sink<PgWireBackendMessage> + Unpin + Send + Sync + 'async_trait,
<C as ClientPortalStore>::PortalStore: PortalStore<Statement = Self::Statement>,
<C as Sink<PgWireBackendMessage>>::Error: Debug,
PgWireError: From<<C as Sink<PgWireBackendMessage>>::Error>,
Self: 'async_trait,
Called when client sends
parse command. Read more§fn on_bind<'life0, 'life1, 'async_trait, C>(
&'life0 self,
client: &'life1 mut C,
message: Bind,
) -> Pin<Box<dyn Future<Output = Result<(), PgWireError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
C: ClientInfo + ClientPortalStore + Sink<PgWireBackendMessage> + Unpin + Send + Sync + 'async_trait,
<C as ClientPortalStore>::PortalStore: PortalStore<Statement = Self::Statement>,
<C as Sink<PgWireBackendMessage>>::Error: Debug,
PgWireError: From<<C as Sink<PgWireBackendMessage>>::Error>,
Self: 'async_trait,
fn on_bind<'life0, 'life1, 'async_trait, C>(
&'life0 self,
client: &'life1 mut C,
message: Bind,
) -> Pin<Box<dyn Future<Output = Result<(), PgWireError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
C: ClientInfo + ClientPortalStore + Sink<PgWireBackendMessage> + Unpin + Send + Sync + 'async_trait,
<C as ClientPortalStore>::PortalStore: PortalStore<Statement = Self::Statement>,
<C as Sink<PgWireBackendMessage>>::Error: Debug,
PgWireError: From<<C as Sink<PgWireBackendMessage>>::Error>,
Self: 'async_trait,
Called when client sends
bind command. Read more§fn on_execute<'life0, 'life1, 'async_trait, C>(
&'life0 self,
client: &'life1 mut C,
message: Execute,
) -> Pin<Box<dyn Future<Output = Result<(), PgWireError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
C: ClientInfo + ClientPortalStore + Sink<PgWireBackendMessage> + Unpin + Send + Sync + 'async_trait,
<C as ClientPortalStore>::PortalStore: PortalStore<Statement = Self::Statement>,
<C as Sink<PgWireBackendMessage>>::Error: Debug,
PgWireError: From<<C as Sink<PgWireBackendMessage>>::Error>,
Self: 'async_trait,
fn on_execute<'life0, 'life1, 'async_trait, C>(
&'life0 self,
client: &'life1 mut C,
message: Execute,
) -> Pin<Box<dyn Future<Output = Result<(), PgWireError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
C: ClientInfo + ClientPortalStore + Sink<PgWireBackendMessage> + Unpin + Send + Sync + 'async_trait,
<C as ClientPortalStore>::PortalStore: PortalStore<Statement = Self::Statement>,
<C as Sink<PgWireBackendMessage>>::Error: Debug,
PgWireError: From<<C as Sink<PgWireBackendMessage>>::Error>,
Self: 'async_trait,
Called when client sends
execute command. Read more§fn _on_execute<'life0, 'life1, 'async_trait, C>(
&'life0 self,
client: &'life1 mut C,
message: Execute,
) -> Pin<Box<dyn Future<Output = Result<(), PgWireError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
C: ClientInfo + ClientPortalStore + Sink<PgWireBackendMessage> + Unpin + Send + Sync + 'async_trait,
<C as ClientPortalStore>::PortalStore: PortalStore<Statement = Self::Statement>,
<C as Sink<PgWireBackendMessage>>::Error: Debug,
PgWireError: From<<C as Sink<PgWireBackendMessage>>::Error>,
Self: 'async_trait,
fn _on_execute<'life0, 'life1, 'async_trait, C>(
&'life0 self,
client: &'life1 mut C,
message: Execute,
) -> Pin<Box<dyn Future<Output = Result<(), PgWireError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
C: ClientInfo + ClientPortalStore + Sink<PgWireBackendMessage> + Unpin + Send + Sync + 'async_trait,
<C as ClientPortalStore>::PortalStore: PortalStore<Statement = Self::Statement>,
<C as Sink<PgWireBackendMessage>>::Error: Debug,
PgWireError: From<<C as Sink<PgWireBackendMessage>>::Error>,
Self: 'async_trait,
The default implementation of
on_execute. Read more§fn on_describe<'life0, 'life1, 'async_trait, C>(
&'life0 self,
client: &'life1 mut C,
message: Describe,
) -> Pin<Box<dyn Future<Output = Result<(), PgWireError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
C: ClientInfo + ClientPortalStore + Sink<PgWireBackendMessage> + Unpin + Send + Sync + 'async_trait,
<C as ClientPortalStore>::PortalStore: PortalStore<Statement = Self::Statement>,
<C as Sink<PgWireBackendMessage>>::Error: Debug,
PgWireError: From<<C as Sink<PgWireBackendMessage>>::Error>,
Self: 'async_trait,
fn on_describe<'life0, 'life1, 'async_trait, C>(
&'life0 self,
client: &'life1 mut C,
message: Describe,
) -> Pin<Box<dyn Future<Output = Result<(), PgWireError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
C: ClientInfo + ClientPortalStore + Sink<PgWireBackendMessage> + Unpin + Send + Sync + 'async_trait,
<C as ClientPortalStore>::PortalStore: PortalStore<Statement = Self::Statement>,
<C as Sink<PgWireBackendMessage>>::Error: Debug,
PgWireError: From<<C as Sink<PgWireBackendMessage>>::Error>,
Self: 'async_trait,
Called when client sends
describe command. Read more§fn _on_describe<'life0, 'life1, 'async_trait, C>(
&'life0 self,
client: &'life1 mut C,
message: Describe,
) -> Pin<Box<dyn Future<Output = Result<(), PgWireError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
C: ClientInfo + ClientPortalStore + Sink<PgWireBackendMessage> + Unpin + Send + Sync + 'async_trait,
<C as ClientPortalStore>::PortalStore: PortalStore<Statement = Self::Statement>,
<C as Sink<PgWireBackendMessage>>::Error: Debug,
PgWireError: From<<C as Sink<PgWireBackendMessage>>::Error>,
Self: 'async_trait,
fn _on_describe<'life0, 'life1, 'async_trait, C>(
&'life0 self,
client: &'life1 mut C,
message: Describe,
) -> Pin<Box<dyn Future<Output = Result<(), PgWireError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
C: ClientInfo + ClientPortalStore + Sink<PgWireBackendMessage> + Unpin + Send + Sync + 'async_trait,
<C as ClientPortalStore>::PortalStore: PortalStore<Statement = Self::Statement>,
<C as Sink<PgWireBackendMessage>>::Error: Debug,
PgWireError: From<<C as Sink<PgWireBackendMessage>>::Error>,
Self: 'async_trait,
The default implementation of
on_describe Read more§fn on_flush<'life0, 'life1, 'async_trait, C>(
&'life0 self,
client: &'life1 mut C,
_message: Flush,
) -> Pin<Box<dyn Future<Output = Result<(), PgWireError>> + Send + 'async_trait>>
fn on_flush<'life0, 'life1, 'async_trait, C>( &'life0 self, client: &'life1 mut C, _message: Flush, ) -> Pin<Box<dyn Future<Output = Result<(), PgWireError>> + Send + 'async_trait>>
Called when client sends
flush command. Read more§fn on_close<'life0, 'life1, 'async_trait, C>(
&'life0 self,
client: &'life1 mut C,
message: Close,
) -> Pin<Box<dyn Future<Output = Result<(), PgWireError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
C: ClientInfo + ClientPortalStore + Sink<PgWireBackendMessage> + Unpin + Send + Sync + 'async_trait,
<C as ClientPortalStore>::PortalStore: PortalStore<Statement = Self::Statement>,
<C as Sink<PgWireBackendMessage>>::Error: Debug,
PgWireError: From<<C as Sink<PgWireBackendMessage>>::Error>,
Self: 'async_trait,
fn on_close<'life0, 'life1, 'async_trait, C>(
&'life0 self,
client: &'life1 mut C,
message: Close,
) -> Pin<Box<dyn Future<Output = Result<(), PgWireError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
C: ClientInfo + ClientPortalStore + Sink<PgWireBackendMessage> + Unpin + Send + Sync + 'async_trait,
<C as ClientPortalStore>::PortalStore: PortalStore<Statement = Self::Statement>,
<C as Sink<PgWireBackendMessage>>::Error: Debug,
PgWireError: From<<C as Sink<PgWireBackendMessage>>::Error>,
Self: 'async_trait,
Called when client sends
close command. Read more§fn do_describe_statement<'life0, 'life1, 'life2, 'async_trait, C>(
&'life0 self,
_client: &'life1 mut C,
target: &'life2 StoredStatement<Self::Statement>,
) -> Pin<Box<dyn Future<Output = Result<DescribeStatementResponse, PgWireError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
C: ClientInfo + ClientPortalStore + Sink<PgWireBackendMessage> + Unpin + Send + Sync + 'async_trait,
<C as ClientPortalStore>::PortalStore: PortalStore<Statement = Self::Statement>,
<C as Sink<PgWireBackendMessage>>::Error: Debug,
PgWireError: From<<C as Sink<PgWireBackendMessage>>::Error>,
Self: 'async_trait,
fn do_describe_statement<'life0, 'life1, 'life2, 'async_trait, C>(
&'life0 self,
_client: &'life1 mut C,
target: &'life2 StoredStatement<Self::Statement>,
) -> Pin<Box<dyn Future<Output = Result<DescribeStatementResponse, PgWireError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
C: ClientInfo + ClientPortalStore + Sink<PgWireBackendMessage> + Unpin + Send + Sync + 'async_trait,
<C as ClientPortalStore>::PortalStore: PortalStore<Statement = Self::Statement>,
<C as Sink<PgWireBackendMessage>>::Error: Debug,
PgWireError: From<<C as Sink<PgWireBackendMessage>>::Error>,
Self: 'async_trait,
Return resultset metadata without actually executing statement
§fn do_describe_portal<'life0, 'life1, 'life2, 'async_trait, C>(
&'life0 self,
_client: &'life1 mut C,
target: &'life2 Portal<Self::Statement>,
) -> Pin<Box<dyn Future<Output = Result<DescribePortalResponse, PgWireError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
C: ClientInfo + ClientPortalStore + Sink<PgWireBackendMessage> + Unpin + Send + Sync + 'async_trait,
<C as ClientPortalStore>::PortalStore: PortalStore<Statement = Self::Statement>,
<C as Sink<PgWireBackendMessage>>::Error: Debug,
PgWireError: From<<C as Sink<PgWireBackendMessage>>::Error>,
Self: 'async_trait,
fn do_describe_portal<'life0, 'life1, 'life2, 'async_trait, C>(
&'life0 self,
_client: &'life1 mut C,
target: &'life2 Portal<Self::Statement>,
) -> Pin<Box<dyn Future<Output = Result<DescribePortalResponse, PgWireError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
C: ClientInfo + ClientPortalStore + Sink<PgWireBackendMessage> + Unpin + Send + Sync + 'async_trait,
<C as ClientPortalStore>::PortalStore: PortalStore<Statement = Self::Statement>,
<C as Sink<PgWireBackendMessage>>::Error: Debug,
PgWireError: From<<C as Sink<PgWireBackendMessage>>::Error>,
Self: 'async_trait,
Return resultset metadata without actually executing portal
Source§impl NoopStartupHandler for LaminarPgwireHandler
impl NoopStartupHandler for LaminarPgwireHandler
fn post_startup<'life0, 'life1, 'async_trait, C>( &'life0 self, client: &'life1 mut C, _message: PgWireFrontendMessage, ) -> Pin<Box<dyn Future<Output = PgWireResult<()>> + Send + 'async_trait>>
fn connection_manager(&self) -> Option<Arc<ConnectionManager>>
fn pid_secret_key_generator(&self) -> &dyn PidSecretKeyGenerator
Source§impl SimpleQueryHandler for LaminarPgwireHandler
impl SimpleQueryHandler for LaminarPgwireHandler
Source§fn do_query<'life0, 'life1, 'life2, 'async_trait, C>(
&'life0 self,
client: &'life1 mut C,
query: &'life2 str,
) -> Pin<Box<dyn Future<Output = PgWireResult<Vec<Response>>> + Send + 'async_trait>>
fn do_query<'life0, 'life1, 'life2, 'async_trait, C>( &'life0 self, client: &'life1 mut C, query: &'life2 str, ) -> Pin<Box<dyn Future<Output = PgWireResult<Vec<Response>>> + Send + 'async_trait>>
Provide your query implementation using the incoming query string. Read more
§fn on_query<'life0, 'life1, 'async_trait, C>(
&'life0 self,
client: &'life1 mut C,
query: Query,
) -> Pin<Box<dyn Future<Output = Result<(), PgWireError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
C: ClientInfo + ClientPortalStore + Sink<PgWireBackendMessage> + Unpin + Send + Sync + 'async_trait,
<C as ClientPortalStore>::PortalStore: PortalStore,
<C as Sink<PgWireBackendMessage>>::Error: Debug,
PgWireError: From<<C as Sink<PgWireBackendMessage>>::Error>,
Self: 'async_trait,
fn on_query<'life0, 'life1, 'async_trait, C>(
&'life0 self,
client: &'life1 mut C,
query: Query,
) -> Pin<Box<dyn Future<Output = Result<(), PgWireError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
C: ClientInfo + ClientPortalStore + Sink<PgWireBackendMessage> + Unpin + Send + Sync + 'async_trait,
<C as ClientPortalStore>::PortalStore: PortalStore,
<C as Sink<PgWireBackendMessage>>::Error: Debug,
PgWireError: From<<C as Sink<PgWireBackendMessage>>::Error>,
Self: 'async_trait,
Executed on
Query request arrived. This is how postgres respond to
simple query. The default implementation calls do_query with the
incoming query string. Read more§fn _on_query<'life0, 'life1, 'async_trait, C>(
&'life0 self,
client: &'life1 mut C,
query: Query,
) -> Pin<Box<dyn Future<Output = Result<(), PgWireError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
C: ClientInfo + ClientPortalStore + Sink<PgWireBackendMessage> + Unpin + Send + Sync + 'async_trait,
<C as ClientPortalStore>::PortalStore: PortalStore,
<C as Sink<PgWireBackendMessage>>::Error: Debug,
PgWireError: From<<C as Sink<PgWireBackendMessage>>::Error>,
Self: 'async_trait,
fn _on_query<'life0, 'life1, 'async_trait, C>(
&'life0 self,
client: &'life1 mut C,
query: Query,
) -> Pin<Box<dyn Future<Output = Result<(), PgWireError>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
C: ClientInfo + ClientPortalStore + Sink<PgWireBackendMessage> + Unpin + Send + Sync + 'async_trait,
<C as ClientPortalStore>::PortalStore: PortalStore,
<C as Sink<PgWireBackendMessage>>::Error: Debug,
PgWireError: From<<C as Sink<PgWireBackendMessage>>::Error>,
Self: 'async_trait,
This is the default implementation of
on_query. If you want to
override on_query with your own pre/post processing logic, you can
call this function.Auto Trait Implementations§
impl !Freeze for LaminarPgwireHandler
impl !RefUnwindSafe for LaminarPgwireHandler
impl Send for LaminarPgwireHandler
impl Sync for LaminarPgwireHandler
impl Unpin for LaminarPgwireHandler
impl UnsafeUnpin for LaminarPgwireHandler
impl !UnwindSafe for LaminarPgwireHandler
Blanket Implementations§
§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
§type ArchivedMetadata = ()
type ArchivedMetadata = ()
The archived version of the pointer metadata for this type.
§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Converts some archived metadata to the pointer metadata for itself.
§impl<U> As for U
impl<U> As for U
§fn as_<T>(self) -> Twhere
T: CastFrom<U>,
fn as_<T>(self) -> Twhere
T: CastFrom<U>,
Casts
self to type T. The semantics of numeric casting with the as operator are followed, so <T as As>::as_::<U> can be used in the same way as T as U for numeric conversions. Read more§impl<T> AsAny for T
impl<T> AsAny for T
§fn any_ref(&self) -> &(dyn Any + Send + Sync + 'static)
fn any_ref(&self) -> &(dyn Any + Send + Sync + 'static)
Obtains a
dyn Any reference to the object: Read more§fn as_any(self: Arc<T>) -> Arc<dyn Any + Send + Sync>
fn as_any(self: Arc<T>) -> Arc<dyn Any + Send + Sync>
Obtains an
Arc<dyn Any> reference to the object: Read more§fn into_any(self: Box<T>) -> Box<dyn Any + Send + Sync>
fn into_any(self: Box<T>) -> Box<dyn Any + Send + Sync>
Converts the object to
Box<dyn Any>: Read more§fn type_name(&self) -> &'static str
fn type_name(&self) -> &'static str
Convenient wrapper for
std::any::type_name, since Any does not provide it and
Any::type_id is useless as a debugging aid (its Debug is just a mess of hex digits).§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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
Mutably borrows from an owned value. Read more
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> Downcast for Twhere
T: AsAny + ?Sized,
impl<T> Downcast for Twhere
T: AsAny + ?Sized,
§fn downcast_ref<T>(&self) -> Option<&T>where
T: AsAny,
fn downcast_ref<T>(&self) -> Option<&T>where
T: AsAny,
Forward to the method defined on the type
Any.§fn downcast_mut<T>(&mut self) -> Option<&mut T>where
T: AsAny,
fn downcast_mut<T>(&mut self) -> Option<&mut T>where
T: AsAny,
Forward to the method defined on the type
Any.§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
Causes
self to use its Binary implementation when Debug-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
Causes
self to use its Display implementation when
Debug-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
Causes
self to use its LowerExp implementation when
Debug-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
Causes
self to use its LowerHex implementation when
Debug-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
Causes
self to use its Octal implementation when Debug-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
Causes
self to use its Pointer implementation when
Debug-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
Causes
self to use its UpperExp implementation when
Debug-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
Causes
self to use its UpperHex implementation when
Debug-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
Formats each item in a sequence. Read more
§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
Wrap the input message
T in a tonic::RequestCreates a shared type from an unshared type.
§impl<L> LayerExt<L> for L
impl<L> LayerExt<L> for L
§fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
Applies the layer to a service and wraps it in [
Layered].§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Returns the layout of the type.
§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2where
T: SharedNiching<N1, N2>,
N1: Niching<T>,
N2: Niching<T>,
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2where
T: SharedNiching<N1, N2>,
N1: Niching<T>,
N2: Niching<T>,
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Pipes by value. This is generally the method you want to use. Read more
§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,
Borrows
self and passes that borrow into the pipe function. Read more§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,
Mutably borrows
self and passes that borrow into the pipe function. Read more§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
§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
§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
Borrows
self, then passes self.as_ref() into the pipe function.§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
Mutably borrows
self, then passes self.as_mut() into the pipe
function.§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
Borrows
self, then passes self.deref() into the pipe function.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> Pointee for T
impl<T> Pointee for T
§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
§impl<T> Scope for T
impl<T> Scope for T
§impl<H> StartupHandler for Hwhere
H: NoopStartupHandler,
impl<H> StartupHandler for Hwhere
H: NoopStartupHandler,
§fn on_startup<'life0, 'life1, 'async_trait, C>(
&'life0 self,
client: &'life1 mut C,
message: PgWireFrontendMessage,
) -> Pin<Box<dyn Future<Output = Result<(), PgWireError>> + Send + 'async_trait>>
fn on_startup<'life0, 'life1, 'async_trait, C>( &'life0 self, client: &'life1 mut C, message: PgWireFrontendMessage, ) -> Pin<Box<dyn Future<Output = Result<(), PgWireError>> + Send + 'async_trait>>
A generic frontend message callback during startup phase.
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Immutable access to the
Borrow<B> of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
Mutable access to the
BorrowMut<B> of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
Immutable access to the
AsRef<R> view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
Mutable access to the
AsMut<R> view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Immutable access to the
Deref::Target of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Mutable access to the
Deref::Target of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
Calls
.tap() only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
Calls
.tap_mut() only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
Calls
.tap_borrow() only in debug builds, and is erased in release
builds.§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
Calls
.tap_borrow_mut() only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
Calls
.tap_ref() only in debug builds, and is erased in release
builds.§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
Calls
.tap_ref_mut() only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
Calls
.tap_deref() only in debug builds, and is erased in release
builds.