pub trait ConfigStore: Send + Sync {
// Required methods
fn list_repos<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<RegisteredWorkspace>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn upsert_repo<'life0, 'life1, 'async_trait>(
&'life0 self,
repo: &'life1 RegisteredWorkspace,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn delete_repo<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn list_automations<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<StoredAutomation>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn upsert_automation<'life0, 'life1, 'async_trait>(
&'life0 self,
automation: &'life1 StoredAutomation,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn delete_automation<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn claim_automation_fire<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
id: &'life1 str,
fire_at: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait;
fn record_run<'life0, 'life1, 'async_trait>(
&'life0 self,
run: &'life1 AutomationRun,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn list_runs<'life0, 'life1, 'async_trait>(
&'life0 self,
automation_id: &'life1 str,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<AutomationRun>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
}Expand description
Durable, mutable store for the managed-repo registry.
Required Methods§
Sourcefn list_repos<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<RegisteredWorkspace>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn list_repos<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<RegisteredWorkspace>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
All registered repos, ordered by name.
Sourcefn upsert_repo<'life0, 'life1, 'async_trait>(
&'life0 self,
repo: &'life1 RegisteredWorkspace,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn upsert_repo<'life0, 'life1, 'async_trait>(
&'life0 self,
repo: &'life1 RegisteredWorkspace,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Insert or update a repo (keyed by name).
Sourcefn delete_repo<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn delete_repo<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Remove a repo by name. Returns whether a row was deleted.
Sourcefn list_automations<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<StoredAutomation>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn list_automations<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<StoredAutomation>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
All automations, ordered by id (#220).
Sourcefn upsert_automation<'life0, 'life1, 'async_trait>(
&'life0 self,
automation: &'life1 StoredAutomation,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn upsert_automation<'life0, 'life1, 'async_trait>(
&'life0 self,
automation: &'life1 StoredAutomation,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Insert or update an automation (keyed by id).
Does not write last_fired_at: that column is owned by
Self::claim_automation_fire, and letting an ordinary edit move it
would hand an operator a way to replay or skip a tick.
Sourcefn delete_automation<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn delete_automation<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Remove an automation and its run history. Returns whether it existed.
Sourcefn claim_automation_fire<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
id: &'life1 str,
fire_at: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn claim_automation_fire<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
id: &'life1 str,
fire_at: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Claim fire_at for id, returning whether this caller won it.
The exactly-once primitive behind scheduled spawns: a conditional
UPDATE … WHERE last_fired_at < fire_at that the database serializes,
so of N replicas noticing the same due tick, exactly one is told to act.
This is the guarantee, not the lifecycle lease. A lease makes two replicas unlikely to act on one tick; it cannot rule it out, because ownership can change hands between the moment a replica checks and the moment it spawns. The compare-and-set closes that window, and keeps holding when a lease is handed over mid-tick.
Sourcefn record_run<'life0, 'life1, 'async_trait>(
&'life0 self,
run: &'life1 AutomationRun,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn record_run<'life0, 'life1, 'async_trait>(
&'life0 self,
run: &'life1 AutomationRun,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Append a run to an automation’s history, trimming to
RUN_HISTORY_LIMIT.
Sourcefn list_runs<'life0, 'life1, 'async_trait>(
&'life0 self,
automation_id: &'life1 str,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<AutomationRun>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn list_runs<'life0, 'life1, 'async_trait>(
&'life0 self,
automation_id: &'life1 str,
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<AutomationRun>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
An automation’s runs, newest first, at most limit.
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".