diff options
Diffstat (limited to 'crates/core/tedge_lib/src/measurement.rs')
-rw-r--r-- | crates/core/tedge_lib/src/measurement.rs | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/crates/core/tedge_lib/src/measurement.rs b/crates/core/tedge_lib/src/measurement.rs new file mode 100644 index 00000000..76b927e7 --- /dev/null +++ b/crates/core/tedge_lib/src/measurement.rs @@ -0,0 +1,38 @@ +use bevy_reflect::TypeUuid; +use std::collections::HashMap; + +#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, TypeUuid)] +#[uuid = "daad7462-0298-40e0-97b5-1a7b0c2da297"] +pub struct Measurement { + name: String, + value: MeasurementValue, +} + +impl Measurement { + pub const fn new(name: String, value: MeasurementValue) -> Self { + Self { name, value } + } + + /// Get a reference to the measurement's name. + pub fn name(&self) -> &str { + self.name.as_ref() + } + + /// Get a reference to the measurement's value. + pub fn value(&self) -> &MeasurementValue { + &self.value + } +} + +impl tedge_api::Message for Measurement {} + +#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)] +#[non_exhaustive] +#[serde(untagged)] +pub enum MeasurementValue { + Bool(bool), + Float(f64), + Text(String), + List(Vec<MeasurementValue>), + Map(HashMap<String, MeasurementValue>), +} |