fit_rust/protocol/
get_field_offset.rs

1use crate::protocol::message_type::MessageType;
2use crate::protocol::MatchOffsetFn;
3
4fn match_offset_accelerometer_data(_: usize) -> Option<i16> {
5    None
6}
7fn match_offset_activity(_: usize) -> Option<i16> {
8    None
9}
10fn match_offset_ant_channel_id(_: usize) -> Option<i16> {
11    None
12}
13fn match_offset_ant_rx(_: usize) -> Option<i16> {
14    None
15}
16fn match_offset_ant_tx(_: usize) -> Option<i16> {
17    None
18}
19fn match_offset_aviation_attitude(_: usize) -> Option<i16> {
20    None
21}
22fn match_offset_barometer_data(_: usize) -> Option<i16> {
23    None
24}
25fn match_offset_bike_profile(k: usize) -> Option<i16> {
26    match k {
27        19 => Some(-110i16),
28        _ => None,
29    }
30}
31fn match_offset_blood_pressure(_: usize) -> Option<i16> {
32    None
33}
34fn match_offset_cadence_zone(_: usize) -> Option<i16> {
35    None
36}
37fn match_offset_camera_event(_: usize) -> Option<i16> {
38    None
39}
40fn match_offset_capabilities(_: usize) -> Option<i16> {
41    None
42}
43fn match_offset_climb_pro(_: usize) -> Option<i16> {
44    None
45}
46fn match_offset_connectivity(_: usize) -> Option<i16> {
47    None
48}
49fn match_offset_course(_: usize) -> Option<i16> {
50    None
51}
52fn match_offset_course_point(_: usize) -> Option<i16> {
53    None
54}
55fn match_offset_developer_data_id(_: usize) -> Option<i16> {
56    None
57}
58fn match_offset_device_aux_battery_info(_: usize) -> Option<i16> {
59    None
60}
61fn match_offset_device_info(_: usize) -> Option<i16> {
62    None
63}
64fn match_offset_device_settings(_: usize) -> Option<i16> {
65    None
66}
67fn match_offset_dive_alarm(_: usize) -> Option<i16> {
68    None
69}
70fn match_offset_dive_gas(_: usize) -> Option<i16> {
71    None
72}
73fn match_offset_dive_settings(_: usize) -> Option<i16> {
74    None
75}
76fn match_offset_dive_summary(_: usize) -> Option<i16> {
77    None
78}
79fn match_offset_event(_: usize) -> Option<i16> {
80    None
81}
82fn match_offset_exd_data_concept_configuration(_: usize) -> Option<i16> {
83    None
84}
85fn match_offset_exd_data_field_configuration(_: usize) -> Option<i16> {
86    None
87}
88fn match_offset_exd_screen_configuration(_: usize) -> Option<i16> {
89    None
90}
91fn match_offset_exercise_title(_: usize) -> Option<i16> {
92    None
93}
94fn match_offset_field_capabilities(_: usize) -> Option<i16> {
95    None
96}
97fn match_offset_field_description(_: usize) -> Option<i16> {
98    None
99}
100fn match_offset_file_capabilities(_: usize) -> Option<i16> {
101    None
102}
103fn match_offset_file_creator(_: usize) -> Option<i16> {
104    None
105}
106fn match_offset_file_id(_: usize) -> Option<i16> {
107    None
108}
109fn match_offset_goal(_: usize) -> Option<i16> {
110    None
111}
112fn match_offset_gps_metadata(k: usize) -> Option<i16> {
113    match k {
114        3 => Some(500i16),
115        _ => None,
116    }
117}
118fn match_offset_gyroscope_data(_: usize) -> Option<i16> {
119    None
120}
121fn match_offset_hr(_: usize) -> Option<i16> {
122    None
123}
124fn match_offset_hr_zone(_: usize) -> Option<i16> {
125    None
126}
127fn match_offset_hrm_profile(_: usize) -> Option<i16> {
128    None
129}
130fn match_offset_hrv(_: usize) -> Option<i16> {
131    None
132}
133fn match_offset_jump(_: usize) -> Option<i16> {
134    None
135}
136fn match_offset_lap(k: usize) -> Option<i16> {
137    match k {
138        42 => Some(500i16),
139        43 => Some(500i16),
140        62 => Some(500i16),
141        112 => Some(500i16),
142        113 => Some(500i16),
143        114 => Some(500i16),
144        _ => None,
145    }
146}
147fn match_offset_length(_: usize) -> Option<i16> {
148    None
149}
150fn match_offset_magnetometer_data(_: usize) -> Option<i16> {
151    None
152}
153fn match_offset_memo_glob(_: usize) -> Option<i16> {
154    None
155}
156fn match_offset_mesg_capabilities(_: usize) -> Option<i16> {
157    None
158}
159fn match_offset_met_zone(_: usize) -> Option<i16> {
160    None
161}
162fn match_offset_monitoring(_: usize) -> Option<i16> {
163    None
164}
165fn match_offset_monitoring_info(_: usize) -> Option<i16> {
166    None
167}
168fn match_offset_nmea_sentence(_: usize) -> Option<i16> {
169    None
170}
171fn match_offset_obdii_data(_: usize) -> Option<i16> {
172    None
173}
174fn match_offset_ohr_settings(_: usize) -> Option<i16> {
175    None
176}
177fn match_offset_one_d_sensor_calibration(_: usize) -> Option<i16> {
178    None
179}
180fn match_offset_power_zone(_: usize) -> Option<i16> {
181    None
182}
183fn match_offset_record(k: usize) -> Option<i16> {
184    match k {
185        2 => Some(500i16),
186        78 => Some(500i16),
187        _ => None,
188    }
189}
190fn match_offset_schedule(_: usize) -> Option<i16> {
191    None
192}
193fn match_offset_sdm_profile(_: usize) -> Option<i16> {
194    None
195}
196fn match_offset_segment_file(_: usize) -> Option<i16> {
197    None
198}
199fn match_offset_segment_id(_: usize) -> Option<i16> {
200    None
201}
202fn match_offset_segment_lap(k: usize) -> Option<i16> {
203    match k {
204        34 => Some(500i16),
205        35 => Some(500i16),
206        54 => Some(500i16),
207        _ => None,
208    }
209}
210fn match_offset_segment_leaderboard_entry(_: usize) -> Option<i16> {
211    None
212}
213fn match_offset_segment_point(k: usize) -> Option<i16> {
214    match k {
215        4 => Some(500i16),
216        _ => None,
217    }
218}
219fn match_offset_session(k: usize) -> Option<i16> {
220    match k {
221        49 => Some(500i16),
222        50 => Some(500i16),
223        71 => Some(500i16),
224        126 => Some(500i16),
225        127 => Some(500i16),
226        128 => Some(500i16),
227        _ => None,
228    }
229}
230fn match_offset_set(_: usize) -> Option<i16> {
231    None
232}
233fn match_offset_slave_device(_: usize) -> Option<i16> {
234    None
235}
236fn match_offset_software(_: usize) -> Option<i16> {
237    None
238}
239fn match_offset_speed_zone(_: usize) -> Option<i16> {
240    None
241}
242fn match_offset_sport(_: usize) -> Option<i16> {
243    None
244}
245fn match_offset_stress_level(_: usize) -> Option<i16> {
246    None
247}
248fn match_offset_three_d_sensor_calibration(_: usize) -> Option<i16> {
249    None
250}
251fn match_offset_timestamp_correlation(_: usize) -> Option<i16> {
252    None
253}
254fn match_offset_totals(_: usize) -> Option<i16> {
255    None
256}
257fn match_offset_training_file(_: usize) -> Option<i16> {
258    None
259}
260fn match_offset_user_profile(_: usize) -> Option<i16> {
261    None
262}
263fn match_offset_video(_: usize) -> Option<i16> {
264    None
265}
266fn match_offset_video_clip(_: usize) -> Option<i16> {
267    None
268}
269fn match_offset_video_description(_: usize) -> Option<i16> {
270    None
271}
272fn match_offset_video_frame(_: usize) -> Option<i16> {
273    None
274}
275fn match_offset_video_title(_: usize) -> Option<i16> {
276    None
277}
278fn match_offset_watchface_settings(_: usize) -> Option<i16> {
279    None
280}
281fn match_offset_weather_alert(_: usize) -> Option<i16> {
282    None
283}
284fn match_offset_weather_conditions(_: usize) -> Option<i16> {
285    None
286}
287fn match_offset_weight_scale(_: usize) -> Option<i16> {
288    None
289}
290fn match_offset_workout(_: usize) -> Option<i16> {
291    None
292}
293fn match_offset_workout_session(_: usize) -> Option<i16> {
294    None
295}
296fn match_offset_workout_step(_: usize) -> Option<i16> {
297    None
298}
299fn match_offset_zones_target(_: usize) -> Option<i16> {
300    None
301}
302fn match_offset_none(_: usize) -> Option<i16> {
303    None
304}
305
306/// Determines whether any SDK-defined `Message` defines an offset for any of its fields.
307///
308/// The method is called with a `MessageType` argument and returns a static closure which is called with a
309/// field_id `usize` which yields an `Option<i16>`.
310///
311/// # Example
312///
313/// ```
314/// let message_type = MessageType::Session;
315/// let parsed_value = 71;
316/// let offset_fn = match_message_offset(message_type);
317/// let offset = offset_fn(parsed_value);
318/// assert_eq!(offset, Some(500.0));
319/// ```
320pub fn get_field_offset_fn(m: MessageType) -> MatchOffsetFn {
321    match m {
322        MessageType::FileId => match_offset_file_id,
323        MessageType::FileCreator => match_offset_file_creator,
324        MessageType::TimestampCorrelation => match_offset_timestamp_correlation,
325        MessageType::Software => match_offset_software,
326        MessageType::SlaveDevice => match_offset_slave_device,
327        MessageType::Capabilities => match_offset_capabilities,
328        MessageType::FileCapabilities => match_offset_file_capabilities,
329        MessageType::MesgCapabilities => match_offset_mesg_capabilities,
330        MessageType::FieldCapabilities => match_offset_field_capabilities,
331        MessageType::DeviceSettings => match_offset_device_settings,
332        MessageType::UserProfile => match_offset_user_profile,
333        MessageType::HrmProfile => match_offset_hrm_profile,
334        MessageType::SdmProfile => match_offset_sdm_profile,
335        MessageType::BikeProfile => match_offset_bike_profile,
336        MessageType::Connectivity => match_offset_connectivity,
337        MessageType::WatchfaceSettings => match_offset_watchface_settings,
338        MessageType::OhrSettings => match_offset_ohr_settings,
339        MessageType::ZonesTarget => match_offset_zones_target,
340        MessageType::Sport => match_offset_sport,
341        MessageType::HrZone => match_offset_hr_zone,
342        MessageType::SpeedZone => match_offset_speed_zone,
343        MessageType::CadenceZone => match_offset_cadence_zone,
344        MessageType::PowerZone => match_offset_power_zone,
345        MessageType::MetZone => match_offset_met_zone,
346        MessageType::DiveSettings => match_offset_dive_settings,
347        MessageType::DiveAlarm => match_offset_dive_alarm,
348        MessageType::DiveGas => match_offset_dive_gas,
349        MessageType::Goal => match_offset_goal,
350        MessageType::Activity => match_offset_activity,
351        MessageType::Session => match_offset_session,
352        MessageType::Lap => match_offset_lap,
353        MessageType::Length => match_offset_length,
354        MessageType::Record => match_offset_record,
355        MessageType::Event => match_offset_event,
356        MessageType::DeviceInfo => match_offset_device_info,
357        MessageType::DeviceAuxBatteryInfo => match_offset_device_aux_battery_info,
358        MessageType::TrainingFile => match_offset_training_file,
359        MessageType::WeatherConditions => match_offset_weather_conditions,
360        MessageType::WeatherAlert => match_offset_weather_alert,
361        MessageType::GpsMetadata => match_offset_gps_metadata,
362        MessageType::CameraEvent => match_offset_camera_event,
363        MessageType::GyroscopeData => match_offset_gyroscope_data,
364        MessageType::AccelerometerData => match_offset_accelerometer_data,
365        MessageType::MagnetometerData => match_offset_magnetometer_data,
366        MessageType::BarometerData => match_offset_barometer_data,
367        MessageType::ThreeDSensorCalibration => match_offset_three_d_sensor_calibration,
368        MessageType::OneDSensorCalibration => match_offset_one_d_sensor_calibration,
369        MessageType::VideoFrame => match_offset_video_frame,
370        MessageType::ObdiiData => match_offset_obdii_data,
371        MessageType::NmeaSentence => match_offset_nmea_sentence,
372        MessageType::AviationAttitude => match_offset_aviation_attitude,
373        MessageType::Video => match_offset_video,
374        MessageType::VideoTitle => match_offset_video_title,
375        MessageType::VideoDescription => match_offset_video_description,
376        MessageType::VideoClip => match_offset_video_clip,
377        MessageType::Set => match_offset_set,
378        MessageType::Jump => match_offset_jump,
379        MessageType::ClimbPro => match_offset_climb_pro,
380        MessageType::FieldDescription => match_offset_field_description,
381        MessageType::DeveloperDataId => match_offset_developer_data_id,
382        MessageType::Course => match_offset_course,
383        MessageType::CoursePoint => match_offset_course_point,
384        MessageType::SegmentId => match_offset_segment_id,
385        MessageType::SegmentLeaderboardEntry => match_offset_segment_leaderboard_entry,
386        MessageType::SegmentPoint => match_offset_segment_point,
387        MessageType::SegmentLap => match_offset_segment_lap,
388        MessageType::SegmentFile => match_offset_segment_file,
389        MessageType::Workout => match_offset_workout,
390        MessageType::WorkoutSession => match_offset_workout_session,
391        MessageType::WorkoutStep => match_offset_workout_step,
392        MessageType::ExerciseTitle => match_offset_exercise_title,
393        MessageType::Schedule => match_offset_schedule,
394        MessageType::Totals => match_offset_totals,
395        MessageType::WeightScale => match_offset_weight_scale,
396        MessageType::BloodPressure => match_offset_blood_pressure,
397        MessageType::MonitoringInfo => match_offset_monitoring_info,
398        MessageType::Monitoring => match_offset_monitoring,
399        MessageType::Hr => match_offset_hr,
400        MessageType::StressLevel => match_offset_stress_level,
401        MessageType::MemoGlob => match_offset_memo_glob,
402        MessageType::AntChannelId => match_offset_ant_channel_id,
403        MessageType::AntRx => match_offset_ant_rx,
404        MessageType::AntTx => match_offset_ant_tx,
405        MessageType::ExdScreenConfiguration => match_offset_exd_screen_configuration,
406        MessageType::ExdDataFieldConfiguration => match_offset_exd_data_field_configuration,
407        MessageType::ExdDataConceptConfiguration => match_offset_exd_data_concept_configuration,
408        MessageType::DiveSummary => match_offset_dive_summary,
409        MessageType::Hrv => match_offset_hrv,
410        _ => match_offset_none,
411    }
412}