syntax_workout_core/
intensity.rs1use serde::{Deserialize, Serialize};
2use ts_rs::TS;
3
4#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, TS)]
5#[ts(export, export_to = "../../../bindings/napi/generated/")]
6#[serde(tag = "type", content = "value")]
7pub enum Intensity {
8 PercentOfMax(f64),
9 RPE(f64),
10 RIR(u32),
11 Bodyweight,
12 Custom { name: String, value: serde_json::Value },
13}
14
15#[cfg(test)]
16mod tests {
17 use super::*;
18
19 #[test]
20 fn rpe_round_trip() {
21 let i = Intensity::RPE(8.5);
22 let json = serde_json::to_string(&i).unwrap();
23 assert_eq!(json, r#"{"type":"RPE","value":8.5}"#);
24 let back: Intensity = serde_json::from_str(&json).unwrap();
25 assert_eq!(back, i);
26 }
27
28 #[test]
29 fn percent_of_max_round_trip() {
30 let i = Intensity::PercentOfMax(0.80);
31 let json = serde_json::to_string(&i).unwrap();
32 let back: Intensity = serde_json::from_str(&json).unwrap();
33 assert_eq!(back, i);
34 }
35
36 #[test]
37 fn bodyweight_round_trip() {
38 let i = Intensity::Bodyweight;
39 let json = serde_json::to_string(&i).unwrap();
40 assert_eq!(json, r#"{"type":"Bodyweight"}"#);
41 let back: Intensity = serde_json::from_str(&json).unwrap();
42 assert_eq!(back, i);
43 }
44
45 #[test]
46 fn rir_round_trip() {
47 let i = Intensity::RIR(2);
48 let json = serde_json::to_string(&i).unwrap();
49 let back: Intensity = serde_json::from_str(&json).unwrap();
50 assert_eq!(back, i);
51 }
52}