rust_query

Struct ThreadToken

Source
pub struct ThreadToken { /* private fields */ }
Expand description

ThreadToken is used to separate transactions in time for each thread.

Only one ThreadToken can exist in each thread and transactions need to mutably borrow a thread token. Furthermore, neither ThreadToken nor any of the transaction types can be moved between threads. This makes it impossible to have access to two transactions from one thread.

Implementations§

Source§

impl ThreadToken

Source

pub fn try_new() -> Option<Self>

Create a ThreadToken if it was not created yet on this thread.

Async tasks often share their thread and can thus not use this method. Instead you should use your equivalent of spawn_blocking or block_in_place. These functions guarantee that you have a unique thread and thus allow ThreadToken::try_new.

Note that using spawn_blocking for sqlite is actually a good practice. Sqlite queries can be expensive, it might need to read from disk which is slow. Doing so on all async runtime threads would prevent other tasks from executing.

Trait Implementations§

Source§

impl Drop for ThreadToken

Source§

fn drop(&mut self)

Dropping a ThreadToken allows retrieving it with ThreadToken::try_new again.

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

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> Same for T

Source§

type Output = T

Should always be Self
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.
Source§

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

Source§

fn vzip(self) -> V