1use super::activity::MetaActivity;
4use super::athlete::MetaAthlete;
5use super::common::{LatLng, PolylineMap};
6use chrono::{DateTime, Utc};
7use serde::{Deserialize, Serialize};
8
9#[derive(Debug, Clone, Serialize, Deserialize)]
10pub struct ExplorerResponse {
11 pub segments: Option<Vec<ExplorerSegment>>,
12}
13
14#[derive(Debug, Clone, Serialize, Deserialize)]
15pub struct ExplorerSegment {
16 pub id: Option<i64>,
17 pub name: Option<String>,
18 pub climb_category: Option<i32>,
19 pub climb_category_desc: Option<String>,
20 pub avg_grade: Option<f32>,
21 pub start_latlng: Option<LatLng>,
22 pub end_latlng: Option<LatLng>,
23 pub elev_difference: Option<f32>,
24 pub distance: Option<f32>,
25 pub points: Option<String>,
26}
27
28#[derive(Debug, Clone, Serialize, Deserialize)]
29pub struct SummarySegment {
30 pub id: Option<i64>,
31 pub name: Option<String>,
32 pub activity_type: Option<String>,
33 pub distance: Option<f32>,
34 pub average_grade: Option<f32>,
35 pub maximum_grade: Option<f32>,
36 pub elevation_high: Option<f32>,
37 pub elevation_low: Option<f32>,
38 pub start_latlng: Option<LatLng>,
39 pub end_latlng: Option<LatLng>,
40 pub climb_category: Option<i32>,
41 pub city: Option<String>,
42 pub state: Option<String>,
43 pub country: Option<String>,
44 pub private: Option<bool>,
45 pub athlete_pr_effort: Option<SummaryPRSegmentEffort>,
46 pub athlete_segment_stats: Option<SummarySegmentEffort>,
47}
48
49#[derive(Debug, Clone, Serialize, Deserialize)]
50pub struct DetailedSegment {
51 pub id: Option<i64>,
52 pub name: Option<String>,
53 pub activity_type: Option<String>,
54 pub distance: Option<f32>,
55 pub average_grade: Option<f32>,
56 pub maximum_grade: Option<f32>,
57 pub elevation_high: Option<f32>,
58 pub elevation_low: Option<f32>,
59 pub start_latlng: Option<LatLng>,
60 pub end_latlng: Option<LatLng>,
61 pub climb_category: Option<i32>,
62 pub city: Option<String>,
63 pub state: Option<String>,
64 pub country: Option<String>,
65 pub private: Option<bool>,
66 pub athlete_pr_effort: Option<SummaryPRSegmentEffort>,
67 pub athlete_segment_stats: Option<SummarySegmentEffort>,
68 pub created_at: Option<String>,
69 pub updated_at: Option<String>,
70 pub total_elevation_gain: Option<f32>,
71 pub map: Option<PolylineMap>,
72 pub effort_count: Option<i32>,
73 pub athlete_count: Option<i32>,
74 pub hazardous: Option<bool>,
75 pub star_count: Option<i32>,
76}
77
78#[derive(Debug, Clone, Serialize, Deserialize)]
79pub struct SummaryPRSegmentEffort {
80 pub pr_activity_id: Option<i64>,
81 pub pr_elapsed_time: Option<i32>,
82 pub pr_date: Option<DateTime<Utc>>,
83 pub effort_count: Option<i32>,
84}
85
86#[derive(Debug, Clone, Serialize, Deserialize)]
87pub struct SummarySegmentEffort {
88 pub id: Option<i64>,
89 pub activity_id: Option<i64>,
90 pub elapsed_time: Option<i32>,
91 pub start_date: Option<DateTime<Utc>>,
92 pub start_date_local: Option<DateTime<Utc>>,
93 pub distance: Option<f32>,
94 pub is_kom: Option<bool>,
95}
96
97#[derive(Debug, Clone, Serialize, Deserialize)]
98pub struct DetailedSegmentEffort {
99 pub id: Option<i64>,
100 pub activity_id: Option<i64>,
101 pub elapsed_time: Option<i32>,
102 pub start_date: Option<DateTime<Utc>>,
103 pub start_date_local: Option<DateTime<Utc>>,
104 pub distance: Option<f32>,
105 pub is_kom: Option<bool>,
106 pub name: Option<String>,
107 pub activity: Option<MetaActivity>,
108 pub athlete: Option<MetaAthlete>,
109 pub moving_time: Option<i32>,
110 pub start_index: Option<i32>,
111 pub end_index: Option<i32>,
112 pub average_cadence: Option<f32>,
113 pub average_watts: Option<f32>,
114 pub device_watts: Option<bool>,
115 pub average_heartrate: Option<f32>,
116 pub max_heartrate: Option<f32>,
117 pub segment: Option<SummarySegment>,
118 pub kom_rank: Option<i32>,
119 pub pr_rank: Option<i32>,
120 pub hidden: Option<bool>,
121}