pub trait AtomicOperation: Send {
// Required method
fn as_executor(&mut self) -> &mut PgConnection;
// Provided methods
fn maybe_now(&self) -> Option<DateTime<Utc>> { ... }
fn clock(&self) -> &ClockHandle { ... }
fn add_commit_hook<H: CommitHook>(&mut self, hook: H) -> Result<(), H> { ... }
fn commit_hook<H: CommitHook>(&self) -> Option<&H> { ... }
}Expand description
Trait to signify we can make multiple consistent database roundtrips.
Its a stand in for &mut sqlx::Transaction<'_, DB>.
The reason for having a trait is to support custom types that wrap the inner
transaction while providing additional functionality.
See DbOp or DbOpWithTime.
Required Methods§
Sourcefn as_executor(&mut self) -> &mut PgConnection
fn as_executor(&mut self) -> &mut PgConnection
Returns the sqlx::Executor implementation.
The desired way to represent this would actually be as a GAT:
trait AtomicOperation {
type Executor<'c>: sqlx::PgExecutor<'c>
where Self: 'c;
fn as_executor<'c>(&'c mut self) -> Self::Executor<'c>;
}But GATs don’t play well with async_trait::async_trait due to lifetime constraints
so we return the concrete &mut db::Connection instead as a work around.
Since this trait is generally applied to types that wrap a sqlx::Transaction
there is no variance in the return type - so its fine.
Provided Methods§
Sourcefn maybe_now(&self) -> Option<DateTime<Utc>>
fn maybe_now(&self) -> Option<DateTime<Utc>>
Function for querying when the operation is taking place - if it is cached.
Sourcefn clock(&self) -> &ClockHandle
fn clock(&self) -> &ClockHandle
Returns the clock handle for time operations.
Default implementation returns the global clock handle.
Sourcefn add_commit_hook<H: CommitHook>(&mut self, hook: H) -> Result<(), H>
fn add_commit_hook<H: CommitHook>(&mut self, hook: H) -> Result<(), H>
Registers a commit hook that will run pre_commit before and post_commit after the transaction commits. Returns Ok(()) if the hook was registered, Err(hook) if hooks are not supported.
Sourcefn commit_hook<H: CommitHook>(&self) -> Option<&H>
fn commit_hook<H: CommitHook>(&self) -> Option<&H>
Typed shared access to the currently-accumulating commit hook of type H,
if this operation supports commit hooks and one is registered.
Returns the hook a subsequent add_commit_hook::<H> call would merge into.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".