use serde::{Deserialize, Serialize};
use serde_json::Value;
use utoipa::ToSchema;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema, schemars::JsonSchema)]
pub struct LifecycleSurface {
#[serde(default)]
pub startup_checks: Vec<LifecycleStartupCheckDeclaration>,
#[serde(default)]
pub activation_jobs: Vec<LifecycleActivationJobDeclaration>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema, schemars::JsonSchema)]
pub struct LifecycleStartupCheckDeclaration {
pub name: String,
#[serde(default)]
pub required: bool,
#[serde(flatten)]
pub check: LifecycleStartupCheckKind,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema, schemars::JsonSchema)]
#[serde(tag = "kind", rename_all = "snake_case")]
#[non_exhaustive]
pub enum LifecycleStartupCheckKind {
FunctionRegistered { function_name: String },
CapabilityDeclared { capability: String },
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema, schemars::JsonSchema)]
pub struct LifecycleActivationJobDeclaration {
pub name: String,
pub function_name: String,
#[serde(default = "default_every_startup")]
pub run_policy: LifecycleActivationRunPolicy,
#[serde(default)]
pub input: Value,
#[serde(default)]
pub required: bool,
}
#[derive(
Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, ToSchema, schemars::JsonSchema,
)]
#[serde(rename_all = "snake_case")]
#[non_exhaustive]
pub enum LifecycleActivationRunPolicy {
EveryStartup,
}
fn default_every_startup() -> LifecycleActivationRunPolicy {
LifecycleActivationRunPolicy::EveryStartup
}