use super::yes;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct SkillPolicy {
#[serde(default = "default_acquisition")]
pub acquisition_order: Vec<AcquisitionSource>,
#[serde(default = "default_quarantine")]
pub quarantine_dir: String,
#[serde(default = "default_min_stars")]
pub min_marketplace_stars: u64,
#[serde(default = "yes")]
pub require_human_promotion: bool,
#[serde(default)]
pub explore: bool,
#[serde(default)]
pub explore_candidates: Vec<String>,
#[serde(default = "default_min_trials")]
pub min_trials: usize,
}
fn default_min_trials() -> usize {
3
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum AcquisitionSource {
Installed,
Marketplace,
Generate,
}
impl Default for SkillPolicy {
fn default() -> Self {
Self {
acquisition_order: default_acquisition(),
quarantine_dir: default_quarantine(),
min_marketplace_stars: default_min_stars(),
require_human_promotion: true,
explore: false,
explore_candidates: vec![],
min_trials: default_min_trials(),
}
}
}
fn default_acquisition() -> Vec<AcquisitionSource> {
vec![
AcquisitionSource::Installed,
AcquisitionSource::Marketplace,
AcquisitionSource::Generate,
]
}
fn default_quarantine() -> String {
"generated-skills".into()
}
fn default_min_stars() -> u64 {
100
}