pub struct Quaint { /* private fields */ }
Expand description
The main entry point and an abstraction over a database connection.
Implementations§
source§impl Quaint
impl Quaint
sourcepub async fn new(url_str: &str) -> Result<Self>
pub async fn new(url_str: &str) -> Result<Self>
Create a new connection to the database. The connection string follows the specified format:
connector_type://user:password@host/database?parameters
Connector type can be one of the following:
file
opens an SQLite connectionmysql
opens a MySQL connectionpostgres
/postgresql
opens a PostgreSQL connection
All parameters should be given in the query string format:
?key1=val1&key2=val2
. All parameters are optional.
As a special case, Microsoft SQL Server connections use the JDBC URI format:
jdbc:sqlserver://host\instance:port;key1=val1;key2=val2;
SQLite:
user
/password
do not do anything and can be emitted.host
should point to the database file.db_name
parameter should give a name to the database attached for query namespacing.socket_timeout
defined in seconds. Acts as the busy timeout in SQLite. When set, queries that are waiting for a lock to be released will return theTimeout
error after the defined value.
PostgreSQL:
sslmode
eitherdisable
,prefer
orrequire
. Read moresslcert
should point to a PEM certificate file.sslidentity
should point to a PKCS12 certificate database.sslpassword
the password to open the PKCS12 database.sslaccept
eitherstrict
oraccept_invalid_certs
. If strict, the certificate needs to be valid and in the CA certificates.accept_invalid_certs
accepts any certificate from the server and can lead to weakened security. Defaults tostrict
.schema
the default search path.host
additionally the host can be given as a parameter, typically in cases when connectiong to the database through a unix socket to separate the database name from the database path, such aspostgresql:///dbname?host=/var/run/postgresql
.socket_timeout
defined in seconds. If set, a query will return aTimeout
error if it fails to resolve before given time.connect_timeout
defined in seconds (default: 5). Connecting to a database will return aConnectTimeout
error if taking more than the defined value.pgbouncer
eithertrue
orfalse
. If set, allows usage with the pgBouncer connection pool in transaction mode. Additionally a transaction is required for every query for the mode to work. When starting a new transaction, a deallocation queryDEALLOCATE ALL
is executed right afterBEGIN
to avoid possible collisions with statements created in other sessions.statement_cache_size
, number of prepared statements kept cached. Defaults to 500, which means caching is off. Ifpgbouncer
mode is enabled, caching is always off.options
Specifies command-line options to send to the server at connection start. Read more
MySQL:
sslcert
should point to a PEM certificate file.sslidentity
should point to a PKCS12 certificate database.sslpassword
the password to open the PKCS12 database.sslaccept
eitherstrict
oraccept_invalid_certs
. If strict, the certificate needs to be valid and in the CA certificates.accept_invalid_certs
accepts any certificate from the server and can lead to weakened security. Defaults tostrict
.socket
needed when connecting to MySQL database through a unix socket. When set, the host parameter is dismissed.socket_timeout
defined in seconds. If set, a query will return aTimeout
error if it fails to resolve before given time.connect_timeout
defined in seconds (default: 5). Connecting to a database will return aConnectTimeout
error if taking more than the defined value.
Microsoft SQL Server:
encrypt
if set totrue
encrypts all traffic over TLS. Iffalse
, only the login details are encrypted. A special valueDANGER_PLAINTEXT
will disable TLS completely, including sending login credentials as plaintext.user
sets the login name.password
sets the login password.database
sets the database to connect to.trustServerCertificate
if set totrue
, accepts any kind of certificate from the server.socketTimeout
defined in seconds. If set, a query will return aTimeout
error if it fails to resolve before given time.connectTimeout
defined in seconds (default: 5). Connecting to a database will return aConnectTimeout
error if taking more than the defined value.connectionLimit
defines the maximum number of connections opened to the database.schema
the name of the lookup schema. Only stored to the connection, must be used in every query to be effective.isolationLevel
the transaction isolation level. Possible values:READ UNCOMMITTED
,READ COMMITTED
,REPEATABLE READ
,SNAPSHOT
,SERIALIZABLE
.
sourcepub fn new_in_memory() -> Result<Quaint>
pub fn new_in_memory() -> Result<Quaint>
Open a new SQLite database in memory.
sourcepub fn connection_info(&self) -> &ConnectionInfo
pub fn connection_info(&self) -> &ConnectionInfo
Info about the connection and underlying database.
Trait Implementations§
source§impl Queryable for Quaint
impl Queryable for Quaint
source§fn query<'life0, 'life1, 'async_trait>(
&'life0 self,
q: Query<'life1>
) -> Pin<Box<dyn Future<Output = Result<ResultSet>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn query<'life0, 'life1, 'async_trait>( &'life0 self, q: Query<'life1> ) -> Pin<Box<dyn Future<Output = Result<ResultSet>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,
Execute the given query.
source§fn query_raw<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
sql: &'life1 str,
params: &'life2 [Value<'life3>]
) -> Pin<Box<dyn Future<Output = Result<ResultSet>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn query_raw<'life0, 'life1, 'life2, 'life3, 'async_trait>( &'life0 self, sql: &'life1 str, params: &'life2 [Value<'life3>] ) -> Pin<Box<dyn Future<Output = Result<ResultSet>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, 'life3: 'async_trait,
Execute a query given as SQL, interpolating the given parameters.
source§fn query_raw_typed<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
sql: &'life1 str,
params: &'life2 [Value<'life3>]
) -> Pin<Box<dyn Future<Output = Result<ResultSet>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn query_raw_typed<'life0, 'life1, 'life2, 'life3, 'async_trait>( &'life0 self, sql: &'life1 str, params: &'life2 [Value<'life3>] ) -> Pin<Box<dyn Future<Output = Result<ResultSet>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, 'life3: 'async_trait,
Execute a query given as SQL, interpolating the given parameters. Read more
source§fn execute<'life0, 'life1, 'async_trait>(
&'life0 self,
q: Query<'life1>
) -> Pin<Box<dyn Future<Output = Result<u64>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn execute<'life0, 'life1, 'async_trait>( &'life0 self, q: Query<'life1> ) -> Pin<Box<dyn Future<Output = Result<u64>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,
Execute the given query, returning the number of affected rows.
source§fn execute_raw<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
sql: &'life1 str,
params: &'life2 [Value<'life3>]
) -> Pin<Box<dyn Future<Output = Result<u64>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn execute_raw<'life0, 'life1, 'life2, 'life3, 'async_trait>( &'life0 self, sql: &'life1 str, params: &'life2 [Value<'life3>] ) -> Pin<Box<dyn Future<Output = Result<u64>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, 'life3: 'async_trait,
Execute a query given as SQL, interpolating the given parameters and
returning the number of affected rows.
source§fn execute_raw_typed<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
sql: &'life1 str,
params: &'life2 [Value<'life3>]
) -> Pin<Box<dyn Future<Output = Result<u64>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn execute_raw_typed<'life0, 'life1, 'life2, 'life3, 'async_trait>( &'life0 self, sql: &'life1 str, params: &'life2 [Value<'life3>] ) -> Pin<Box<dyn Future<Output = Result<u64>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, 'life3: 'async_trait,
Execute a query given as SQL, interpolating the given parameters and
returning the number of affected rows. Read more
source§fn raw_cmd<'life0, 'life1, 'async_trait>(
&'life0 self,
cmd: &'life1 str
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn raw_cmd<'life0, 'life1, 'async_trait>( &'life0 self, cmd: &'life1 str ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,
Run a command in the database, for queries that can’t be run using
prepared statements.
source§fn version<'life0, 'async_trait>(
&'life0 self
) -> Pin<Box<dyn Future<Output = Result<Option<String>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn version<'life0, 'async_trait>( &'life0 self ) -> Pin<Box<dyn Future<Output = Result<Option<String>>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,
Return the version of the underlying database, queried directly from the
source. This corresponds to the
version()
function on PostgreSQL for
example. The version string is returned directly without any form of
parsing or normalization.source§fn is_healthy(&self) -> bool
fn is_healthy(&self) -> bool
Returns false, if connection is considered to not be in a working state.
source§fn begin_statement(&self) -> &'static str
fn begin_statement(&self) -> &'static str
Statement to begin a transaction
source§fn set_tx_isolation_level<'life0, 'async_trait>(
&'life0 self,
isolation_level: IsolationLevel
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn set_tx_isolation_level<'life0, 'async_trait>( &'life0 self, isolation_level: IsolationLevel ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait,
Sets the transaction isolation level to given value.
Implementers have to make sure that the passed isolation level is valid for the underlying database.
source§fn requires_isolation_first(&self) -> bool
fn requires_isolation_first(&self) -> bool
Signals if the isolation level SET needs to happen before or after the tx BEGIN.
source§fn select<'life0, 'life1, 'async_trait>(
&'life0 self,
q: Select<'life1>
) -> Pin<Box<dyn Future<Output = Result<ResultSet>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn select<'life0, 'life1, 'async_trait>( &'life0 self, q: Select<'life1> ) -> Pin<Box<dyn Future<Output = Result<ResultSet>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,
Execute a
SELECT
query.source§fn insert<'life0, 'life1, 'async_trait>(
&'life0 self,
q: Insert<'life1>
) -> Pin<Box<dyn Future<Output = Result<ResultSet>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn insert<'life0, 'life1, 'async_trait>( &'life0 self, q: Insert<'life1> ) -> Pin<Box<dyn Future<Output = Result<ResultSet>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,
Execute an
INSERT
query.source§fn update<'life0, 'life1, 'async_trait>(
&'life0 self,
q: Update<'life1>
) -> Pin<Box<dyn Future<Output = Result<u64>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn update<'life0, 'life1, 'async_trait>( &'life0 self, q: Update<'life1> ) -> Pin<Box<dyn Future<Output = Result<u64>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,
Execute an
UPDATE
query, returning the number of affected rows.source§fn delete<'life0, 'life1, 'async_trait>(
&'life0 self,
q: Delete<'life1>
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn delete<'life0, 'life1, 'async_trait>( &'life0 self, q: Delete<'life1> ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,
Execute a
DELETE
query.source§fn server_reset_query<'life0, 'life1, 'async_trait>(
&'life0 self,
_: &'life1 dyn Transaction
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn server_reset_query<'life0, 'life1, 'async_trait>( &'life0 self, _: &'life1 dyn Transaction ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,
Execute an arbitrary function in the beginning of each transaction.
source§impl TransactionCapable for Quaint
impl TransactionCapable for Quaint
source§fn start_transaction<'a, 'async_trait>(
&'a self,
isolation: Option<IsolationLevel>
) -> Pin<Box<dyn Future<Output = Result<Box<dyn Transaction + 'a>>> + Send + 'async_trait>>where
Self: 'async_trait,
'a: 'async_trait,
fn start_transaction<'a, 'async_trait>( &'a self, isolation: Option<IsolationLevel> ) -> Pin<Box<dyn Future<Output = Result<Box<dyn Transaction + 'a>>> + Send + 'async_trait>>where Self: 'async_trait, 'a: 'async_trait,
Starts a new transaction
Auto Trait Implementations§
impl !RefUnwindSafe for Quaint
impl Send for Quaint
impl Sync for Quaint
impl Unpin for Quaint
impl !UnwindSafe for Quaint
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
Mutably borrows from an owned value. Read more
source§impl<Choices> CoproductSubsetter<CNil, HNil> for Choices
impl<Choices> CoproductSubsetter<CNil, HNil> for Choices
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,
Causes
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,
Causes
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,
Causes
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,
Causes
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,
Causes
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,
Causes
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,
Causes
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,
Causes
self
to use its UpperHex
implementation when
Debug
-formatted.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> 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,
Pipes by value. This is generally the method you want to use. Read more
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,
Borrows
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,
Mutably borrows
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) -> Rwhere
Self: Borrow<B>,
B: 'a + ?Sized,
R: 'a,
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere Self: Borrow<B>, B: 'a + ?Sized, R: 'a,
source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R
) -> Rwhere
Self: BorrowMut<B>,
B: 'a + ?Sized,
R: 'a,
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R ) -> Rwhere Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,
source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere
Self: AsRef<U>,
U: 'a + ?Sized,
R: 'a,
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere Self: AsRef<U>, U: 'a + ?Sized, R: 'a,
Borrows
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) -> Rwhere
Self: AsMut<U>,
U: 'a + ?Sized,
R: 'a,
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere Self: AsMut<U>, U: 'a + ?Sized, R: 'a,
Mutably borrows
self
, then passes self.as_mut()
into the pipe
function.source§impl<T> Pointable for T
impl<T> Pointable for T
source§impl<T> Tap for T
impl<T> Tap for T
source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere
Self: Borrow<B>,
B: ?Sized,
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere Self: Borrow<B>, B: ?Sized,
Immutable access to the
Borrow<B>
of a value. Read moresource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere
Self: BorrowMut<B>,
B: ?Sized,
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere Self: BorrowMut<B>, B: ?Sized,
Mutable access to the
BorrowMut<B>
of a value. Read moresource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere
Self: AsRef<R>,
R: ?Sized,
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere Self: AsRef<R>, R: ?Sized,
Immutable access to the
AsRef<R>
view of a value. Read moresource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere
Self: AsMut<R>,
R: ?Sized,
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere Self: AsMut<R>, R: ?Sized,
Mutable access to the
AsMut<R>
view of a value. Read moresource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere
Self: Deref<Target = T>,
T: ?Sized,
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere Self: Deref<Target = T>, T: ?Sized,
Immutable access to the
Deref::Target
of a value. Read moresource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere
Self: DerefMut<Target = T> + Deref,
T: ?Sized,
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere Self: DerefMut<Target = T> + Deref, T: ?Sized,
Mutable access to the
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
Calls
.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
Calls
.tap_mut()
only in debug builds, and is erased in release
builds.source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere
Self: Borrow<B>,
B: ?Sized,
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere Self: Borrow<B>, B: ?Sized,
Calls
.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)) -> Selfwhere
Self: BorrowMut<B>,
B: ?Sized,
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere Self: BorrowMut<B>, B: ?Sized,
Calls
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere
Self: AsRef<R>,
R: ?Sized,
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere Self: AsRef<R>, R: ?Sized,
Calls
.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)) -> Selfwhere
Self: AsMut<R>,
R: ?Sized,
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere Self: AsMut<R>, R: ?Sized,
Calls
.tap_ref_mut()
only in debug builds, and is erased in release
builds.