use crate::pod_coordination::types::*;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct ClockDrift {
pub drift_ns: i64,
pub rate_ppm: f64,
}
#[derive(Debug, Clone, Default)]
pub struct DriftCorrector {
pub current_drift: ClockDrift,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub enum CorrectionMethod {
#[default]
Linear,
Exponential,
Adaptive,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub enum DriftCompensationAlgorithm {
#[default]
Linear,
Quadratic,
Adaptive,
}
#[derive(Debug, Clone, Default)]
pub struct DriftCompensationConfig {
pub algorithm: DriftCompensationAlgorithm,
}
#[derive(Debug, Clone)]
pub struct DriftCompensationError;
impl std::fmt::Display for DriftCompensationError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "Drift compensation error")
}
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub enum DriftCompensationStatus {
Active,
#[default]
Inactive,
Error,
}
#[derive(Debug, Clone, Default)]
pub struct DriftCompensator {
pub status: DriftCompensationStatus,
}
#[derive(Debug, Clone, Default)]
pub struct DriftMeasurement {
pub drift_ns: i64,
}
#[derive(Debug, Clone, Default)]
pub struct DriftMeasurementConfig {
pub sample_interval_ms: u64,
}
#[derive(Debug, Clone, Default)]
pub struct DriftModel {
pub coefficients: Vec<f64>,
}
#[derive(Debug, Clone, Default)]
pub struct DriftPredictionConfig {
pub horizon_ms: u64,
}
#[derive(Debug, Clone, Default)]
pub struct DriftPredictionEngine {
pub config: DriftPredictionConfig,
}