use serde::{Deserialize, Serialize};
use crate::residual::{ResidualClass, ResidualEvent};
#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
pub struct SearchContext {
pub task: String,
pub dominant_residuals: Vec<ResidualClass>,
pub tried_strategies: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SearchStrategy {
pub strategy_id: String,
pub description: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub route_preference: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct DomainMeasurement {
pub energy: f64,
pub hard_pass: bool,
pub residuals: Vec<ResidualEvent>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct BranchMeasurement {
pub branch_id: String,
pub candidate_id: String,
pub energy: f64,
pub hard_pass: bool,
pub residuals: Vec<ResidualEvent>,
pub sensor_profile: String,
pub cost: f64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum BranchSelection {
Selected { branch_id: String },
NoneEligible,
}