Skip to main content

strava_wrapper/models/
zone.rs

1//! Zone / heart-rate / power range types and activity-zones data.
2
3use serde::{Deserialize, Serialize};
4
5/// Time-in-zone breakdown returned from `GET /activities/{id}/zones`.
6/// One entry per zone type (heart rate, pace, etc.) that the activity has data for.
7#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct ActivityZone {
9    pub score: Option<i32>,
10    pub distribution_buckets: Option<Vec<TimedZoneDistribution>>,
11    #[serde(rename = "type")]
12    pub zone_type: Option<String>,
13    pub sensor_based: Option<bool>,
14    pub points: Option<i32>,
15    pub custom_zones: Option<bool>,
16    pub max: Option<i32>,
17}
18
19/// The athlete's own configured zones, returned from `GET /athlete/zones`.
20#[derive(Debug, Clone, Serialize, Deserialize)]
21pub struct Zones {
22    pub heart_rate: Option<HeartRateZoneRanges>,
23    pub power: Option<PowerZoneRanges>,
24}
25
26#[derive(Debug, Clone, Serialize, Deserialize)]
27pub struct HeartRateZoneRanges {
28    pub custom_zones: Option<bool>,
29    pub zones: Option<ZoneRanges>,
30}
31
32#[derive(Debug, Clone, Serialize, Deserialize)]
33pub struct PowerZoneRanges {
34    pub zones: Option<ZoneRanges>,
35}
36
37#[derive(Debug, Clone, Serialize, Deserialize)]
38pub struct ZoneRanges {
39    pub zones: Option<Vec<ZoneRange>>,
40}
41
42#[derive(Debug, Clone, Serialize, Deserialize)]
43pub struct ZoneRange {
44    pub min: Option<i32>,
45    pub max: Option<i32>,
46}
47
48#[derive(Debug, Clone, Serialize, Deserialize)]
49pub struct TimedZoneDistribution {
50    pub ranges: Option<Vec<TimedZoneRange>>,
51}
52
53#[derive(Debug, Clone, Serialize, Deserialize)]
54pub struct TimedZoneRange {
55    pub min: Option<i32>,
56    pub max: Option<i32>,
57    pub time: Option<i32>,
58}