use serde::{Deserialize, Serialize};
use ts_rs::TS;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, TS)]
#[ts(export, export_to = "../../../bindings/napi/generated/")]
#[serde(tag = "type", content = "value")]
pub enum Intensity {
PercentOfMax(f64),
RPE(f64),
RIR(u32),
Bodyweight,
Custom { name: String, value: serde_json::Value },
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn rpe_round_trip() {
let i = Intensity::RPE(8.5);
let json = serde_json::to_string(&i).unwrap();
assert_eq!(json, r#"{"type":"RPE","value":8.5}"#);
let back: Intensity = serde_json::from_str(&json).unwrap();
assert_eq!(back, i);
}
#[test]
fn percent_of_max_round_trip() {
let i = Intensity::PercentOfMax(0.80);
let json = serde_json::to_string(&i).unwrap();
let back: Intensity = serde_json::from_str(&json).unwrap();
assert_eq!(back, i);
}
#[test]
fn bodyweight_round_trip() {
let i = Intensity::Bodyweight;
let json = serde_json::to_string(&i).unwrap();
assert_eq!(json, r#"{"type":"Bodyweight"}"#);
let back: Intensity = serde_json::from_str(&json).unwrap();
assert_eq!(back, i);
}
#[test]
fn rir_round_trip() {
let i = Intensity::RIR(2);
let json = serde_json::to_string(&i).unwrap();
let back: Intensity = serde_json::from_str(&json).unwrap();
assert_eq!(back, i);
}
}