use serde::{Deserialize, Serialize};
use crate::models::AssociatedNetElement;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PathMetadata {
pub distance_scale: f64,
pub heading_scale: f64,
pub cutoff_distance: f64,
pub heading_cutoff: f64,
pub probability_threshold: f64,
pub resampling_distance: Option<f64>,
pub fallback_mode: bool,
pub candidate_paths_evaluated: usize,
pub bidirectional_path: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub diagnostic_info: Option<PathDiagnosticInfo>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PathDiagnosticInfo {
pub segments: Vec<SegmentDiagnostic>,
}
impl PathDiagnosticInfo {
pub fn from_segments(segments: &[AssociatedNetElement]) -> Self {
let segments = segments
.iter()
.map(|segment| SegmentDiagnostic {
netelement_id: segment.netelement_id.clone(),
probability: segment.probability,
start_intrinsic: segment.start_intrinsic,
end_intrinsic: segment.end_intrinsic,
gnss_start_index: segment.gnss_start_index,
gnss_end_index: segment.gnss_end_index,
})
.collect();
Self { segments }
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SegmentDiagnostic {
pub netelement_id: String,
pub probability: f64,
pub start_intrinsic: f64,
pub end_intrinsic: f64,
pub gnss_start_index: usize,
pub gnss_end_index: usize,
}
#[cfg(test)]
mod tests;