Skip to content

Commit 5177185

Browse files
robinkrahlstadelmanma
authored andcommitted
Add message structs to generated profile
This patch adds one struct per message type to the profile::messages module as well as a Message enum for all supported message types. The messages can be parsed from a FitDataRecord.
1 parent b141b5d commit 5177185

File tree

8 files changed

+12788
-4
lines changed

8 files changed

+12788
-4
lines changed

fitparser/src/error.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use std::io;
44
use std::{error, fmt};
55

66
/// The result of a deserialization operation.
7-
pub type Result<T> = ::std::result::Result<T, Error>;
7+
pub type Result<T, E = Error> = ::std::result::Result<T, E>;
88

99
/// An error that can be produced during deserializing.
1010
pub type Error = Box<ErrorKind>;

fitparser/src/lib.rs

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -357,6 +357,7 @@ impl fmt::Display for ValueWithUnits {
357357

358358
#[cfg(test)]
359359
mod tests {
360+
use super::profile::{MesgNum, Message, MessageParseOptions};
360361
use super::*;
361362
use std::collections::HashSet;
362363

@@ -365,69 +366,99 @@ mod tests {
365366
let data = include_bytes!("../tests/fixtures/Activity.fit").to_vec();
366367
let fit_data = from_bytes(&data).unwrap();
367368
assert_eq!(fit_data.len(), 22);
369+
for record in fit_data {
370+
assert!(Message::parse(record).is_ok());
371+
}
368372
}
369373

370374
#[test]
371375
fn parse_developer_data() {
372376
let data = include_bytes!("../tests/fixtures/DeveloperData.fit").to_vec();
373377
let fit_data = from_bytes(&data).unwrap();
374378
assert_eq!(fit_data.len(), 6);
379+
for record in fit_data {
380+
assert!(Message::parse(record).is_ok());
381+
}
375382
}
376383

377384
#[test]
378385
fn parse_monitoring_file() {
379386
let data = include_bytes!("../tests/fixtures/MonitoringFile.fit").to_vec();
380387
let fit_data = from_bytes(&data).unwrap();
381388
assert_eq!(fit_data.len(), 355);
389+
for record in fit_data {
390+
assert!(Message::parse(record).is_ok());
391+
}
382392
}
383393

384394
#[test]
385395
fn parse_settings() {
386396
let data = include_bytes!("../tests/fixtures/Settings.fit").to_vec();
387397
let fit_data = from_bytes(&data).unwrap();
388398
assert_eq!(fit_data.len(), 3);
399+
for record in fit_data {
400+
assert!(Message::parse(record).is_ok());
401+
}
389402
}
390403

391404
#[test]
392405
fn parse_weight_scale_multi_user() {
393406
let data = include_bytes!("../tests/fixtures/WeightScaleMultiUser.fit").to_vec();
394407
let fit_data = from_bytes(&data).unwrap();
395408
assert_eq!(fit_data.len(), 7);
409+
for record in fit_data {
410+
assert!(Message::parse(record).is_ok());
411+
}
396412
}
397413

398414
#[test]
399415
fn parse_weight_scale_single_user() {
400416
let data = include_bytes!("../tests/fixtures/WeightScaleSingleUser.fit").to_vec();
401417
let fit_data = from_bytes(&data).unwrap();
402418
assert_eq!(fit_data.len(), 6);
419+
for record in fit_data {
420+
assert!(Message::parse(record).is_ok());
421+
}
403422
}
404423

405424
#[test]
406425
fn parse_workout_custom_target_values() {
407426
let data = include_bytes!("../tests/fixtures/WorkoutCustomTargetValues.fit").to_vec();
408427
let fit_data = from_bytes(&data).unwrap();
409428
assert_eq!(fit_data.len(), 6);
429+
for record in fit_data {
430+
assert!(Message::parse(record).is_ok());
431+
}
410432
}
411433

412434
#[test]
413435
fn parse_workout_individual_steps() {
414436
let data = include_bytes!("../tests/fixtures/WorkoutIndividualSteps.fit").to_vec();
415437
let fit_data = from_bytes(&data).unwrap();
416438
assert_eq!(fit_data.len(), 6);
439+
for record in fit_data {
440+
assert!(Message::parse(record).is_ok());
441+
}
417442
}
418443

419444
#[test]
420445
fn parse_workout_repeat_greater_than_step() {
421446
let data = include_bytes!("../tests/fixtures/WorkoutRepeatGreaterThanStep.fit").to_vec();
422447
let fit_data = from_bytes(&data).unwrap();
423448
assert_eq!(fit_data.len(), 7);
449+
for record in fit_data {
450+
assert!(Message::parse(record).is_ok());
451+
}
424452
}
425453

426454
#[test]
427455
fn parse_workout_repeat_steps() {
428456
let data = include_bytes!("../tests/fixtures/WorkoutRepeatSteps.fit").to_vec();
429457
let fit_data = from_bytes(&data).unwrap();
430458
assert_eq!(fit_data.len(), 7);
459+
for record in fit_data {
460+
assert!(Message::parse(record).is_ok());
461+
}
431462
}
432463

433464
#[test]
@@ -437,6 +468,13 @@ mod tests {
437468
let data = include_bytes!("../tests/fixtures/garmin-fenix-5-bike.fit").to_vec();
438469
let fit_data = from_bytes(&data).unwrap();
439470
assert_eq!(fit_data.len(), 143);
471+
let mut options = MessageParseOptions::default();
472+
options.ignore_unexpected_fields = true;
473+
for record in fit_data {
474+
if MesgNum::is_named_variant(record.kind().as_i64()) {
475+
assert!(Message::parse_with_options(record, options).is_ok());
476+
}
477+
}
440478
}
441479

442480
#[test]
@@ -445,6 +483,13 @@ mod tests {
445483
let data = include_bytes!("../tests/fixtures/sample_mulitple_header.fit").to_vec();
446484
let fit_data = from_bytes(&data).unwrap();
447485
assert_eq!(fit_data.len(), 3023);
486+
let mut options = MessageParseOptions::default();
487+
options.ignore_unexpected_fields = true;
488+
for record in fit_data {
489+
if MesgNum::is_named_variant(record.kind().as_i64()) {
490+
assert!(Message::parse_with_options(record, options).is_ok());
491+
}
492+
}
448493
}
449494

450495
#[test]

0 commit comments

Comments
 (0)