polestar_api/models/
telemetry.rs1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
7pub struct Telemetry {
8 #[serde(flatten)]
10 pub battery: Battery,
11
12 #[serde(flatten)]
14 pub odometer: Odometer,
15
16 #[serde(flatten)]
18 pub health: Health,
19
20 #[serde(rename = "eventUpdatedTimestamp")]
22 pub event_updated_timestamp: Option<Timestamp>,
23}
24
25#[derive(Debug, Clone, Serialize, Deserialize)]
27pub struct Battery {
28 #[serde(rename = "batteryChargeLevelPercentage")]
30 pub charge_level_percentage: Option<f64>,
31
32 #[serde(rename = "batteryChargeStatus")]
34 pub charge_status: Option<String>,
35
36 #[serde(rename = "chargingPowerWatts")]
38 pub charging_power_watts: Option<f64>,
39
40 #[serde(rename = "estimatedChargingTimeToFullMinutes")]
42 pub estimated_charging_time_minutes: Option<i64>,
43
44 #[serde(rename = "estimatedDistanceToEmptyKm")]
46 pub estimated_distance_to_empty_km: Option<f64>,
47}
48
49#[derive(Debug, Clone, Serialize, Deserialize)]
51pub struct Odometer {
52 #[serde(rename = "averageSpeedKmPerHour")]
54 pub average_speed_kmh: Option<f64>,
55
56 #[serde(rename = "odometerMeters")]
58 pub odometer_meters: Option<i64>,
59}
60
61#[derive(Debug, Clone, Serialize, Deserialize)]
63pub struct Health {
64 #[serde(rename = "serviceWarningStatus")]
66 pub service_warning_status: Option<String>,
67
68 #[serde(rename = "internalVehicleIdentifier")]
70 pub internal_vehicle_identifier: Option<String>,
71}
72
73#[derive(Debug, Clone, Serialize, Deserialize)]
75pub struct Timestamp {
76 pub iso: Option<String>,
78
79 pub unix: Option<i64>,
81}
82
83#[cfg(test)]
84mod tests {
85 use super::*;
86
87 #[test]
88 fn test_battery_deserialization() {
89 let json = r#"{
90 "batteryChargeLevelPercentage": 85.5,
91 "batteryChargeStatus": "charging"
92 }"#;
93
94 let battery: Battery = serde_json::from_str(json).unwrap();
95 assert_eq!(battery.charge_level_percentage, Some(85.5));
96 assert_eq!(battery.charge_status, Some("charging".to_string()));
97 }
98
99 #[test]
100 fn test_battery_null_fields() {
101 let json = r#"{
102 "batteryChargeLevelPercentage": null
103 }"#;
104
105 let battery: Battery = serde_json::from_str(json).unwrap();
106 assert_eq!(battery.charge_level_percentage, None);
107 }
108}