1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
use std::fmt::Display;

use serde::Deserialize;
use strum::EnumDiscriminants;

#[derive(Clone, Copy, EnumDiscriminants)]
#[strum_discriminants(derive(Deserialize, strum::Display, Hash), name(MeasureKind))]
pub enum Measure {
	Acceleration(f32, f32, f32),
	Gyroscope(f32, f32, f32),
	Humidity(f32),
	InfraredLight(f32),
	Pressure(f32),
	Temperature(f32),
	VisibleInfraredLight(f32),
}

impl Display for Measure {
	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
		write!(
			f,
			"{}",
			match self {
				Measure::Acceleration(x, y, z) | Measure::Gyroscope(x, y, z) =>
					format!("{}_{}_{}", x, y, z),
				Measure::Humidity(m)
				| Measure::InfraredLight(m)
				| Measure::Pressure(m)
				| Measure::Temperature(m)
				| Measure::VisibleInfraredLight(m) => format!("{}", m),
			}
		)
	}
}