risingwave_frontend::session

Struct SessionImpl

source
pub struct SessionImpl {
Show 13 fields env: FrontendEnv, auth_context: Arc<AuthContext>, user_authenticator: UserAuthenticator, config_map: Arc<RwLock<SessionConfig>>, notices: RwLock<Vec<String>>, id: (i32, i32), peer_addr: AddressRef, txn: Arc<Mutex<State>>, current_query_cancel_flag: Mutex<Option<ShutdownSender>>, exec_context: Mutex<Option<Weak<ExecContext>>>, last_idle_instant: Arc<Mutex<Option<Instant>>>, cursor_manager: Arc<CursorManager>, temporary_source_manager: Arc<Mutex<TemporarySourceManager>>,
}

Fields§

§env: FrontendEnv§auth_context: Arc<AuthContext>§user_authenticator: UserAuthenticator

Used for user authentication.

§config_map: Arc<RwLock<SessionConfig>>

Stores the value of configurations.

§notices: RwLock<Vec<String>>

buffer the Notices to users,

§id: (i32, i32)

Identified by process_id, secret_key. Corresponds to SessionManager.

§peer_addr: AddressRef

Client address

§txn: Arc<Mutex<State>>

Transaction state. TODO: get rid of the Mutex here as a workaround if the Send requirement of async functions, there should actually be no contention.

§current_query_cancel_flag: Mutex<Option<ShutdownSender>>

Query cancel flag. This flag is set only when current query is executed in local mode, and used to cancel local query.

§exec_context: Mutex<Option<Weak<ExecContext>>>

execution context represents the lifetime of a running SQL in the current session

§last_idle_instant: Arc<Mutex<Option<Instant>>>

Last idle instant

§cursor_manager: Arc<CursorManager>§temporary_source_manager: Arc<Mutex<TemporarySourceManager>>

temporary sources for the current session

Implementations§

source§

impl SessionImpl

source

pub fn check_privileges(&self, items: &[ObjectCheckItem]) -> Result<(), RwError>

Check whether the user of the current session has privileges in items.

source

pub fn is_super_user(&self) -> bool

Returns true if the user of the current session is a super user.

source

pub fn check_privilege_for_drop_alter( &self, schema_name: &str, relation: &impl OwnedByUserCatalog, ) -> Result<(), RwError>

Check whether the user of the current session has the privilege to drop or alter the relation relation in the schema with name schema_name.

Note that the right to drop or alter in PostgreSQL is special and not covered by the general GRANTs.

The right to drop an object, or to alter its definition in any way, is not treated as a grantable privilege; it is inherent in the owner, and cannot be granted or revoked.

Reference: https://www.postgresql.org/docs/current/sql-grant.html

source

pub fn check_privilege_for_drop_alter_db_schema( &self, db_schema: &impl OwnedByUserCatalog, ) -> Result<(), RwError>

Check whether the user of the current session has the privilege to drop or alter the db_schema, which is either a database or schema.

Only the owner of the database, or a superuser, can drop a database.

Reference: https://www.postgresql.org/docs/current/manage-ag-dropdb.html

A schema can only be dropped by its owner or a superuser.

Reference: https://www.postgresql.org/docs/current/sql-dropschema.html

source§

impl SessionImpl

source

pub fn txn_begin_implicit(&self) -> ImplicitAutoCommitGuard

Starts an implicit transaction if there’s no explicit transaction in progress. Called at the beginning of handling each statement.

Returns a guard that auto commits the implicit transaction when dropped.

source

pub fn txn_begin_explicit(&self, access_mode: AccessMode)

Starts an explicit transaction with the specified access mode from START TRANSACTION.

source

pub fn txn_commit_explicit(&self)

Commits an explicit transaction.

source

pub fn txn_rollback_explicit(&self)

Rollbacks an explicit transaction.

source

fn txn_ctx(&self) -> MappedMutexGuard<'_, Context>

Returns the transaction context.

source

pub fn get_pinned_snapshot(&self) -> Option<ReadSnapshot>

source

pub fn unpin_snapshot(&self)

Unpin snapshot by replacing the snapshot with None.

source

pub fn pinned_snapshot(&self) -> ReadSnapshot

Acquires and pins a snapshot for the current transaction.

If a snapshot is already acquired, returns it directly.

source§

impl SessionImpl

source

pub fn txn_write_guard(&self) -> Result<WriteGuard, RwError>

Returns a WriteGuard, or an error if write operations are not permitted in the current transaction.

source

pub fn catalog_writer(&self) -> Result<&dyn CatalogWriter, RwError>

Returns the catalog writer, if write operations are permitted in the current transaction.

source

