lenso_contracts/
lifecycle.rs1use 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}