use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FitnessFunction {
pub id: String,
pub name: String,
pub description: String,
pub function_type: FitnessFunctionType,
pub config: serde_json::Value,
pub scope: FitnessScope,
pub enabled: bool,
#[serde(default)]
pub created_at: i64,
#[serde(default)]
pub updated_at: i64,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
pub enum FitnessScope {
Global,
Workspace {
workspace_id: String,
},
Service {
service_name: String,
},
Endpoint {
pattern: String,
},
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(tag = "type", rename_all = "snake_case")]
pub enum FitnessFunctionType {
ResponseSize {
max_increase_percent: f64,
},
RequiredField {
path_pattern: String,
allow_new_required: bool,
},
FieldCount {
max_fields: u32,
},
SchemaComplexity {
max_depth: u32,
},
Custom {
evaluator: String,
},
}
pub use mockforge_foundation::contract_drift_types::FitnessTestResult;