Skip to main content

lenso_contracts/
lifecycle.rs

1//! Host-owned lifecycle declarations for module manifests.
2//!
3//! Lifecycle entries are data, not startup callbacks. The host validates these
4//! declarations and schedules runtime-owned work during worker startup.
5
6use serde::{Deserialize, Serialize};
7use serde_json::Value;
8use utoipa::ToSchema;
9
10#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema, schemars::JsonSchema)]
11pub struct LifecycleSurface {
12    #[serde(default)]
13    pub startup_checks: Vec<LifecycleStartupCheckDeclaration>,
14    #[serde(default)]
15    pub activation_jobs: Vec<LifecycleActivationJobDeclaration>,
16}
17
18#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema, schemars::JsonSchema)]
19pub struct LifecycleStartupCheckDeclaration {
20    pub name: String,
21    #[serde(default)]
22    pub required: bool,
23    #[serde(flatten)]
24    pub check: LifecycleStartupCheckKind,
25}
26
27#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema, schemars::JsonSchema)]
28#[serde(tag = "kind", rename_all = "snake_case")]
29#[non_exhaustive]
30pub enum LifecycleStartupCheckKind {
31    FunctionRegistered { function_name: String },
32    CapabilityDeclared { capability: String },
33}
34
35#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema, schemars::JsonSchema)]
36pub struct LifecycleActivationJobDeclaration {
37    pub name: String,
38    pub function_name: String,
39    #[serde(default = "default_every_startup")]
40    pub run_policy: LifecycleActivationRunPolicy,
41    #[serde(default)]
42    pub input: Value,
43    #[serde(default)]
44    pub required: bool,
45}
46
47#[derive(
48    Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, ToSchema, schemars::JsonSchema,
49)]
50#[serde(rename_all = "snake_case")]
51#[non_exhaustive]
52pub enum LifecycleActivationRunPolicy {
53    EveryStartup,
54}
55
56fn default_every_startup() -> LifecycleActivationRunPolicy {
57    LifecycleActivationRunPolicy::EveryStartup
58}