pub struct PostgresStore { /* private fields */ }Expand description
A journal on PostgreSQL.
Implementations§
Source§impl PostgresStore
impl PostgresStore
Sourcepub fn signing_as(self, signer: Arc<dyn Signer>) -> Self
pub fn signing_as(self, signer: Arc<dyn Signer>) -> Self
Write records signed as this identity.
Off unless asked. The default is unsigned rather than self-signed: a plane that minted its own key would produce records that look attested and prove nothing.
Sourcepub fn upcasting_with(self, upcaster: Arc<dyn Upcaster>) -> Self
pub fn upcasting_with(self, upcaster: Arc<dyn Upcaster>) -> Self
Read records through this upcaster instead of the one this build ships.
The default is current_upcaster,
which is what a deployment wants; another is for a reader that must
lift shapes this build’s own does not.
Sourcepub fn for_tenant(self, tenant: TenantId) -> Self
pub fn for_tenant(self, tenant: TenantId) -> Self
Serve one tenant.
The handle is the boundary: a store built for acme cannot name a
globex run even holding a valid id, because the tenant is part of every
key rather than a predicate someone remembers to add. The checkpoint
origin carries the tenant too, so two tenants’ checkpoints are not
mistaken for one plane’s — composed at read time from the base name and
the tenant, never baked into a field. Baking it in made the builder
order-sensitive: for_tenant called twice double-qualified the origin,
and origin() after for_tenant silently dropped the tenant — either
way a checkpoint under a name no verifier ever saw again.
Source§impl PostgresStore
impl PostgresStore
Sourcepub async fn explain(&self, sql: &str) -> Result<String, StoreError>
pub async fn explain(&self, sql: &str) -> Result<String, StoreError>
The planner’s answer for a statement, as EXPLAIN lines.
Gated on testkit because it runs whatever SQL it is handed, which is a
capability a production build has no reason to carry. It exists so a
test can assert a plan rather than a duration: a stopwatch over an
empty database passes whichever plan the query gets, which is the shape
of check that cannot fail — and the defect it was written for was a
sweep read whose answers were right and whose cost was the whole tenant.
§Errors
If the database cannot be reached or the statement does not plan.
Sourcepub async fn erasure_probe(&self, scope: &str) -> Result<bool, StoreError>
pub async fn erasure_probe(&self, scope: &str) -> Result<bool, StoreError>
A lifecycle lock for cryptographic memory erasure, in this database.
The coordinator that makes EncryptedMemoryStore honest on an
active-active plane. Deliberately taken from the store rather than
constructed from a connection string: a lock in a different database
would be a second system that can be up while this one is down, and a
coordinator that is available when the data is not protects nothing.
let memory = EncryptedMemoryStore::new(inner, keys, tenant)
.coordinated_by(Arc::new(store.erasure_coordinator()));Whether somebody is holding a scope’s erasure lock, without taking it.
pg_try_advisory_lock, released immediately if it was free — so this
answers the question and leaves the answer true. For tests and operator
diagnostics; the erasure path itself blocks rather than probing, because
a caller that failed to get the lock would have to choose between
retrying and skipping, and skipping an erasure is the wrong answer to
contention.
§Errors
If the database cannot be reached.
pub fn erasure_coordinator(&self) -> PostgresCoordinator
Sourcepub async fn connect(url: &str) -> Result<Self, StoreError>
pub async fn connect(url: &str) -> Result<Self, StoreError>
Connect and apply the schema.
§Errors
If the URL does not parse, the pool cannot be built, or the schema cannot be applied.
Sourcepub async fn connect_sized(
url: &str,
max_connections: Option<usize>,
) -> Result<Self, StoreError>
pub async fn connect_sized( url: &str, max_connections: Option<usize>, ) -> Result<Self, StoreError>
connect, with an explicit connection ceiling.
The default ceiling is the pool’s own (CPU-derived), which is the right answer until it is not: a deployment sharing the database with other services sizes this deliberately, and a test proving behaviour under pool exhaustion needs a pool small enough to exhaust — the task-claim deadlock this crate shipped reproduced only where the pool was smaller than the racers, so every big development machine passed over it.
§Errors
As connect.
Trait Implementations§
Source§impl AtomicJournal for PostgresStore
impl AtomicJournal for PostgresStore
Source§fn append_atomic<'life0, 'life1, 'async_trait>(
&'life0 self,
run: RunId,
epoch: Epoch,
work: &'life1 dyn AtomicWork,
) -> Pin<Box<dyn Future<Output = Result<Vec<Record>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn append_atomic<'life0, 'life1, 'async_trait>(
&'life0 self,
run: RunId,
epoch: Epoch,
work: &'life1 dyn AtomicWork,
) -> Pin<Box<dyn Future<Output = Result<Vec<Record>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
work and append what it returns, in one transaction, fenced by
epoch exactly as an ordinary append is. Read moreSource§impl AuthorityStore for PostgresStore
impl AuthorityStore for PostgresStore
Source§fn issue<'life0, 'life1, 'async_trait>(
&'life0 self,
authority: &'life1 StandingAuthority,
) -> Pin<Box<dyn Future<Output = Result<(), AuthorityError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn issue<'life0, 'life1, 'async_trait>(
&'life0 self,
authority: &'life1 StandingAuthority,
) -> Pin<Box<dyn Future<Output = Result<(), AuthorityError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn draw<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 AuthorityId,
key: EffectKey,
amount: Spend,
at: Timestamp,
) -> Pin<Box<dyn Future<Output = Result<Drawn, AuthorityError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn draw<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 AuthorityId,
key: EffectKey,
amount: Spend,
at: Timestamp,
) -> Pin<Box<dyn Future<Output = Result<Drawn, AuthorityError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
amount, or refuse and consume nothing. Read moreSource§fn revoke<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
id: &'life1 AuthorityId,
reason: &'life2 str,
at: Timestamp,
) -> Pin<Box<dyn Future<Output = Result<(), AuthorityError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn revoke<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
id: &'life1 AuthorityId,
reason: &'life2 str,
at: Timestamp,
) -> Pin<Box<dyn Future<Output = Result<(), AuthorityError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Source§fn state<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 AuthorityId,
) -> Pin<Box<dyn Future<Output = Result<Option<AuthorityState>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn state<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 AuthorityId,
) -> Pin<Box<dyn Future<Output = Result<Option<AuthorityState>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§impl BatchStore for PostgresStore
impl BatchStore for PostgresStore
Source§fn open<'life0, 'life1, 'async_trait>(
&'life0 self,
id: BatchId,
plan_digest: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn open<'life0, 'life1, 'async_trait>(
&'life0 self,
id: BatchId,
plan_digest: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
id, so a retried submission does not
fork one act into two. Read moreSource§fn plan_digest<'life0, 'async_trait>(
&'life0 self,
id: BatchId,
) -> Pin<Box<dyn Future<Output = Result<Option<String>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn plan_digest<'life0, 'async_trait>(
&'life0 self,
id: BatchId,
) -> Pin<Box<dyn Future<Output = Result<Option<String>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
None for no such batch. Read moreSource§fn mark_exhausted<'life0, 'async_trait>(
&'life0 self,
id: BatchId,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn mark_exhausted<'life0, 'async_trait>(
&'life0 self,
id: BatchId,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn is_exhausted<'life0, 'async_trait>(
&'life0 self,
id: BatchId,
) -> Pin<Box<dyn Future<Output = Result<bool, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn is_exhausted<'life0, 'async_trait>(
&'life0 self,
id: BatchId,
) -> Pin<Box<dyn Future<Output = Result<bool, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn reserve<'life0, 'life1, 'async_trait>(
&'life0 self,
batch: BatchId,
key: &'life1 str,
run: RunId,
) -> Pin<Box<dyn Future<Output = Result<ItemRecord, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn reserve<'life0, 'life1, 'async_trait>(
&'life0 self,
batch: BatchId,
key: &'life1 str,
run: RunId,
) -> Pin<Box<dyn Future<Output = Result<ItemRecord, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn record<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
batch: BatchId,
key: &'life1 str,
outcome: &'life2 ItemOutcome,
spend: Spend,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn record<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
batch: BatchId,
key: &'life1 str,
outcome: &'life2 ItemOutcome,
spend: Spend,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Source§fn cursor<'life0, 'async_trait>(
&'life0 self,
batch: BatchId,
) -> Pin<Box<dyn Future<Output = Result<Option<String>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn cursor<'life0, 'async_trait>(
&'life0 self,
batch: BatchId,
) -> Pin<Box<dyn Future<Output = Result<Option<String>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn census<'life0, 'async_trait>(
&'life0 self,
batch: BatchId,
) -> Pin<Box<dyn Future<Output = Result<BatchCensus, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn census<'life0, 'async_trait>(
&'life0 self,
batch: BatchId,
) -> Pin<Box<dyn Future<Output = Result<BatchCensus, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn items<'life0, 'async_trait>(
&'life0 self,
batch: BatchId,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<ItemRecord>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn items<'life0, 'async_trait>(
&'life0 self,
batch: BatchId,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<ItemRecord>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
cursor and census.Source§fn items_needing_attention<'life0, 'async_trait>(
&'life0 self,
batch: BatchId,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<ItemRecord>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn items_needing_attention<'life0, 'async_trait>(
&'life0 self,
batch: BatchId,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<ItemRecord>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§impl CaseStore for PostgresStore
impl CaseStore for PostgresStore
Source§fn correlate<'life0, 'life1, 'async_trait>(
&'life0 self,
keys: &'life1 [CorrelationKey],
) -> Pin<Box<dyn Future<Output = Result<Option<CaseId>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn correlate<'life0, 'life1, 'async_trait>(
&'life0 self,
keys: &'life1 [CorrelationKey],
) -> Pin<Box<dyn Future<Output = Result<Option<CaseId>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn correlate_or_open<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
kind: &'life1 str,
keys: &'life2 [CorrelationKey],
at: Timestamp,
) -> Pin<Box<dyn Future<Output = Result<Correlation, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn correlate_or_open<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
kind: &'life1 str,
keys: &'life2 [CorrelationKey],
at: Timestamp,
) -> Pin<Box<dyn Future<Output = Result<Correlation, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Source§fn case<'life0, 'async_trait>(
&'life0 self,
id: CaseId,
) -> Pin<Box<dyn Future<Output = Result<Option<Case>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn case<'life0, 'async_trait>(
&'life0 self,
id: CaseId,
) -> Pin<Box<dyn Future<Output = Result<Option<Case>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn cases<'life0, 'async_trait>(
&'life0 self,
after: Option<CaseId>,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<Case>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn cases<'life0, 'async_trait>(
&'life0 self,
after: Option<CaseId>,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<Case>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn import_case<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
case: &'life1 Case,
deadlines: &'life2 [Deadline],
blobs: &'life3 [Digest],
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn import_case<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
case: &'life1 Case,
deadlines: &'life2 [Deadline],
blobs: &'life3 [Digest],
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
Source§fn attach_run<'life0, 'async_trait>(
&'life0 self,
case: CaseId,
run: RunId,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn attach_run<'life0, 'async_trait>(
&'life0 self,
case: CaseId,
run: RunId,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn link_blob<'life0, 'async_trait>(
&'life0 self,
case: CaseId,
digest: Digest,
at: Timestamp,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn link_blob<'life0, 'async_trait>(
&'life0 self,
case: CaseId,
digest: Digest,
at: Timestamp,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn blobs_of<'life0, 'async_trait>(
&'life0 self,
case: CaseId,
) -> Pin<Box<dyn Future<Output = Result<Vec<Digest>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn blobs_of<'life0, 'async_trait>(
&'life0 self,
case: CaseId,
) -> Pin<Box<dyn Future<Output = Result<Vec<Digest>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn put_state<'life0, 'async_trait>(
&'life0 self,
case: CaseId,
expected: CaseVersion,
state: Value,
) -> Pin<Box<dyn Future<Output = Result<CaseVersion, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn put_state<'life0, 'async_trait>(
&'life0 self,
case: CaseId,
expected: CaseVersion,
state: Value,
) -> Pin<Box<dyn Future<Output = Result<CaseVersion, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
expected. Read moreSource§fn set_status<'life0, 'async_trait>(
&'life0 self,
case: CaseId,
status: CaseStatus,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn set_status<'life0, 'async_trait>(
&'life0 self,
case: CaseId,
status: CaseStatus,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn close<'life0, 'async_trait>(
&'life0 self,
case: CaseId,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn close<'life0, 'async_trait>(
&'life0 self,
case: CaseId,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn register_deadline<'life0, 'life1, 'async_trait>(
&'life0 self,
d: &'life1 Deadline,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn register_deadline<'life0, 'life1, 'async_trait>(
&'life0 self,
d: &'life1 Deadline,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn deadlines<'life0, 'async_trait>(
&'life0 self,
case: CaseId,
) -> Pin<Box<dyn Future<Output = Result<Vec<Deadline>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn set_deadline_state<'life0, 'life1, 'async_trait>(
&'life0 self,
case: CaseId,
name: &'life1 str,
state: DeadlineState,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn breach_deadline<'life0, 'life1, 'async_trait>(
&'life0 self,
case: CaseId,
name: &'life1 str,
now: Timestamp,
) -> Pin<Box<dyn Future<Output = Result<bool, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn breach_deadline<'life0, 'life1, 'async_trait>(
&'life0 self,
case: CaseId,
name: &'life1 str,
now: Timestamp,
) -> Pin<Box<dyn Future<Output = Result<bool, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
now. Returns whether it applied. Read moreSource§fn due<'life0, 'async_trait>(
&'life0 self,
now: Timestamp,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<Deadline>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn due<'life0, 'async_trait>(
&'life0 self,
now: Timestamp,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<Deadline>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn breaches_to_note<'life0, 'async_trait>(
&'life0 self,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<Deadline>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn breaches_to_note<'life0, 'async_trait>(
&'life0 self,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<Deadline>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
breach_deadline applied whose
account the sweep has not yet written, longest-overdue first.Source§fn mark_breach_noted<'life0, 'life1, 'async_trait>(
&'life0 self,
case: CaseId,
name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn mark_breach_noted<'life0, 'life1, 'async_trait>(
&'life0 self,
case: CaseId,
name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn breached<'life0, 'async_trait>(
&'life0 self,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<Deadline>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn breached<'life0, 'async_trait>(
&'life0 self,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<Deadline>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn acknowledge_breach<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
case: CaseId,
name: &'life1 str,
note: &'life2 BreachNote,
) -> Pin<Box<dyn Future<Output = Result<bool, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn acknowledge_breach<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
case: CaseId,
name: &'life1 str,
note: &'life2 BreachNote,
) -> Pin<Box<dyn Future<Output = Result<bool, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Source§fn place_hold<'life0, 'life1, 'async_trait>(
&'life0 self,
case: CaseId,
hold: &'life1 LegalHold,
) -> Pin<Box<dyn Future<Output = Result<bool, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn place_hold<'life0, 'life1, 'async_trait>(
&'life0 self,
case: CaseId,
hold: &'life1 LegalHold,
) -> Pin<Box<dyn Future<Output = Result<bool, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn release_hold<'life0, 'async_trait>(
&'life0 self,
case: CaseId,
) -> Pin<Box<dyn Future<Output = Result<bool, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn release_hold<'life0, 'async_trait>(
&'life0 self,
case: CaseId,
) -> Pin<Box<dyn Future<Output = Result<bool, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn release_hold_if<'life0, 'life1, 'async_trait>(
&'life0 self,
case: CaseId,
standing: &'life1 LegalHold,
) -> Pin<Box<dyn Future<Output = Result<bool, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn release_hold_if<'life0, 'life1, 'async_trait>(
&'life0 self,
case: CaseId,
standing: &'life1 LegalHold,
) -> Pin<Box<dyn Future<Output = Result<bool, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
case only if it is still standing — same instant,
same reason, same operator. Read moreSource§fn hold<'life0, 'async_trait>(
&'life0 self,
case: CaseId,
) -> Pin<Box<dyn Future<Output = Result<Option<LegalHold>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn hold<'life0, 'async_trait>(
&'life0 self,
case: CaseId,
) -> Pin<Box<dyn Future<Output = Result<Option<LegalHold>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn holds<'life0, 'async_trait>(
&'life0 self,
after: Option<CaseId>,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<(CaseId, LegalHold)>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn holds<'life0, 'async_trait>(
&'life0 self,
after: Option<CaseId>,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<(CaseId, LegalHold)>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn by_status<'life0, 'async_trait>(
&'life0 self,
status: CaseStatus,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<Case>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn by_status<'life0, 'async_trait>(
&'life0 self,
status: CaseStatus,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<Case>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn record_drill<'life0, 'life1, 'async_trait>(
&'life0 self,
record: &'life1 DrillRecord,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn record_drill<'life0, 'life1, 'async_trait>(
&'life0 self,
record: &'life1 DrillRecord,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn last_drill<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Option<DrillRecord>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn last_drill<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Option<DrillRecord>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
None if this plane has never run one. Read moreSource§impl Clone for PostgresStore
impl Clone for PostgresStore
Source§impl Debug for PostgresStore
impl Debug for PostgresStore
Source§impl DisclosureRegister for PostgresStore
impl DisclosureRegister for PostgresStore
Source§fn record<'life0, 'life1, 'async_trait>(
&'life0 self,
act: &'life1 Disclosure,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn record<'life0, 'life1, 'async_trait>(
&'life0 self,
act: &'life1 Disclosure,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn disclosures<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
cases: &'life1 [CaseId],
runs: &'life2 [RunId],
) -> Pin<Box<dyn Future<Output = Result<Vec<Disclosure>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn disclosures<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
cases: &'life1 [CaseId],
runs: &'life2 [RunId],
) -> Pin<Box<dyn Future<Output = Result<Vec<Disclosure>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Source§impl EventStore for PostgresStore
impl EventStore for PostgresStore
Source§fn buffer<'life0, 'life1, 'async_trait>(
&'life0 self,
event: &'life1 InboundEvent,
at: Timestamp,
) -> Pin<Box<dyn Future<Output = Result<bool, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn buffer<'life0, 'life1, 'async_trait>(
&'life0 self,
event: &'life1 InboundEvent,
at: Timestamp,
) -> Pin<Box<dyn Future<Output = Result<bool, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn subscribe<'life0, 'life1, 'async_trait>(
&'life0 self,
sub: &'life1 Subscription,
at: Timestamp,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn subscribe<'life0, 'life1, 'async_trait>(
&'life0 self,
sub: &'life1 Subscription,
at: Timestamp,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn claim_for<'life0, 'life1, 'async_trait>(
&'life0 self,
sub: &'life1 Subscription,
at: Timestamp,
) -> Pin<Box<dyn Future<Output = Result<Option<BufferedEvent>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn claim_for<'life0, 'life1, 'async_trait>(
&'life0 self,
sub: &'life1 Subscription,
at: Timestamp,
) -> Pin<Box<dyn Future<Output = Result<Option<BufferedEvent>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn match_waiter<'life0, 'life1, 'async_trait>(
&'life0 self,
event: &'life1 InboundEvent,
at: Timestamp,
) -> Pin<Box<dyn Future<Output = Result<Option<Subscription>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn match_waiter<'life0, 'life1, 'async_trait>(
&'life0 self,
event: &'life1 InboundEvent,
at: Timestamp,
) -> Pin<Box<dyn Future<Output = Result<Option<Subscription>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn deliver_to<'life0, 'life1, 'async_trait>(
&'life0 self,
target: RunId,
event: &'life1 InboundEvent,
at: Timestamp,
) -> Pin<Box<dyn Future<Output = Result<TargetedDelivery, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn deliver_to<'life0, 'life1, 'async_trait>(
&'life0 self,
target: RunId,
event: &'life1 InboundEvent,
at: Timestamp,
) -> Pin<Box<dyn Future<Output = Result<TargetedDelivery, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn unsubscribe<'life0, 'async_trait>(
&'life0 self,
run: RunId,
effect: EffectKey,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn unsubscribe<'life0, 'async_trait>(
&'life0 self,
run: RunId,
effect: EffectKey,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn unsubscribe_run<'life0, 'life1, 'async_trait>(
&'life0 self,
run: RunId,
unanswered: &'life1 [EffectKey],
) -> Pin<Box<dyn Future<Output = Result<Retired, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn unsubscribe_run<'life0, 'life1, 'async_trait>(
&'life0 self,
run: RunId,
unanswered: &'life1 [EffectKey],
) -> Pin<Box<dyn Future<Output = Result<Retired, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn park_wait<'life0, 'life1, 'async_trait>(
&'life0 self,
sub: &'life1 Subscription,
at: Timestamp,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn park_wait<'life0, 'life1, 'async_trait>(
&'life0 self,
sub: &'life1 Subscription,
at: Timestamp,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn parked_waits<'life0, 'async_trait>(
&'life0 self,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<Subscription>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn parked_waits<'life0, 'async_trait>(
&'life0 self,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<Subscription>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn erase_payload<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
source: &'life1 str,
id: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<bool, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn erase_payload<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
source: &'life1 str,
id: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<bool, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Source§fn minter<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
source: &'life1 str,
id: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<Option<Minter>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn minter<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
source: &'life1 str,
id: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<Option<Minter>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Source§fn sweep_unclaimed<'life0, 'life1, 'async_trait>(
&'life0 self,
older_than: Timestamp,
reason: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<usize, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn sweep_unclaimed<'life0, 'life1, 'async_trait>(
&'life0 self,
older_than: Timestamp,
reason: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<usize, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn dead_letters<'life0, 'async_trait>(
&'life0 self,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<DeadLetter>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn dead_letters<'life0, 'async_trait>(
&'life0 self,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<DeadLetter>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§impl JournalStore for PostgresStore
impl JournalStore for PostgresStore
The topology an embedded store cannot serve: several plane instances sharing one store, with fencing and exactly-once arbitrated by the database rather than by hoping the writers agree.
Source§fn atomic(&self) -> Option<&dyn AtomicJournal>
fn atomic(&self) -> Option<&dyn AtomicJournal>
This backend can. That is the whole reason the capability is a question rather than an assumption.
Source§fn read_page<'life0, 'async_trait>(
&'life0 self,
run: RunId,
from: Seq,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<Record>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn read_page<'life0, 'async_trait>(
&'life0 self,
run: RunId,
from: Seq,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<Record>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
The bounded read, and the one that decodes — read is this with no
ceiling, so the two cannot come to disagree about what a record is.
Source§fn seals(&self) -> bool
fn seals(&self) -> bool
Source§fn append<'life0, 'async_trait>(
&'life0 self,
epoch: Epoch,
batch: Vec<Append>,
) -> Pin<Box<dyn Future<Output = Result<Vec<Record>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn append<'life0, 'async_trait>(
&'life0 self,
epoch: Epoch,
batch: Vec<Append>,
) -> Pin<Box<dyn Future<Output = Result<Vec<Record>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn read<'life0, 'async_trait>(
&'life0 self,
run: RunId,
from: Seq,
) -> Pin<Box<dyn Future<Output = Result<Vec<Record>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn read<'life0, 'async_trait>(
&'life0 self,
run: RunId,
from: Seq,
) -> Pin<Box<dyn Future<Output = Result<Vec<Record>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
from (inclusive, 1-based) onward. Read moreSource§fn admitted_as<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<RunId>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn admitted_as<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<RunId>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn forget_admissions<'life0, 'async_trait>(
&'life0 self,
older_than: Timestamp,
) -> Pin<Box<dyn Future<Output = Result<usize, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn forget_admissions<'life0, 'async_trait>(
&'life0 self,
older_than: Timestamp,
) -> Pin<Box<dyn Future<Output = Result<usize, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
older_than. Returns how many. Read moreSource§fn count_by_outcome<'life0, 'life1, 'async_trait>(
&'life0 self,
outcome: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<u64, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn count_by_outcome<'life0, 'life1, 'async_trait>(
&'life0 self,
outcome: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<u64, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn runs_by_outcome<'life0, 'life1, 'async_trait>(
&'life0 self,
outcome: &'life1 str,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<RunId>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn runs_by_outcome<'life0, 'life1, 'async_trait>(
&'life0 self,
outcome: &'life1 str,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<RunId>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
outcome, newest first. Read moreSource§fn runs_by_id<'life0, 'async_trait>(
&'life0 self,
after: Option<RunId>,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<RunId>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn runs_by_id<'life0, 'async_trait>(
&'life0 self,
after: Option<RunId>,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<RunId>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
after. Read moreSource§fn recent_runs<'life0, 'async_trait>(
&'life0 self,
after: Option<(u64, RunId)>,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<(RunId, u64)>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn recent_runs<'life0, 'async_trait>(
&'life0 self,
after: Option<(u64, RunId)>,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<(RunId, u64)>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn recent_runs_from<'life0, 'life1, 'async_trait>(
&'life0 self,
source: &'life1 str,
after: Option<(u64, RunId)>,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<(RunId, u64)>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn recent_runs_from<'life0, 'life1, 'async_trait>(
&'life0 self,
source: &'life1 str,
after: Option<(u64, RunId)>,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<(RunId, u64)>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
recent_runs, narrowed to the runs one producer
admitted: those whose RunAdmitted carries an admission key whose
source half (origin_source) is
source. Read moreSource§fn case_history<'life0, 'async_trait>(
&'life0 self,
case: CaseId,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<Record>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn case_history<'life0, 'async_trait>(
&'life0 self,
case: CaseId,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<Record>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn head<'life0, 'async_trait>(
&'life0 self,
run: RunId,
) -> Pin<Box<dyn Future<Output = Result<Head, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn head<'life0, 'async_trait>(
&'life0 self,
run: RunId,
) -> Pin<Box<dyn Future<Output = Result<Head, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn acquire<'life0, 'life1, 'async_trait>(
&'life0 self,
run: RunId,
owner: &'life1 str,
ttl: Duration,
) -> Pin<Box<dyn Future<Output = Result<Lease, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn acquire<'life0, 'life1, 'async_trait>(
&'life0 self,
run: RunId,
owner: &'life1 str,
ttl: Duration,
) -> Pin<Box<dyn Future<Output = Result<Lease, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn renew<'life0, 'life1, 'async_trait>(
&'life0 self,
run: RunId,
owner: &'life1 str,
epoch: Epoch,
ttl: Duration,
) -> Pin<Box<dyn Future<Output = Result<Lease, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn renew<'life0, 'life1, 'async_trait>(
&'life0 self,
run: RunId,
owner: &'life1 str,
epoch: Epoch,
ttl: Duration,
) -> Pin<Box<dyn Future<Output = Result<Lease, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn waiting_runs<'life0, 'async_trait>(
&'life0 self,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<WaitingRun>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn waiting_runs<'life0, 'async_trait>(
&'life0 self,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<WaitingRun>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn abandoned_runs<'life0, 'async_trait>(
&'life0 self,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<RunId>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn abandoned_runs<'life0, 'async_trait>(
&'life0 self,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<RunId>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn release_lease<'life0, 'async_trait>(
&'life0 self,
run: RunId,
epoch: Epoch,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn release_lease<'life0, 'async_trait>(
&'life0 self,
run: RunId,
epoch: Epoch,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn seal<'life0, 'life1, 'async_trait>(
&'life0 self,
run: RunId,
epoch: Epoch,
outcome: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Digest, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn seal<'life0, 'life1, 'async_trait>(
&'life0 self,
run: RunId,
epoch: Epoch,
outcome: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Digest, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn checkpoint<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Checkpoint, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn checkpoint<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Checkpoint, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn consistency_proof<'life0, 'async_trait>(
&'life0 self,
old_size: u64,
) -> Pin<Box<dyn Future<Output = Result<Vec<Digest>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn consistency_proof<'life0, 'async_trait>(
&'life0 self,
old_size: u64,
) -> Pin<Box<dyn Future<Output = Result<Vec<Digest>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
old_size. Read moreSource§fn inclusion_proof<'life0, 'async_trait>(
&'life0 self,
run: RunId,
) -> Pin<Box<dyn Future<Output = Result<Option<Inclusion>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn inclusion_proof<'life0, 'async_trait>(
&'life0 self,
run: RunId,
) -> Pin<Box<dyn Future<Output = Result<Option<Inclusion>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn inclusion_proof_at<'life0, 'async_trait>(
&'life0 self,
run: RunId,
size: u64,
) -> Pin<Box<dyn Future<Output = Result<Option<Inclusion>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn inclusion_proof_at<'life0, 'async_trait>(
&'life0 self,
run: RunId,
size: u64,
) -> Pin<Box<dyn Future<Output = Result<Option<Inclusion>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
size leaves — the
checkpoint an earlier checkpoint returned, not the
live one. Read moreSource§fn log_positions<'life0, 'life1, 'async_trait>(
&'life0 self,
runs: &'life1 [RunId],
) -> Pin<Box<dyn Future<Output = Result<Vec<Option<(u64, Digest)>>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn log_positions<'life0, 'life1, 'async_trait>(
&'life0 self,
runs: &'life1 [RunId],
) -> Pin<Box<dyn Future<Output = Result<Vec<Option<(u64, Digest)>>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
runs sits in the log — its index and leaf — or None
for a run that is not sealed, in the order asked. Read moreSource§fn request_cancel<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
run: RunId,
actor: &'life1 Operator,
reason: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<bool, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn request_cancel<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
run: RunId,
actor: &'life1 Operator,
reason: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<bool, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Source§fn cancellation<'life0, 'async_trait>(
&'life0 self,
run: RunId,
) -> Pin<Box<dyn Future<Output = Result<Option<Cancellation>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn cancellation<'life0, 'async_trait>(
&'life0 self,
run: RunId,
) -> Pin<Box<dyn Future<Output = Result<Option<Cancellation>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§impl MemoryStore for PostgresStore
impl MemoryStore for PostgresStore
Source§fn seals(&self) -> bool
fn seals(&self) -> bool
Source§fn remember<'life0, 'life1, 'async_trait>(
&'life0 self,
item: &'life1 MemoryItem,
) -> Pin<Box<dyn Future<Output = Result<u64, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn remember<'life0, 'life1, 'async_trait>(
&'life0 self,
item: &'life1 MemoryItem,
) -> Pin<Box<dyn Future<Output = Result<u64, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn recall<'life0, 'life1, 'async_trait>(
&'life0 self,
query: &'life1 Recall,
) -> Pin<Box<dyn Future<Output = Result<Vec<MemoryItem>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn recall<'life0, 'life1, 'async_trait>(
&'life0 self,
query: &'life1 Recall,
) -> Pin<Box<dyn Future<Output = Result<Vec<MemoryItem>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn version<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
version: u64,
) -> Pin<Box<dyn Future<Output = Result<Option<MemoryItem>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn version<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
version: u64,
) -> Pin<Box<dyn Future<Output = Result<Option<MemoryItem>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn current<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
as_of: Option<Timestamp>,
) -> Pin<Box<dyn Future<Output = Result<Option<MemoryItem>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn current<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
as_of: Option<Timestamp>,
) -> Pin<Box<dyn Future<Output = Result<Option<MemoryItem>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
id a fresh recall at as_of would be allowed to
see — or None, which covers a memory that was never written, was
forgotten or swept, or whose effective expiry (min(expires_at, access window)) has passed the cutoff. None for as_of skips the expiry
check, exactly as it does on recall. Read moreSource§fn subject_ids<'life0, 'life1, 'async_trait>(
&'life0 self,
subject: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<String>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn subject_ids<'life0, 'life1, 'async_trait>(
&'life0 self,
subject: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<String>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn forget<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn forget<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn forget_cascading<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Cascade, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn forget_cascading<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Cascade, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn forget_subject<'life0, 'life1, 'async_trait>(
&'life0 self,
subject: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<usize, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn forget_subject<'life0, 'life1, 'async_trait>(
&'life0 self,
subject: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<usize, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn set_legal_hold<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
held: bool,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn set_legal_hold<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
held: bool,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
StoreError::UnderLegalHold, and the sweep passes over it.Source§fn legal_holds<'life0, 'life1, 'async_trait>(
&'life0 self,
after: Option<&'life1 str>,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<String>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn legal_holds<'life0, 'life1, 'async_trait>(
&'life0 self,
after: Option<&'life1 str>,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<String>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
after. Read moreSource§fn legal_hold<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<bool, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn legal_hold<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<bool, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn sweep_expired<'life0, 'async_trait>(
&'life0 self,
at: Timestamp,
) -> Pin<Box<dyn Future<Output = Result<Vec<(String, u64)>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn sweep_expired<'life0, 'async_trait>(
&'life0 self,
at: Timestamp,
) -> Pin<Box<dyn Future<Output = Result<Vec<(String, u64)>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn touch<'life0, 'life1, 'async_trait>(
&'life0 self,
ids: &'life1 [String],
at: Timestamp,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn touch<'life0, 'life1, 'async_trait>(
&'life0 self,
ids: &'life1 [String],
at: Timestamp,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn derivatives<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<MemoryItem>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn derivatives<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<MemoryItem>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn erasure_is_distributed(&self) -> Option<bool>
fn erasure_is_distributed(&self) -> Option<bool>
Source§fn erasure_index(&self) -> Option<Arc<dyn SemanticRetriever>>
fn erasure_index(&self) -> Option<Arc<dyn SemanticRetriever>>
Source§impl PushStore for PostgresStore
impl PushStore for PostgresStore
Source§fn put<'life0, 'life1, 'async_trait>(
&'life0 self,
config: &'life1 PushConfig,
next_seq: Seq,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn put<'life0, 'life1, 'async_trait>(
&'life0 self,
config: &'life1 PushConfig,
next_seq: Seq,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn get<'life0, 'life1, 'async_trait>(
&'life0 self,
task: RunId,
id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<PushConfig>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn get<'life0, 'life1, 'async_trait>(
&'life0 self,
task: RunId,
id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<PushConfig>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn list<'life0, 'async_trait>(
&'life0 self,
task: RunId,
) -> Pin<Box<dyn Future<Output = Result<Vec<PushConfig>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn list<'life0, 'async_trait>(
&'life0 self,
task: RunId,
) -> Pin<Box<dyn Future<Output = Result<Vec<PushConfig>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn due<'life0, 'async_trait>(
&'life0 self,
at: u64,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<PushRegistration>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn due<'life0, 'async_trait>(
&'life0 self,
at: u64,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<PushRegistration>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn due_in<'life0, 'async_trait>(
&'life0 self,
at: u64,
limit: usize,
namespace: PushNamespace,
) -> Pin<Box<dyn Future<Output = Result<DueBatch, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn due_in<'life0, 'async_trait>(
&'life0 self,
at: u64,
limit: usize,
namespace: PushNamespace,
) -> Pin<Box<dyn Future<Output = Result<DueBatch, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn advance<'life0, 'life1, 'async_trait>(
&'life0 self,
task: RunId,
id: &'life1 str,
next_seq: Seq,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn advance<'life0, 'life1, 'async_trait>(
&'life0 self,
task: RunId,
id: &'life1 str,
next_seq: Seq,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
next_seq.Source§fn retry<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
task: RunId,
id: &'life1 str,
next_attempt_at: u64,
error: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn retry<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
task: RunId,
id: &'life1 str,
next_attempt_at: u64,
error: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Source§fn park<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
task: RunId,
id: &'life1 str,
error: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn park<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
task: RunId,
id: &'life1 str,
error: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Source§fn parked<'life0, 'async_trait>(
&'life0 self,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<PushRegistration>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn parked<'life0, 'async_trait>(
&'life0 self,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<PushRegistration>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn unpark<'life0, 'life1, 'async_trait>(
&'life0 self,
task: RunId,
id: &'life1 str,
at: u64,
) -> Pin<Box<dyn Future<Output = Result<bool, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn unpark<'life0, 'life1, 'async_trait>(
&'life0 self,
task: RunId,
id: &'life1 str,
at: u64,
) -> Pin<Box<dyn Future<Output = Result<bool, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
at, with its attempt count reset. Read moreSource§impl QuotaStore for PostgresStore
impl QuotaStore for PostgresStore
Source§fn reserve<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
run: RunId,
quota: &'life1 TenantQuota,
hold: Option<&'life2 SpendHold>,
at: Timestamp,
) -> Pin<Box<dyn Future<Output = Result<(), QuotaError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn reserve<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
run: RunId,
quota: &'life1 TenantQuota,
hold: Option<&'life2 SpendHold>,
at: Timestamp,
) -> Pin<Box<dyn Future<Output = Result<(), QuotaError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
run, and hold its spend, or refuse. Read moreSource§fn reserve_rate<'life0, 'life1, 'async_trait>(
&'life0 self,
reservation: &'life1 RateReservation,
) -> Pin<Box<dyn Future<Output = Result<(), QuotaError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn reserve_rate<'life0, 'life1, 'async_trait>(
&'life0 self,
reservation: &'life1 RateReservation,
) -> Pin<Box<dyn Future<Output = Result<(), QuotaError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn rate_room<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
grant: &'life1 str,
ceilings: &'life2 [RateCeiling],
at: Timestamp,
) -> Pin<Box<dyn Future<Output = Result<(), QuotaError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn rate_room<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
grant: &'life1 str,
ceilings: &'life2 [RateCeiling],
at: Timestamp,
) -> Pin<Box<dyn Future<Output = Result<(), QuotaError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
grant would have room now, taking none. Read moreSource§fn set_halt<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
scope: &'life1 HaltScope,
by: &'life2 Operator,
at: Timestamp,
reason: &'life3 str,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn set_halt<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
scope: &'life1 HaltScope,
by: &'life2 Operator,
at: Timestamp,
reason: &'life3 str,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
scope from starting. Read moreSource§fn lift_halt<'life0, 'life1, 'async_trait>(
&'life0 self,
scope: &'life1 HaltScope,
) -> Pin<Box<dyn Future<Output = Result<bool, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn lift_halt<'life0, 'life1, 'async_trait>(
&'life0 self,
scope: &'life1 HaltScope,
) -> Pin<Box<dyn Future<Output = Result<bool, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
scope start again. Read moreSource§fn lift_halt_if<'life0, 'life1, 'async_trait>(
&'life0 self,
standing: &'life1 Halt,
) -> Pin<Box<dyn Future<Output = Result<bool, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn lift_halt_if<'life0, 'life1, 'async_trait>(
&'life0 self,
standing: &'life1 Halt,
) -> Pin<Box<dyn Future<Output = Result<bool, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
standing.scope only if the row there is still
standing — same reason, same operator, same instant. Read moreSource§fn halts<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<Halt>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn halts<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<Halt>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn release<'life0, 'async_trait>(
&'life0 self,
run: RunId,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn release<'life0, 'async_trait>(
&'life0 self,
run: RunId,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn carry<'life0, 'life1, 'async_trait>(
&'life0 self,
run: RunId,
period: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn carry<'life0, 'life1, 'async_trait>(
&'life0 self,
run: RunId,
period: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
period, where a resume is about to spend. Read moreSource§fn reservations<'life0, 'async_trait>(
&'life0 self,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<Held>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn reservations<'life0, 'async_trait>(
&'life0 self,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<Held>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn reserved<'life0, 'life1, 'async_trait>(
&'life0 self,
period: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Spend, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn reserved<'life0, 'life1, 'async_trait>(
&'life0 self,
period: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Spend, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
period. Read moreSource§fn settle<'life0, 'life1, 'async_trait>(
&'life0 self,
settlement: &'life1 QuotaSettlement,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn settle<'life0, 'life1, 'async_trait>(
&'life0 self,
settlement: &'life1 QuotaSettlement,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn spent<'life0, 'life1, 'async_trait>(
&'life0 self,
period: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Spend, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn spent<'life0, 'life1, 'async_trait>(
&'life0 self,
period: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Spend, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
period — spend that happened, not
spend held. Read moreSource§impl Registry for PostgresStore
impl Registry for PostgresStore
Source§fn publish<'life0, 'life1, 'async_trait>(
&'life0 self,
manifest: &'life1 Manifest,
) -> Pin<Box<dyn Future<Output = Result<Digest, RegistryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn publish<'life0, 'life1, 'async_trait>(
&'life0 self,
manifest: &'life1 Manifest,
) -> Pin<Box<dyn Future<Output = Result<Digest, RegistryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn publish_signed<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
manifest: &'life1 Manifest,
signer: &'life2 dyn Signer,
) -> Pin<Box<dyn Future<Output = Result<Digest, RegistryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn publish_signed<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
manifest: &'life1 Manifest,
signer: &'life2 dyn Signer,
) -> Pin<Box<dyn Future<Output = Result<Digest, RegistryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Source§fn resolve<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
name: &'life1 str,
version: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<Manifest, RegistryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn resolve<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
name: &'life1 str,
version: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<Manifest, RegistryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Source§fn resolve_verified<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
name: &'life1 str,
version: &'life2 str,
verifier: &'life3 dyn Verifier,
) -> Pin<Box<dyn Future<Output = Result<(Manifest, KeyId), RegistryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn resolve_verified<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
name: &'life1 str,
version: &'life2 str,
verifier: &'life3 dyn Verifier,
) -> Pin<Box<dyn Future<Output = Result<(Manifest, KeyId), RegistryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
Source§fn versions<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<String>, RegistryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn versions<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<String>, RegistryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn names<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<String>, RegistryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn names<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<String>, RegistryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn resolve_pinned<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
name: &'life1 str,
version: &'life2 str,
expected: Digest,
) -> Pin<Box<dyn Future<Output = Result<Manifest, RegistryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn resolve_pinned<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
name: &'life1 str,
version: &'life2 str,
expected: Digest,
) -> Pin<Box<dyn Future<Output = Result<Manifest, RegistryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Source§impl TaskStore for PostgresStore
impl TaskStore for PostgresStore
Source§fn open<'life0, 'life1, 'async_trait>(
&'life0 self,
task: &'life1 Task,
) -> Pin<Box<dyn Future<Output = Result<Task, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn open<'life0, 'life1, 'async_trait>(
&'life0 self,
task: &'life1 Task,
) -> Pin<Box<dyn Future<Output = Result<Task, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn task<'life0, 'async_trait>(
&'life0 self,
id: TaskId,
) -> Pin<Box<dyn Future<Output = Result<Option<Task>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn task<'life0, 'async_trait>(
&'life0 self,
id: TaskId,
) -> Pin<Box<dyn Future<Output = Result<Option<Task>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
CaseStore::case.Source§fn claim<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
id: TaskId,
actor: &'life1 str,
roles: &'life2 [String],
) -> Pin<Box<dyn Future<Output = Result<Task, ClaimError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn claim<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
id: TaskId,
actor: &'life1 str,
roles: &'life2 [String],
) -> Pin<Box<dyn Future<Output = Result<Task, ClaimError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Source§fn take_over<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
id: TaskId,
from: &'life1 str,
actor: &'life2 str,
roles: &'life3 [String],
) -> Pin<Box<dyn Future<Output = Result<Task, ClaimError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn take_over<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
id: TaskId,
from: &'life1 str,
actor: &'life2 str,
roles: &'life3 [String],
) -> Pin<Box<dyn Future<Output = Result<Task, ClaimError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
Source§fn release<'life0, 'life1, 'async_trait>(
&'life0 self,
id: TaskId,
actor: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), ClaimError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn release<'life0, 'life1, 'async_trait>(
&'life0 self,
id: TaskId,
actor: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), ClaimError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn set_state<'life0, 'async_trait>(
&'life0 self,
id: TaskId,
state: TaskState,
) -> Pin<Box<dyn Future<Output = Result<bool, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn set_state<'life0, 'async_trait>(
&'life0 self,
id: TaskId,
state: TaskState,
) -> Pin<Box<dyn Future<Output = Result<bool, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn withdraw_run<'life0, 'life1, 'async_trait>(
&'life0 self,
run: RunId,
awaited: &'life1 [TaskId],
) -> Pin<Box<dyn Future<Output = Result<usize, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn withdraw_run<'life0, 'life1, 'async_trait>(
&'life0 self,
run: RunId,
awaited: &'life1 [TaskId],
) -> Pin<Box<dyn Future<Output = Result<usize, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
awaited that belong to run and are still
pending, returning how many. Read moreSource§fn escalate<'life0, 'async_trait>(
&'life0 self,
id: TaskId,
) -> Pin<Box<dyn Future<Output = Result<Task, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn escalate<'life0, 'async_trait>(
&'life0 self,
id: TaskId,
) -> Pin<Box<dyn Future<Output = Result<Task, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn queue<'life0, 'life1, 'async_trait>(
&'life0 self,
roles: &'life1 [String],
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<Task>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn queue<'life0, 'life1, 'async_trait>(
&'life0 self,
roles: &'life1 [String],
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<Task>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn for_case<'life0, 'async_trait>(
&'life0 self,
case: CaseId,
) -> Pin<Box<dyn Future<Output = Result<Vec<Task>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn for_case<'life0, 'async_trait>(
&'life0 self,
case: CaseId,
) -> Pin<Box<dyn Future<Output = Result<Vec<Task>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn open_count<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<u64, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn open_count<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<u64, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn overdue<'life0, 'async_trait>(
&'life0 self,
now: Timestamp,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<Task>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn overdue<'life0, 'async_trait>(
&'life0 self,
now: Timestamp,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<Task>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§impl TimerStore for PostgresStore
impl TimerStore for PostgresStore
Source§fn arm<'life0, 'life1, 'async_trait>(
&'life0 self,
timer: &'life1 Timer,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn arm<'life0, 'life1, 'async_trait>(
&'life0 self,
timer: &'life1 Timer,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn claim_due<'life0, 'async_trait>(
&'life0 self,
now: Timestamp,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<Timer>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn claim_due<'life0, 'async_trait>(
&'life0 self,
now: Timestamp,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<Timer>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
now. Read moreSource§fn pending_count<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<u64, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn pending_count<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<u64, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Auto Trait Implementations§
impl !RefUnwindSafe for PostgresStore
impl !UnwindSafe for PostgresStore
impl Freeze for PostgresStore
impl Send for PostgresStore
impl Sync for PostgresStore
impl Unpin for PostgresStore
impl UnsafeUnpin for PostgresStore
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<B> FullBackend for Bwhere
B: JournalStore + CaseStore + TaskStore + EventStore + TimerStore + MemoryStore + QuotaStore + DisclosureRegister,
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> 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> ⓘ
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> ⓘ
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