use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use super::yes;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "lowercase")]
pub enum Environment {
#[default]
Dev,
Staging,
Prod,
}
impl Environment {
pub fn enforces_strictly(self) -> bool {
matches!(self, Environment::Staging | Environment::Prod)
}
pub fn as_str(self) -> &'static str {
match self {
Environment::Dev => "dev",
Environment::Staging => "staging",
Environment::Prod => "prod",
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct Features {
#[serde(default)]
pub self_evolution: bool,
#[serde(default)]
pub marketplace_skills: bool,
#[serde(default)]
pub external_side_effects: bool,
#[serde(default = "yes")]
pub parallel_execution: bool,
#[serde(default = "yes")]
pub human_approval: bool,
}
impl Default for Features {
fn default() -> Self {
Self {
self_evolution: false,
marketplace_skills: false,
external_side_effects: false,
parallel_execution: true,
human_approval: true,
}
}
}