use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use super::constraints::Constraints;
use super::default_skills::DefaultSkill;
use super::gates::Gates;
use super::goals::Goal;
use super::graph::GraphSpec;
use super::guidelines::ExecutionGuidelines;
use super::info::InfoItem;
use super::memory::MemoryPolicy;
use super::alerts::Alert;
use super::protected::Protected;
use super::providers::ProviderRouting;
use super::recovery::Recovery;
use super::skills::SkillPolicy;
use super::success::SuccessScenario;
use super::triggers::TriggerPolicy;
use super::validation::Validation;
use super::work::WorkItem;
#[derive(Debug, Clone, Default, Serialize, Deserialize, JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct Intent {
#[serde(default)]
pub background: Vec<InfoItem>,
#[serde(default)]
pub prerequisites: Vec<WorkItem>,
#[serde(default)]
pub goals: Vec<Goal>,
#[serde(default)]
pub success: Vec<SuccessScenario>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct Execution {
#[serde(default)]
pub graph: GraphSpec,
#[serde(default)]
pub providers: ProviderRouting,
#[serde(default)]
pub phases: ExecutionGuidelines,
#[serde(default)]
pub default_skills: Vec<DefaultSkill>,
#[serde(default)]
pub skills: SkillPolicy,
#[serde(default)]
pub memory: MemoryPolicy,
#[serde(default)]
pub triggers: TriggerPolicy,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct Safety {
#[serde(default)]
pub checks: Vec<Validation>,
#[serde(default)]
pub gates: Gates,
#[serde(default)]
pub limits: Constraints,
#[serde(default)]
pub recovery: Recovery,
#[serde(default)]
pub protected: Protected,
#[serde(default)]
pub alerts: Vec<Alert>,
}
impl Safety {
pub fn blocking_checks_for(&self, target: &str) -> Vec<&Validation> {
self.checks
.iter()
.filter(|v| v.target == target && v.blocking)
.collect()
}
}