pub struct InMemoryStore { /* private fields */ }Expand description
Correct non-durable crate::EventStore implementation for tests and backend equivalence.
Implementations§
Source§impl InMemoryStore
impl InMemoryStore
Sourcepub fn write_raw_worker_deployment(
&self,
name: &str,
bytes: Vec<u8>,
) -> Result<(), StoreError>
pub fn write_raw_worker_deployment( &self, name: &str, bytes: Vec<u8>, ) -> Result<(), StoreError>
Write backend bytes directly for persistence conformance testing.
This deliberately bypasses the entity codec so the shared suite can pin poisoned-row listing, replacement, and deletion behavior on every backend.
§Errors
Returns StoreError::Serialization when name is empty or whitespace.
Sourcepub fn write_raw_workloop(
&self,
loop_id: &str,
bytes: Vec<u8>,
) -> Result<(), StoreError>
pub fn write_raw_workloop( &self, loop_id: &str, bytes: Vec<u8>, ) -> Result<(), StoreError>
Write workloop backend bytes directly for persistence conformance testing (poisoned-row listing behavior), bypassing the entity codec.
§Errors
Returns StoreError::Serialization when loop_id is empty.
Trait Implementations§
Source§impl Debug for InMemoryStore
impl Debug for InMemoryStore
Source§impl Default for InMemoryStore
impl Default for InMemoryStore
Source§fn default() -> InMemoryStore
fn default() -> InMemoryStore
Returns the “default value” for a type. Read more
Source§impl NamespaceStore for InMemoryStore
impl NamespaceStore for InMemoryStore
Source§fn register_namespace<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
origin: NamespaceOrigin,
) -> Pin<Box<dyn Future<Output = Result<MintOutcome, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn register_namespace<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
origin: NamespaceOrigin,
) -> Pin<Box<dyn Future<Output = Result<MintOutcome, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Idempotent minted-on-use upsert. Read more
Source§fn put_namespace<'life0, 'async_trait>(
&'life0 self,
record: NamespaceRecord,
) -> Pin<Box<dyn Future<Output = Result<MintOutcome, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn put_namespace<'life0, 'async_trait>(
&'life0 self,
record: NamespaceRecord,
) -> Pin<Box<dyn Future<Output = Result<MintOutcome, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Explicit upsert (
POST /namespaces). Read moreSource§fn list_namespaces<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<NamespaceRecord>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn list_namespaces<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<NamespaceRecord>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn get_namespace<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<NamespaceRecord>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn get_namespace<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<NamespaceRecord>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Looks up a single namespace by
name. Read moreSource§fn set_namespace_placement<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
placement: NamespacePlacement,
) -> Pin<Box<dyn Future<Output = Result<Option<()>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn set_namespace_placement<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
placement: NamespacePlacement,
) -> Pin<Box<dyn Future<Output = Result<Option<()>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn deprecate_namespace<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn deprecate_namespace<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Transitions a namespace from
NamespaceState::Active to
NamespaceState::Deprecated (deprecate-before-delete). Read moreSource§impl PackageStore for InMemoryStore
impl PackageStore for InMemoryStore
Source§fn put_package<'life0, 'async_trait>(
&'life0 self,
record: PackageRecord,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn put_package<'life0, 'async_trait>(
&'life0 self,
record: PackageRecord,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Persists
record and atomically points the type’s route at it. Read moreSource§fn put_package_with_routes<'life0, 'life1, 'async_trait>(
&'life0 self,
record: PackageRecord,
route_workflow_types: &'life1 [String],
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn put_package_with_routes<'life0, 'life1, 'async_trait>(
&'life0 self,
record: PackageRecord,
route_workflow_types: &'life1 [String],
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Persists
record and atomically points every member workflow type at
its content hash. Read moreSource§fn list_packages<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<PackageRecord>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn list_packages<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<PackageRecord>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Lists every persisted package in ascending
deployed_at order
(ties broken by (workflow_type, content_hash) text order), so
startup reload re-applies deploys deterministically.Source§fn delete_package<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
workflow_type: &'life1 str,
content_hash: &'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 delete_package<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
workflow_type: &'life1 str,
content_hash: &'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,
Deletes the persisted archive for
(workflow_type, content_hash). Read moreSource§fn put_package_route<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
workflow_type: &'life1 str,
content_hash: &'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 put_package_route<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
workflow_type: &'life1 str,
content_hash: &'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 list_package_routes<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<PackageRouteRecord>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn list_package_routes<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<PackageRouteRecord>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Lists every persisted route pointer in
workflow_type text order.Source§impl ReadableEventStore for InMemoryStore
impl ReadableEventStore for InMemoryStore
Source§fn read_history<'life0, 'life1, 'async_trait>(
&'life0 self,
workflow_id: &'life1 WorkflowId,
) -> Pin<Box<dyn Future<Output = Result<Vec<Event>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn read_history<'life0, 'life1, 'async_trait>(
&'life0 self,
workflow_id: &'life1 WorkflowId,
) -> Pin<Box<dyn Future<Output = Result<Vec<Event>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Reads the complete event history for
workflow_id in ascending sequence order. Read moreSource§fn read_history_from<'life0, 'life1, 'async_trait>(
&'life0 self,
workflow_id: &'life1 WorkflowId,
from_seq: u64,
) -> Pin<Box<dyn Future<Output = Result<Vec<Event>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn read_history_from<'life0, 'life1, 'async_trait>(
&'life0 self,
workflow_id: &'life1 WorkflowId,
from_seq: u64,
) -> Pin<Box<dyn Future<Output = Result<Vec<Event>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Reads the event history for
workflow_id restricted to events with sequence number
greater than or equal to from_seq, in ascending sequence order. Read moreSource§fn read_run_chain<'life0, 'life1, 'async_trait>(
&'life0 self,
workflow_id: &'life1 WorkflowId,
) -> Pin<Box<dyn Future<Output = Result<Vec<RunSummary>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn read_run_chain<'life0, 'life1, 'async_trait>(
&'life0 self,
workflow_id: &'life1 WorkflowId,
) -> Pin<Box<dyn Future<Output = Result<Vec<RunSummary>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Reads the concrete run chain for
workflow_id in continuation order.Source§fn list_workflow_ids<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<WorkflowId>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn list_workflow_ids<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<WorkflowId>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Lists every workflow identifier that has at least one event in history. Read more
Source§fn list_active<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<WorkflowId>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn list_active<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<WorkflowId>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Lists workflow identifiers whose projected status is exactly
WorkflowStatus::Running.Source§fn list_paused<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<WorkflowId>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn list_paused<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<WorkflowId>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Lists workflow identifiers whose projected status is exactly
WorkflowStatus::Paused. Read moreSource§fn query<'life0, 'life1, 'async_trait>(
&'life0 self,
filter: &'life1 WorkflowFilter,
) -> Pin<Box<dyn Future<Output = Result<Vec<WorkflowSummary>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn query<'life0, 'life1, 'async_trait>(
&'life0 self,
filter: &'life1 WorkflowFilter,
) -> Pin<Box<dyn Future<Output = Result<Vec<WorkflowSummary>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Returns workflow summaries matching
filter.Source§fn schedule_timer<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
workflow_id: &'life1 WorkflowId,
timer_id: &'life2 TimerId,
fire_at: DateTime<Utc>,
armed_seq: u64,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn schedule_timer<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
workflow_id: &'life1 WorkflowId,
timer_id: &'life2 TimerId,
fire_at: DateTime<Utc>,
armed_seq: u64,
) -> 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 retire_timer<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
workflow_id: &'life1 WorkflowId,
timer_id: &'life2 TimerId,
fire_at: DateTime<Utc>,
armed_seq: u64,
) -> Pin<Box<dyn Future<Output = Result<TimerRetirement, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn retire_timer<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
workflow_id: &'life1 WorkflowId,
timer_id: &'life2 TimerId,
fire_at: DateTime<Utc>,
armed_seq: u64,
) -> Pin<Box<dyn Future<Output = Result<TimerRetirement, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Removes the durable timer row for
(workflow_id, timer_id) — but only
while the row still carries exactly the (fire_at, armed_seq)
identity of the arming being retired. Read moreSource§fn expired_timers<'life0, 'async_trait>(
&'life0 self,
as_of: DateTime<Utc>,
) -> Pin<Box<dyn Future<Output = Result<Vec<TimerEntry>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn expired_timers<'life0, 'async_trait>(
&'life0 self,
as_of: DateTime<Utc>,
) -> Pin<Box<dyn Future<Output = Result<Vec<TimerEntry>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Returns durable timers whose
fire_at is less than or equal to as_of.Source§fn set_owned_shards(&self, shards: Option<&[usize]>)
fn set_owned_shards(&self, shards: Option<&[usize]>)
Restrict every per-workflow enumeration (active workflows, timers, outbox
rows) to the named set of distribution shards this node owns, or restore
the own-all-shards default when
shards is None. Read moreSource§fn acquire_owned_shards(&self, shards: &[usize]) -> Result<(), StoreError>
fn acquire_owned_shards(&self, shards: &[usize]) -> Result<(), StoreError>
Acquire-and-serve ownership of each named distribution shard BEFORE the
boot path recovers or enumerates over them, so the node is the fenced
owner and its replicated state is union-merged locally first. Read more
Source§fn acquire_owned_shard(&self, shard: usize) -> Result<(), StoreError>
fn acquire_owned_shard(&self, shard: usize) -> Result<(), StoreError>
Acquire-and-serve ownership of a SINGLE distribution
shard — the
per-shard primitive Self::acquire_owned_shards is a loop over, exposed
so the failover path can drive a per-shard abort seam: a clean election
loss on one shard (StoreError::NotOwner) drops only that shard rather
than failing the whole adoption batch (ADR-021 clean-partial). Read moreSource§fn is_current_owner(&self, shard: usize) -> bool
fn is_current_owner(&self, shard: usize) -> bool
Whether this node currently holds LIVE serve-authority for
shard — it won
the per-shard election THIS process lifetime and has not been deposed
in-process. Read moreSource§fn extend_owned_shards(&self, shards: &[usize])
fn extend_owned_shards(&self, shards: &[usize])
Add
shards to this node’s owned-enumeration scope, UNIONING them with
the shards it already owns rather than replacing the set. Read moreSource§fn publish_shard_owner(&self, shard: usize) -> Result<(), StoreError>
fn publish_shard_owner(&self, shard: usize) -> Result<(), StoreError>
Publish THIS node as the current owner of
shard in the cluster’s
shard-owner directory, so other nodes’ request-routing edges resolve
shard to this node (SS-3). Read moreSource§impl VisibilityStore for InMemoryStore
impl VisibilityStore for InMemoryStore
Source§fn record_visibility<'life0, 'async_trait>(
&'life0 self,
record: VisibilityRecord,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn record_visibility<'life0, 'async_trait>(
&'life0 self,
record: VisibilityRecord,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Upserts a workflow visibility record. Read more
Source§fn list_workflows<'life0, 'async_trait>(
&'life0 self,
filter: ListWorkflowsFilter,
) -> Pin<Box<dyn Future<Output = Result<Vec<WorkflowSummary>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn list_workflows<'life0, 'async_trait>(
&'life0 self,
filter: ListWorkflowsFilter,
) -> Pin<Box<dyn Future<Output = Result<Vec<WorkflowSummary>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Lists workflow visibility summaries matching
filter. Read moreSource§fn count_workflows<'life0, 'async_trait>(
&'life0 self,
filter: ListWorkflowsFilter,
) -> Pin<Box<dyn Future<Output = Result<u64, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn count_workflows<'life0, 'async_trait>(
&'life0 self,
filter: ListWorkflowsFilter,
) -> Pin<Box<dyn Future<Output = Result<u64, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Counts workflow visibility summaries matching
filter. Read moreSource§impl WorkerDeploymentStore for InMemoryStore
impl WorkerDeploymentStore for InMemoryStore
Source§fn put_worker_deployment<'life0, 'async_trait>(
&'life0 self,
record: WorkerDeployment,
) -> Pin<Box<dyn Future<Output = Result<WorkerDeploymentPutResult, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn put_worker_deployment<'life0, 'async_trait>(
&'life0 self,
record: WorkerDeployment,
) -> Pin<Box<dyn Future<Output = Result<WorkerDeploymentPutResult, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Create or replace a deployment record, returning the exact persisted value.
Source§fn get_worker_deployment<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<WorkerDeployment>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn get_worker_deployment<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<WorkerDeployment>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Look up one deployment by name.
Source§fn list_worker_deployments<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<WorkerDeploymentListing, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn list_worker_deployments<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<WorkerDeploymentListing, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
List decodable deployments and report every undecodable key, with both
sets ordered by primary-key name.
Source§fn set_desired_state<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
desired: DesiredState,
) -> Pin<Box<dyn Future<Output = Result<Option<WorkerDeployment>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn set_desired_state<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
desired: DesiredState,
) -> Pin<Box<dyn Future<Output = Result<Option<WorkerDeployment>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Set desired state on an existing record, returning
None when absent.Source§fn delete_worker_deployment<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<WorkerDeploymentDeleteOutcome, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn delete_worker_deployment<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<WorkerDeploymentDeleteOutcome, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Atomically remove a row by key without requiring it to decode. Read more
Source§impl WorkloopStore for InMemoryStore
impl WorkloopStore for InMemoryStore
Source§fn put_workloop<'life0, 'async_trait>(
&'life0 self,
record: WorkloopRecord,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn put_workloop<'life0, 'async_trait>(
&'life0 self,
record: WorkloopRecord,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Create or replace a loop’s registration record.
Source§fn get_workloop<'life0, 'life1, 'async_trait>(
&'life0 self,
loop_id: &'life1 WorkflowId,
) -> Pin<Box<dyn Future<Output = Result<Option<WorkloopRecord>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn get_workloop<'life0, 'life1, 'async_trait>(
&'life0 self,
loop_id: &'life1 WorkflowId,
) -> Pin<Box<dyn Future<Output = Result<Option<WorkloopRecord>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Look up one loop by id.
Source§fn list_workloops<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<WorkloopListing, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn list_workloops<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<WorkloopListing, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
List decodable loops and report every undecodable row, both ordered by
loop id text.
Source§fn due_workloops<'life0, 'async_trait>(
&'life0 self,
as_of: DateTime<Utc>,
) -> Pin<Box<dyn Future<Output = Result<Vec<WorkloopRecord>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn due_workloops<'life0, 'async_trait>(
&'life0 self,
as_of: DateTime<Utc>,
) -> Pin<Box<dyn Future<Output = Result<Vec<WorkloopRecord>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Loops whose
next_check_at is Some and at or before as_of — the
sweeper’s work set. A sleeping loop with a future (or absent) check
instant never appears, which is what makes a thousand sleeping loops
cost the sweeper nothing. Undecodable rows are excluded here (they
surface via WorkloopStore::list_workloops, never silently in the
hot path).Source§fn remove_workloop<'life0, 'life1, 'async_trait>(
&'life0 self,
loop_id: &'life1 WorkflowId,
) -> Pin<Box<dyn Future<Output = Result<bool, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn remove_workloop<'life0, 'life1, 'async_trait>(
&'life0 self,
loop_id: &'life1 WorkflowId,
) -> Pin<Box<dyn Future<Output = Result<bool, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Remove a loop’s registration (retirement). Returns whether a row
existed. Invariant current-state records are NOT removed: the current
record survives indefinitely by declaration (R8.1).
Source§fn put_invariant_record<'life0, 'async_trait>(
&'life0 self,
record: InvariantStateRecord,
prune_before: DateTime<Utc>,
) -> Pin<Box<dyn Future<Output = Result<u64, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn put_invariant_record<'life0, 'async_trait>(
&'life0 self,
record: InvariantStateRecord,
prune_before: DateTime<Utc>,
) -> Pin<Box<dyn Future<Output = Result<u64, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Install
record as the invariant’s current record — rotating any prior
current into the generation list — and prune prior generations recorded
before prune_before, in ONE read-modify-write. Returns how many prior
generations the prune removed. The current record is never pruned; it
survives indefinitely by declaration (R8.1). Read moreSource§fn current_invariant_record<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
loop_id: &'life1 WorkflowId,
invariant: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<Option<InvariantStateRecord>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn current_invariant_record<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
loop_id: &'life1 WorkflowId,
invariant: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<Option<InvariantStateRecord>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
The invariant’s current record, if one was ever produced.
Source§fn invariant_record_generations<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
loop_id: &'life1 WorkflowId,
invariant: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<InvariantStateRecord>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn invariant_record_generations<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
loop_id: &'life1 WorkflowId,
invariant: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<InvariantStateRecord>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
The invariant’s prior generations within retention, oldest first.
Source§impl WritableEventStore for InMemoryStore
impl WritableEventStore for InMemoryStore
Source§fn append<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
_token: WriteToken,
workflow_id: &'life1 WorkflowId,
events: &'life2 [Event],
expected_seq: u64,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn append<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
_token: WriteToken,
workflow_id: &'life1 WorkflowId,
events: &'life2 [Event],
expected_seq: u64,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Atomically appends
events to workflow_id when the stored history head equals
expected_seq. Read moreSource§fn append_with_outbox<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
token: WriteToken,
workflow_id: &'life1 WorkflowId,
events: &'life2 [Event],
expected_seq: u64,
outbox_rows: &'life3 [OutboxRow],
) -> 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 append_with_outbox<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
token: WriteToken,
workflow_id: &'life1 WorkflowId,
events: &'life2 [Event],
expected_seq: u64,
outbox_rows: &'life3 [OutboxRow],
) -> 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,
Atomically appends
events and the durable-outbox outbox_rows for workflow_id in a
single transaction, under the same expected-head sequence guard as Self::append. Read moreSource§fn rearm_outbox_pending<'life0, 'life1, 'async_trait>(
&'life0 self,
rows: &'life1 [OutboxRow],
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn rearm_outbox_pending<'life0, 'life1, 'async_trait>(
&'life0 self,
rows: &'life1 [OutboxRow],
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Returns the outbox rows for
rows’ dispatch_keys to Pending, re-staging them for the
out-of-band dispatcher. Read moreSource§fn settle_outbox_row_cancelled<'life0, 'life1, 'async_trait>(
&'life0 self,
dispatch_key: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn settle_outbox_row_cancelled<'life0, 'life1, 'async_trait>(
&'life0 self,
dispatch_key: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Idempotently settles one outbox row to cancelled when this writer is backed by an outbox. Read more
Source§fn settle_workflow_outbox_rows_cancelled<'life0, 'life1, 'async_trait>(
&'life0 self,
workflow_id: &'life1 WorkflowId,
) -> Pin<Box<dyn Future<Output = Result<Vec<String>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn settle_workflow_outbox_rows_cancelled<'life0, 'life1, 'async_trait>(
&'life0 self,
workflow_id: &'life1 WorkflowId,
) -> Pin<Box<dyn Future<Output = Result<Vec<String>, StoreError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Idempotently settles EVERY live (
crate::OutboxStatus::Pending or
crate::OutboxStatus::Claimed) outbox row of workflow_id to
crate::OutboxStatus::Cancelled, returning the settled dispatch_keys (#253). Read moreAuto Trait Implementations§
impl !Freeze for InMemoryStore
impl RefUnwindSafe for InMemoryStore
impl Send for InMemoryStore
impl Sync for InMemoryStore
impl Unpin for InMemoryStore
impl UnsafeUnpin for InMemoryStore
impl UnwindSafe for InMemoryStore
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
Mutably borrows from an owned value. Read more