pub struct MemoryHistory { /* private fields */ }Available on crate feature
serve only.Implementations§
Trait Implementations§
Source§impl RunHistory for MemoryHistory
impl RunHistory for MemoryHistory
Source§fn claim_idempotency<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
key: &'life1 str,
fingerprint: &'life2 str,
run_id: &'life3 str,
window: Duration,
) -> Pin<Box<dyn Future<Output = Result<Claim, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn claim_idempotency<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
key: &'life1 str,
fingerprint: &'life2 str,
run_id: &'life3 str,
window: Duration,
) -> Pin<Box<dyn Future<Output = Result<Claim, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
Atomically claim
key for run_id (or report a replay/conflict). A prior
claim older than window is treated as expired and re-claimable.Source§fn upsert<'life0, 'life1, 'async_trait>(
&'life0 self,
rec: &'life1 RunRecord,
) -> Pin<Box<dyn Future<Output = Result<(), HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn upsert<'life0, 'life1, 'async_trait>(
&'life0 self,
rec: &'life1 RunRecord,
) -> Pin<Box<dyn Future<Output = Result<(), HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Insert or replace a run record.
fn get<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<RunRecord>, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn list<'life0, 'life1, 'async_trait>(
&'life0 self,
filter: &'life1 ListFilter,
) -> Pin<Box<dyn Future<Output = Result<ListPage, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn delete<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<DeleteOutcome, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn delete<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<DeleteOutcome, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Delete a terminal run. Non-terminal →
StillRunning (caller maps to 409).Source§fn purge_expired<'life0, 'async_trait>(
&'life0 self,
retain_for: Duration,
) -> Pin<Box<dyn Future<Output = Result<usize, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn purge_expired<'life0, 'async_trait>(
&'life0 self,
retain_for: Duration,
) -> Pin<Box<dyn Future<Output = Result<usize, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Drop terminal records finished longer than
retain_for ago. Returns the
number removed.Source§fn record_audit<'life0, 'life1, 'async_trait>(
&'life0 self,
entry: &'life1 AuditEntry,
) -> Pin<Box<dyn Future<Output = Result<(), HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn record_audit<'life0, 'life1, 'async_trait>(
&'life0 self,
entry: &'life1 AuditEntry,
) -> Pin<Box<dyn Future<Output = Result<(), HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Append one audit record. Best-effort but visible: the caller logs a
warning on failure (audit writes must never silently vanish, and must
never fail the underlying action). Default: no-op — overridden by the
memory + SQL backends.
Source§fn list_audit<'life0, 'life1, 'async_trait>(
&'life0 self,
filter: &'life1 AuditFilter,
) -> Pin<Box<dyn Future<Output = Result<Vec<AuditEntry>, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn list_audit<'life0, 'life1, 'async_trait>(
&'life0 self,
filter: &'life1 AuditFilter,
) -> Pin<Box<dyn Future<Output = Result<Vec<AuditEntry>, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Most-recent audit records matching
filter, newest first. Default: empty.Source§fn recover_orphans<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<usize, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn recover_orphans<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<usize, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Mark non-terminal records whose owning instance’s lease has expired as
failed (instance-fenced orphan recovery — never touches a live peer’s
heartbeated runs, #146 H7). Returns the number recovered. The memory
backend has nothing to recover (returns 0).
Source§fn cancel_pending<'life0, 'life1, 'async_trait>(
&'life0 self,
run_id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<bool, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn cancel_pending<'life0, 'life1, 'async_trait>(
&'life0 self,
run_id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<bool, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Cancel a still-
Pending (unclaimed) run directly. Returns true if it was
pending and is now Cancelled; false if it had already been claimed (the
caller should fall back to request_cancel).
Default: false.Source§fn catalog_record<'life0, 'life1, 'async_trait>(
&'life0 self,
update: &'life1 CatalogUpdate,
) -> Pin<Box<dyn Future<Output = Result<(), HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn catalog_record<'life0, 'life1, 'async_trait>(
&'life0 self,
update: &'life1 CatalogUpdate,
) -> Pin<Box<dyn Future<Output = Result<(), HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Fold one run’s catalog update (two dataset observations + the lineage
edge between them) into the store. Idempotent-ish last-write-wins per
dataset/edge, so concurrent cluster instances converge. Default: no-op.
Source§fn catalog_list_datasets<'life0, 'life1, 'async_trait>(
&'life0 self,
filter: &'life1 CatalogListFilter,
) -> Pin<Box<dyn Future<Output = Result<CatalogDatasetPage, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn catalog_list_datasets<'life0, 'life1, 'async_trait>(
&'life0 self,
filter: &'life1 CatalogListFilter,
) -> Pin<Box<dyn Future<Output = Result<CatalogDatasetPage, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
List catalogued datasets, filtered + keyset-paginated
(
last_seen DESC, id DESC). Default: empty.Source§fn catalog_get_dataset<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<CatalogDatasetDetail>, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn catalog_get_dataset<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<CatalogDatasetDetail>, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
One dataset’s full detail: current schema, schema timeline, recent
volume points, and upstream/downstream edges. Default:
None.Source§fn catalog_lineage<'life0, 'life1, 'async_trait>(
&'life0 self,
root: Option<&'life1 str>,
depth: u32,
) -> Pin<Box<dyn Future<Output = Result<Vec<CatalogLineageEdge>, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn catalog_lineage<'life0, 'life1, 'async_trait>(
&'life0 self,
root: Option<&'life1 str>,
depth: u32,
) -> Pin<Box<dyn Future<Output = Result<Vec<CatalogLineageEdge>, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
The lineage edge graph — everything, or a depth-bounded slice around
root (a dataset id). Default: empty.Source§fn catalog_record_config_snapshot<'life0, 'life1, 'async_trait>(
&'life0 self,
snapshot: &'life1 ConfigSnapshot,
) -> Pin<Box<dyn Future<Output = Result<(), HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn catalog_record_config_snapshot<'life0, 'life1, 'async_trait>(
&'life0 self,
snapshot: &'life1 ConfigSnapshot,
) -> Pin<Box<dyn Future<Output = Result<(), HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Record the latest resolved+expanded config snapshot for a pipeline
(#374). Latest-wins per pipeline (upsert). Best-effort at the call site —
recording never fails a run. Default: no-op.
Source§fn catalog_last_config_snapshot<'life0, 'life1, 'async_trait>(
&'life0 self,
pipeline: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<ConfigSnapshot>, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn catalog_last_config_snapshot<'life0, 'life1, 'async_trait>(
&'life0 self,
pipeline: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<ConfigSnapshot>, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
The most recently recorded config snapshot for
pipeline, or None if
nothing has been recorded yet (a first faucet plan --diff). Default:
None.Source§fn template_register<'life0, 'life1, 'async_trait>(
&'life0 self,
draft: &'life1 TemplateDraft,
) -> Pin<Box<dyn Future<Output = Result<TemplateRecord, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn template_register<'life0, 'life1, 'async_trait>(
&'life0 self,
draft: &'life1 TemplateDraft,
) -> Pin<Box<dyn Future<Output = Result<TemplateRecord, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Append a new version of a template, returning the stored record with the
assigned
version. Versioning is atomic per id: two concurrent registers
produce two distinct versions, never a lost write. Default: unsupported.Source§fn template_get<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
version: Option<u32>,
) -> Pin<Box<dyn Future<Output = Result<Option<TemplateRecord>, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn template_get<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
version: Option<u32>,
) -> Pin<Box<dyn Future<Output = Result<Option<TemplateRecord>, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
One template version — the latest when
version is None. Default: none.Source§fn template_list<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<TemplateSummary>, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn template_list<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<TemplateSummary>, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
The latest version of every registered template, newest-registered first.
Default: empty.
Source§fn template_versions<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<u32>, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn template_versions<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<u32>, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Every stored version number for one id, newest first. Default: empty.
Source§fn template_delete<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
version: Option<u32>,
) -> Pin<Box<dyn Future<Output = Result<usize, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn template_delete<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
version: Option<u32>,
) -> Pin<Box<dyn Future<Output = Result<usize, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Delete one version (
Some) or every version (None) of a template.
Returns how many rows were removed. Implementations must also drop any
named-channel pointer aimed at a deleted version, so a channel never
dangles. Default: 0.Source§fn template_set_tag<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
id: &'life1 str,
tag: &'life2 str,
version: u32,
) -> Pin<Box<dyn Future<Output = Result<(), HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn template_set_tag<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
id: &'life1 str,
tag: &'life2 str,
version: u32,
) -> Pin<Box<dyn Future<Output = Result<(), HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Point a named channel (
dev, prod, …) at an existing version, moving it
if it was already set. latest is derived from the version list and never
stored, so callers reject it before reaching here. Default: unsupported.Every stored channel pointer for a template (
{tag: version}), excluding
the derived latest. Default: empty.Source§fn template_delete_tag<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
id: &'life1 str,
tag: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<bool, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn template_delete_tag<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
id: &'life1 str,
tag: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<bool, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Remove one channel pointer. Returns whether it existed. Default:
false.Source§fn template_launch<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
id: &'life1 str,
version: u32,
launched_by: Option<&'life2 str>,
) -> Pin<Box<dyn Future<Output = Result<Option<u32>, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn template_launch<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
id: &'life1 str,
version: u32,
launched_by: Option<&'life2 str>,
) -> Pin<Box<dyn Future<Output = Result<Option<u32>, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Append a launch to the template’s log, making
version the new stable.
Returns the assigned sequence number, or None when version is already
stable (a re-launch is a no-op, which keeps previous meaningful rather
than letting it degrade into a duplicate of stable). Default:
unsupported.Source§fn template_launches<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<LaunchRecord>, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn template_launches<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<LaunchRecord>, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
The template’s launch log, newest first. Drives
stable / previous,
the derived template status, and the launch audit trail. Default: empty.Source§fn template_set_deprecation<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
id: &'life1 str,
record: Option<&'life2 DeprecationRecord>,
) -> Pin<Box<dyn Future<Output = Result<(), HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn template_set_deprecation<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
id: &'life1 str,
record: Option<&'life2 DeprecationRecord>,
) -> Pin<Box<dyn Future<Output = Result<(), HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Set (
Some) or clear (None) the template’s deprecation marker — the only
stored part of the lifecycle status. Default: unsupported.Source§fn template_deprecation<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<DeprecationRecord>, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn template_deprecation<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<DeprecationRecord>, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
The template’s deprecation marker, if it is deprecated. Default:
None.Source§fn degraded(&self) -> bool
fn degraded(&self) -> bool
True when the backend is in fallback mode (drives
/readyz). Always false
for memory.Source§fn release_idempotency<'life0, 'life1, 'async_trait>(
&'life0 self,
run_id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn release_idempotency<'life0, 'life1, 'async_trait>(
&'life0 self,
run_id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Release the idempotency claim(s) pointing at
run_id. Called on the
submit path when the run-record write that should immediately follow a
Fresh claim fails — without it, a fallible (SQL) backend would orphan
the claim, so every replay of the key 404s until the claim self-expires
within the retention window (F21). Scoped by run_id, so a newer run
that re-claimed the same key keeps its claim. Best-effort. Default:
no-op — the in-memory backend’s upsert is infallible, so a Fresh
claim is always paired with a record.Source§fn renew_leases<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<usize, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn renew_leases<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<usize, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Heartbeat: extend the lease of this instance’s own non-terminal runs so
a peer’s
recover_orphans won’t reclaim them.
Returns the number of leases renewed. The memory backend (single-process,
unshared) is a no-op returning 0.Source§fn claim_pending<'life0, 'async_trait>(
&'life0 self,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<RunRecord>, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn claim_pending<'life0, 'async_trait>(
&'life0 self,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<RunRecord>, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Atomically claim up to
limit oldest Pending runs for this instance,
moving them Pending → Running with a fresh lease, and return the
claimed records (with config_body) for the caller to execute. Exclusive:
a run claimed by one caller is never returned to another. Default: none
(memory is single-process and never writes Pending).Source§fn reclaim_orphans<'life0, 'async_trait>(
&'life0 self,
max_attempts: u32,
) -> Pin<Box<dyn Future<Output = Result<ReclaimReport, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn reclaim_orphans<'life0, 'async_trait>(
&'life0 self,
max_attempts: u32,
) -> Pin<Box<dyn Future<Output = Result<ReclaimReport, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Cluster failover: expired-lease
Running runs whose attempt < max_attempts
go back to Pending (owner/lease cleared, attempt++); the rest are
Failed (poison). Returns the counts. Default: nothing to reclaim.Source§fn finalize_owned<'life0, 'life1, 'async_trait>(
&'life0 self,
rec: &'life1 RunRecord,
) -> Pin<Box<dyn Future<Output = Result<bool, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn finalize_owned<'life0, 'life1, 'async_trait>(
&'life0 self,
rec: &'life1 RunRecord,
) -> Pin<Box<dyn Future<Output = Result<bool, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Owner-fenced terminal write: persist
rec only if this instance still owns
the run. Returns true if the write landed, false if another instance
reclaimed it (the caller should discard its result). Default: delegate to
upsert (memory/single-process always owns its runs).Source§fn finalize_sharded_parent<'life0, 'life1, 'async_trait>(
&'life0 self,
run_id: &'life1 str,
status: RunStatus,
finished_at: DateTime<Utc>,
error: Option<String>,
) -> Pin<Box<dyn Future<Output = Result<bool, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn finalize_sharded_parent<'life0, 'life1, 'async_trait>(
&'life0 self,
run_id: &'life1 str,
status: RunStatus,
finished_at: DateTime<Utc>,
error: Option<String>,
) -> Pin<Box<dyn Future<Output = Result<bool, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Status-fenced finalize of a
Sharded parent run: set the terminal
status / finished_at / error only while the run is still Sharded,
and — crucially — WITHOUT re-stamping owner / lease_expires_at. A
terminal record must not re-arm a lease, and two shards finishing on two
instances at once must not last-writer-wins overwrite each other via the
owner-stamping upsert (F45). Returns true if this call performed the
transition (the first finalizer wins; a concurrent second call is a
no-op). Default: read-guard-write via upsert — correct for the
single-process in-memory backend, which has no cross-instance race and no
lease columns. The SQL backends override this with one conditional UPDATE.Source§fn request_cancel<'life0, 'life1, 'async_trait>(
&'life0 self,
run_id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn request_cancel<'life0, 'life1, 'async_trait>(
&'life0 self,
run_id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Flag a
Running run for cross-instance cancellation; its owning instance
fires the local cancel on its next claim-loop tick. Default: no-op.Source§fn pending_cancellations<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<String>, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn pending_cancellations<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<String>, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
This instance’s own
Running runs that have a pending cancel request.
Default: none.Source§fn heartbeat_instance<'life0, 'life1, 'async_trait>(
&'life0 self,
beat: &'life1 InstanceHeartbeat,
) -> Pin<Box<dyn Future<Output = Result<(), HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn heartbeat_instance<'life0, 'life1, 'async_trait>(
&'life0 self,
beat: &'life1 InstanceHeartbeat,
) -> Pin<Box<dyn Future<Output = Result<(), HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Membership heartbeat: upsert this instance’s liveness row. Default: no-op.
Source§fn live_instances<'life0, 'async_trait>(
&'life0 self,
ttl: Duration,
) -> Pin<Box<dyn Future<Output = Result<Vec<InstanceRecord>, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn live_instances<'life0, 'async_trait>(
&'life0 self,
ttl: Duration,
) -> Pin<Box<dyn Future<Output = Result<Vec<InstanceRecord>, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Live cluster members (last heartbeat within
ttl). Default: none.Source§fn insert_shards<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
run_id: &'life1 str,
shards: &'life2 [ShardInsert],
) -> Pin<Box<dyn Future<Output = Result<usize, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn insert_shards<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
run_id: &'life1 str,
shards: &'life2 [ShardInsert],
) -> Pin<Box<dyn Future<Output = Result<usize, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Idempotently insert the shard set for
run_id (INSERT … ON CONFLICT (run_id, shard_id) DO NOTHING), so concurrent coordinators converge on
the same set without a leader. Returns the number of rows newly inserted.
Default: no-op.Source§fn claim_shards<'life0, 'async_trait>(
&'life0 self,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<ClaimedShard>, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn claim_shards<'life0, 'async_trait>(
&'life0 self,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<ClaimedShard>, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Atomically claim up to
limit pending shards for this instance
(pending → running with a fresh lease), largest-estimated-size first
for skew-aware balancing, returning each with its parent run record.
Exclusive, like claim_pending. Default: none.Source§fn renew_shard_leases<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<usize, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn renew_shard_leases<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<usize, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Heartbeat: extend the lease of this instance’s own
running shards so a
peer’s reclaim_shards won’t reassign them.
Returns the number renewed. Default: no-op.Source§fn reclaim_shards<'life0, 'async_trait>(
&'life0 self,
max_attempts: u32,
) -> Pin<Box<dyn Future<Output = Result<ReclaimReport, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn reclaim_shards<'life0, 'async_trait>(
&'life0 self,
max_attempts: u32,
) -> Pin<Box<dyn Future<Output = Result<ReclaimReport, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Rebalance: expired-lease
running shards whose attempt < max_attempts
go back to pending (owner cleared, attempt++) for another worker to
claim; the rest are failed (poison). Returns the counts. Default: none.Source§fn finalize_shard<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
run_id: &'life1 str,
shard_id: &'life2 str,
success: bool,
) -> Pin<Box<dyn Future<Output = Result<bool, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn finalize_shard<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
run_id: &'life1 str,
shard_id: &'life2 str,
success: bool,
) -> Pin<Box<dyn Future<Output = Result<bool, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Owner-fenced terminal write for one shard (
running → completed/failed),
only if this instance still owns it. Returns true if the write landed.
Default: false.Source§fn shard_progress<'life0, 'life1, 'async_trait>(
&'life0 self,
run_id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<ShardProgress, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn shard_progress<'life0, 'life1, 'async_trait>(
&'life0 self,
run_id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<ShardProgress, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Aggregate shard status counts for a run (drives parent-run finalization).
Default: empty.
Source§fn pending_shard_cancellations<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<String>, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn pending_shard_cancellations<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<String>, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Distinct run_ids for which THIS instance owns a
running shard whose
parent run has a pending cancellation request (F10). The claim loop fires
each returned run’s local shard tokens via
Registry::cancel_run_shards.
Default: none (single-process / memory owns no cross-instance shards).Source§fn finalize_completed_sharded_parents<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<usize, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn finalize_completed_sharded_parents<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<usize, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Sweep
sharded parent runs whose shards are ALL terminal and finalize
each to Completed (no failures) or Failed, stamping finished_at
(F11). Recovers a parent that no shard task finalized inline (e.g. the
coordinator crashed after the last shard completed elsewhere). Returns the
number finalized. Status-fenced, so a concurrent inline finalize is a
benign no-op and the run-finished metric is never double-counted. Default:
nothing to finalize.Source§fn template_state<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<TemplateState, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn template_state<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<TemplateState, HistoryError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
The template’s full release state: versions, launch-derived
stable /
previous / newest, channel pointers, and the derived status. Read moreAuto Trait Implementations§
impl !Freeze for MemoryHistory
impl !RefUnwindSafe for MemoryHistory
impl Send for MemoryHistory
impl Sync for MemoryHistory
impl Unpin for MemoryHistory
impl UnsafeUnpin for MemoryHistory
impl UnwindSafe for MemoryHistory
Blanket Implementations§
Source§impl<T> AsAny for T
impl<T> AsAny for T
Source§fn any_ref(&self) -> &(dyn Any + Send + Sync + 'static)
fn any_ref(&self) -> &(dyn Any + Send + Sync + 'static)
Obtains a
dyn Any reference to the object: Read moreSource§fn as_any(self: Arc<T>) -> Arc<dyn Any + Send + Sync> ⓘ
fn as_any(self: Arc<T>) -> Arc<dyn Any + Send + Sync> ⓘ
Obtains an
Arc<dyn Any> reference to the object: Read moreSource§fn into_any(self: Box<T>) -> Box<dyn Any + Send + Sync>
fn into_any(self: Box<T>) -> Box<dyn Any + Send + Sync>
Converts the object to
Box<dyn Any>: Read moreSource§fn type_name(&self) -> &'static str
fn type_name(&self) -> &'static str
Convenient wrapper for
std::any::type_name, since Any does not provide it and
Any::type_id is useless as a debugging aid (its Debug is just a mess of hex digits).Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> Downcast for T
impl<T> Downcast for T
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
Causes
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
Causes
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
Causes
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
Causes
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
Causes
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
Causes
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
Causes
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
Causes
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
Source§fn with_current_context(self) -> WithContext<Self> ⓘ
fn with_current_context(self) -> WithContext<Self> ⓘ
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> ⓘ
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 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> ⓘ
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 moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
Wrap the input message
T in a tonic::RequestSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
Wrap the input message
T in a tonic::RequestCreates a shared type from an unshared type.
Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Pipes by value. This is generally the method you want to use. Read more
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
Borrows
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
Mutably borrows
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
Borrows
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
Mutably borrows
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
Borrows
self, then passes self.deref() into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<T> ServiceExt for T
impl<T> ServiceExt for T
Source§fn decompression(self) -> Decompression<Self>where
Self: Sized,
fn decompression(self) -> Decompression<Self>where
Self: Sized,
Available on crate features
decompression-br or decompression-deflate or decompression-gzip or decompression-zstd only.Decompress response bodies. Read more
Source§fn trace_for_http(self) -> Trace<Self, SharedClassifier<ServerErrorsAsFailures>>where
Self: Sized,
fn trace_for_http(self) -> Trace<Self, SharedClassifier<ServerErrorsAsFailures>>where
Self: Sized,
Available on crate feature
trace only.High level tracing that classifies responses using HTTP status codes. Read more
Source§fn trace_for_grpc(self) -> Trace<Self, SharedClassifier<GrpcErrorsAsFailures>>where
Self: Sized,
fn trace_for_grpc(self) -> Trace<Self, SharedClassifier<GrpcErrorsAsFailures>>where
Self: Sized,
Available on crate feature
trace only.High level tracing that classifies responses using gRPC headers. Read more
Source§fn follow_redirects(self) -> FollowRedirect<Self>where
Self: Sized,
fn follow_redirects(self) -> FollowRedirect<Self>where
Self: Sized,
Available on crate feature
follow-redirect only.Source§fn set_request_id<M>(
self,
header_name: HeaderName,
make_request_id: M,
) -> SetRequestId<Self, M>where
Self: Sized,
M: MakeRequestId,
fn set_request_id<M>(
self,
header_name: HeaderName,
make_request_id: M,
) -> SetRequestId<Self, M>where
Self: Sized,
M: MakeRequestId,
Available on crate feature
request-id only.Add request id header and extension. Read more
Source§fn set_x_request_id<M>(self, make_request_id: M) -> SetRequestId<Self, M>where
Self: Sized,
M: MakeRequestId,
fn set_x_request_id<M>(self, make_request_id: M) -> SetRequestId<Self, M>where
Self: Sized,
M: MakeRequestId,
Available on crate feature
request-id only.Add request id header and extension, using
x-request-id as the header name. Read moreSource§fn propagate_request_id(
self,
header_name: HeaderName,
) -> PropagateRequestId<Self>where
Self: Sized,
fn propagate_request_id(
self,
header_name: HeaderName,
) -> PropagateRequestId<Self>where
Self: Sized,
Available on crate feature
request-id only.Propgate request ids from requests to responses. Read more
Source§fn propagate_x_request_id(self) -> PropagateRequestId<Self>where
Self: Sized,
fn propagate_x_request_id(self) -> PropagateRequestId<Self>where
Self: Sized,
Available on crate feature
request-id only.Propgate request ids from requests to responses, using
x-request-id as the header name. Read moreSource§fn request_body_limit(self, limit: usize) -> RequestBodyLimit<Self>where
Self: Sized,
fn request_body_limit(self, limit: usize) -> RequestBodyLimit<Self>where
Self: Sized,
Available on crate feature
limit only.Intercept requests with over-sized payloads and convert them into
413 Payload Too Large responses. Read moreSource§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Immutable access to the
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
Mutable access to the
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
Immutable access to the
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
Mutable access to the
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Immutable access to the
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Mutable access to the
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
Calls
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
Calls
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
Calls
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
Calls
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
Calls
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
Calls
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
Calls
.tap_deref() only in debug builds, and is erased in release
builds.