use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SmpServiceTraceBranchStatus {
    pub branch_name: String,
    pub status: String,
    #[serde(default)]
    pub grounded_inputs: Vec<String>,
    #[serde(default)]
    pub blocking_inputs: Vec<String>,
    #[serde(default)]
    pub candidate_consumers: Vec<String>,
    #[serde(default)]
    pub notes: Vec<String>,
}

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SmpPeriodicTriLaneSaveShapeFamilyCandidateSummaryEntry {
    pub rank: usize,
    pub shape_family_signature: String,
    pub rows_offset_hex: String,
    pub row_count: usize,
    pub row_stride_hex: String,
    #[serde(default)]
    pub best_probable_density_lane_relative_offset_hex: Option<String>,
}

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SmpServiceConsumerHypothesis {
    pub label: String,
    pub status: String,
    #[serde(default)]
    pub candidate_consumers: Vec<String>,
    #[serde(default)]
    pub evidence: Vec<String>,
    #[serde(default)]
    pub blockers: Vec<String>,
}