pub fn user_info_writer(&self) -> Result<&dyn UserInfoWriter, RwError>

Returns the user info writer, if write operations are permitted in the current transaction.

source§

impl SessionImpl

source

pub fn new( env: FrontendEnv, auth_context: Arc<AuthContext>, user_authenticator: UserAuthenticator, id: SessionId, peer_addr: AddressRef, session_config: SessionConfig, ) -> Self

source

pub fn env(&self) -> &FrontendEnv

source

pub fn auth_context(&self) -> Arc<AuthContext>

source

pub fn database(&self) -> &str

source

pub fn user_name(&self) -> &str

source

pub fn user_id(&self) -> u32

source

pub fn shared_config(&self) -> Arc<RwLock<SessionConfig>>

source

pub fn config(&self) -> RwLockReadGuard<'_, SessionConfig>

source

pub fn set_config(&self, key: &str, value: String) -> Result<String, RwError>

source

pub fn set_config_report( &self, key: &str, value: Option<String>, reporter: impl ConfigReporter, ) -> Result<String, RwError>

source

pub fn session_id(&self) -> SessionId

source

pub fn running_sql(&self) -> Option<Arc<str>>

source

pub fn get_cursor_manager(&self) -> Arc<CursorManager>

source

pub fn peer_addr(&self) -> &Address

source

pub fn elapse_since_running_sql(&self) -> Option<u128>

source

pub fn elapse_since_last_idle_instant(&self) -> Option<u128>

source

pub fn check_relation_name_duplicated( &self, name: ObjectName, stmt_type: StatementType, if_not_exists: bool, ) -> Result<Either<(), RwPgResponse>, CheckRelationError>

source

pub fn check_secret_name_duplicated( &self, name: ObjectName, ) -> Result<(), RwError>

source

pub fn check_connection_name_duplicated( &self, name: ObjectName, ) -> Result<(), RwError>

source

pub fn get_database_and_schema_id_for_create( &self, schema_name: Option<String>, ) -> Result<(u32, u32), RwError>

Also check if the user has the privilege to create in the schema.

source

pub fn get_connection_by_name( &self, schema_name: Option<String>, connection_name: &str, ) -> Result<Arc<ConnectionCatalog>, RwError>

source

pub fn get_subscription_by_schema_id_name( &self, schema_id: u32, subscription_name: &str, ) -> Result<Arc<SubscriptionCatalog>, RwError>

source

pub fn get_subscription_by_name( &self, schema_name: Option<String>, subscription_name: &str, ) -> Result<Arc<SubscriptionCatalog>, RwError>

source

pub fn get_table_by_id( &self, table_id: &TableId, ) -> Result<Arc<TableCatalog>, RwError>

source

pub fn get_table_by_name( &self, table_name: &str, db_id: u32, schema_id: u32, ) -> Result<Arc<TableCatalog>, RwError>

source

pub fn get_secret_by_name( &self, schema_name: Option<String>, secret_name: &str, ) -> Result<Arc<SecretCatalog>, RwError>

source

pub fn list_change_log_epochs( &self, table_id: u32, min_epoch: u64, max_count: u32, ) -> Result<Vec<u64>, RwError>

source

pub fn clear_cancel_query_flag(&self)

source

pub fn reset_cancel_query_flag(&self) -> ShutdownToken

source

fn clear_notices(&self)

source

pub fn cancel_current_query(&self)

source

pub fn cancel_current_creating_job(&self)

source

pub async fn run_statement( self: Arc<Self>, sql: Arc<str>, formats: Vec<Format>, ) -> Result<PgResponse<PgResponseStream>, BoxedError>

This function only used for test now. Maybe we can remove it in the future.

source

pub fn notice_to_user(&self, str: impl Into<String>)

source

pub fn is_barrier_read(&self) -> bool

source

pub fn statement_timeout(&self) -> Duration

source

pub fn create_temporary_source(&self, source: SourceCatalog)

source

pub fn get_temporary_source(&self, name: &str) -> Option<SourceCatalog>

source

pub fn drop_temporary_source(&self, name: &str)

source

pub fn temporary_source_manager(&self) -> TemporarySourceManager

source

pub async fn check_cluster_limits(&self) -> Result<(), RwError>

Trait Implementations§

source§

impl Session for SessionImpl

source§

async fn run_one_query( self: Arc<Self>, stmt: Statement, format: Format, ) -> Result<PgResponse<PgResponseStream>, BoxedError>

A copy of run_statement but exclude the parser part so each run must be at most one statement. The str sql use the to_string of AST. Consider Reuse later.

source§

fn init_exec_context(&self, sql: Arc<str>) -> ExecContextGuard

