#[derive(Serialize, Deserialize, Debug, Copy, Clone, PartialEq, PartialOrd)]
#[serde(untagged)]
pub enum ScoreValue {
Integer(i64),
Float(f64),
}
impl ScoreValue {
#[inline]
pub fn to_f64(self) -> f64 {
match self {
ScoreValue::Integer(value) => value as f64,
ScoreValue::Float(value) => value,
}
}
}
impl From<i64> for ScoreValue {
#[inline]
fn from(value: i64) -> ScoreValue {
ScoreValue::Integer(value)
}
}
impl From<f64> for ScoreValue {
#[inline]
fn from(value: f64) -> ScoreValue {
ScoreValue::Float(value)
}
}
#[test]
fn test_parse() {
assert_eq!(ScoreValue::from(5), ScoreValue::Integer(5));
assert_eq!(ScoreValue::from(9999), ScoreValue::Integer(9999));
assert_eq!(ScoreValue::from(-2), ScoreValue::Integer(-2));
assert_eq!(ScoreValue::from(0.0), ScoreValue::Float(0.0));
assert_eq!(ScoreValue::from(0.5), ScoreValue::Float(0.5));
assert_eq!(ScoreValue::from(69.0), ScoreValue::Float(69.0));
assert_eq!(ScoreValue::from(-111.22), ScoreValue::Float(-111.22));
}
#[test]
fn test_f64() {
assert_eq!(ScoreValue::from(0).to_f64(), 0.0);
assert_eq!(ScoreValue::from(1.822).to_f64(), 1.822);
assert_eq!(ScoreValue::from(-91).to_f64(), -91.0);
}