pub mod connection;
pub mod dns;
pub mod download;
pub mod interfaces;
pub mod ping;
pub mod providers;
pub mod traceroute;
pub mod upload;
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct SpeedTestResult {
pub timestamp: DateTime<Utc>,
pub provider: String,
pub server: Option<String>,
pub ping: Option<PingResult>,
pub download: Option<SpeedResult>,
pub upload: Option<SpeedResult>,
pub connection_info: Option<connection::ConnectionInfo>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PingResult {
pub latency_ms: f64,
pub jitter_ms: f64,
pub min_ms: f64,
pub max_ms: f64,
pub packet_loss_percent: f64,
pub samples: Vec<f64>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct SpeedResult {
pub speed_mbps: f64,
pub peak_speed_mbps: f64,
pub bytes_transferred: u64,
pub duration_secs: f64,
pub samples: Vec<SpeedSample>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SpeedSample {
pub timestamp_ms: u64,
pub speed_mbps: f64,
}
#[derive(Debug, Clone)]
#[allow(dead_code)]
pub struct SpeedProgress {
pub current_speed_mbps: f64,
pub average_speed_mbps: f64,
pub bytes_transferred: u64,
pub elapsed_secs: f64,
pub progress_percent: f64,
}