Init and return an ExecContextGuard which could be used as a guard to represent the execution flow.

source§

fn check_idle_in_transaction_timeout(&self) -> PsqlResult<()>

Check whether idle transaction timeout. If yes, unpin snapshot and return an IdleInTxnTimeout error.

source§

type Portal = Portal

source§

type PreparedStatement = PrepareStatement

source§

type ValuesStream = PgResponseStream

source§

fn user_authenticator(&self) -> &UserAuthenticator

source§

fn id(&self) -> SessionId

source§

async fn parse( self: Arc<Self>, statement: Option<Statement>, params_types: Vec<Option<DataType>>, ) -> Result<PrepareStatement, BoxedError>

source§

fn bind( self: Arc<Self>, prepare_statement: PrepareStatement, params: Vec<Option<Bytes>>, param_formats: Vec<Format>, result_formats: Vec<Format>, ) -> Result<Portal, BoxedError>

source§

async fn execute( self: Arc<Self>, portal: Portal, ) -> Result<PgResponse<PgResponseStream>, BoxedError>

source§

fn describe_statement( self: Arc<Self>, prepare_statement: PrepareStatement, ) -> Result<(Vec<DataType>, Vec<PgFieldDescriptor>), BoxedError>

source§

fn describe_portal( self: Arc<Self>, portal: Portal, ) -> Result<Vec<PgFieldDescriptor>, BoxedError>

source§

fn set_config(&self, key: &str, value: String) -> Result<String, BoxedError>

source§

fn take_notices(self: Arc<Self>) -> Vec<String>

try to take the current notices from the session
source§

fn transaction_status(&self) -> TransactionStatus

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<Choices> CoproductSubsetter<CNil, HNil> for Choices

§

type Remainder = Choices

§

fn subset( self, ) -> Result<CNil, <Choices as CoproductSubsetter<CNil, HNil>>::Remainder>

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more
§

impl<T> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

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,

Causes self to use its Display implementation when Debug-formatted.
§

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,

Causes self to use its LowerHex implementation when Debug-formatted.
§

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,

Causes self to use its Pointer implementation when Debug-formatted.
§

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,

Causes self to use its UpperHex implementation when Debug-formatted.
§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> FutureExt for T

§

fn with_context(self, otel_cx: Context) -> WithContext<Self>

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
§

fn with_current_context(self) -> WithContext<Self>

Attaches the current Context to this type, returning a WithContext wrapper. Read more
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> IntoEither for T

source§

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 more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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
source§

impl<T> IntoRequest<T> for T

source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
§

impl<T> IntoResult<T> for T

§

type Err = Infallible

§

fn into_result(self) -> Result<T, <T as IntoResult<T>>::Err>

§

impl<Unshared, Shared> IntoShared<Shared> for Unshared
where Shared: FromUnshared<Unshared>,

§

fn into_shared(self) -> Shared

Creates a shared type from an unshared type.
§

impl<T, U, I> LiftInto<U, I> for T
where U: LiftFrom<T, I>,

§

fn lift_into(self) -> U

Performs the indexed conversion.
source§

impl<M> MetricVecRelabelExt for M

source§

fn relabel( self, metric_level: MetricLevel, relabel_threshold: MetricLevel, ) -> RelabeledMetricVec<M>

source§

fn relabel_n( self, metric_level: MetricLevel, relabel_threshold: MetricLevel, relabel_num: usize, ) -> RelabeledMetricVec<M>

source§

fn relabel_debug_1( self, relabel_threshold: MetricLevel, ) -> RelabeledMetricVec<M>

Equivalent to RelabeledMetricVec::with_metric_level_relabel_n with metric_level set to MetricLevel::Debug and relabel_num set to 1.
§

impl<T> Pipe for T
where T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where 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) -> R
where 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) -> R
where 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
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

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
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

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
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same for T

source§

type Output = T

Should always be Self
§

impl<Source> Sculptor<HNil, HNil> for Source

§

type Remainder = Source

§

fn sculpt(self) -> (HNil, <Source as Sculptor<HNil, HNil>>::Remainder)

Consumes the current HList and returns an HList with the requested shape. Read more
source§

impl<T> SerTo<T> for T

§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

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

Calls .tap_mut() only in debug builds, and is erased in release builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

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
where Self: BorrowMut<B>, B: ?Sized,

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
where Self: AsRef<R>, R: ?Sized,

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
where Self: AsMut<R>, R: ?Sized,

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
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

impl<T> LruValue for T
where T: Send + Sync,

§

impl<T> MaybeSend for T
where T: Send,

§

impl<T> MaybeSend for T
where T: Send,

§

impl<T> Value for T
where T: Send + Sync + 'static,