Skip to main content

fit/transforms/
enum_strings.rs

1//! Resolve a numeric raw value to its canonical snake_case enum name.
2//!
3//! The actual lookup is provided by codegen in
4//! `crate::profile::generated::types::enum_str_by_value` (one match arm per
5//! enum type). This module is a thin re-export with documentation.
6
7pub use crate::profile::generated::types::base_type_for_type_name;
8pub use crate::profile::generated::types::enum_str_by_value;
9pub use crate::profile::generated::types::enum_value_by_str;
10
11#[cfg(test)]
12mod tests {
13    use super::*;
14
15    #[test]
16    fn looks_up_known_values() {
17        assert_eq!(enum_str_by_value("sport", 1), Some("running"));
18        assert_eq!(enum_str_by_value("manufacturer", 1), Some("garmin"));
19        assert_eq!(enum_str_by_value("file", 4), Some("activity"));
20    }
21
22    #[test]
23    fn dispatches_through_mesg_num() {
24        assert_eq!(enum_str_by_value("mesg_num", 20), Some("record"));
25        assert_eq!(enum_str_by_value("mesg_num", 0), Some("file_id"));
26    }
27
28    #[test]
29    fn unknown_type_returns_none() {
30        assert_eq!(enum_str_by_value("not_a_real_type", 1), None);
31    }
32
33    #[test]
34    fn unknown_value_within_known_type_returns_none() {
35        // sport is u8; 250 is not a defined sport value.
36        assert_eq!(enum_str_by_value("sport", 250), None);
37    }
38}