spaceapi/sensors/
power_consumption.rs

1//! Module providing power consumption sensor functionality.
2
3use super::{FromSensorTemplate, SensorMetadataWithLocation, SensorTemplate, SensorTemplateError, Sensors};
4use serde::{Deserialize, Serialize};
5
6#[derive(Serialize, Deserialize, Default, Debug, Clone, PartialEq)]
7pub struct PowerConsumptionSensor {
8    #[serde(flatten)]
9    pub metadata: SensorMetadataWithLocation,
10    pub unit: String,
11    pub value: f64,
12}
13
14#[derive(Debug, Clone)]
15pub struct PowerConsumptionSensorTemplate {
16    pub metadata: SensorMetadataWithLocation,
17    pub unit: String,
18}
19
20impl FromSensorTemplate<PowerConsumptionSensorTemplate> for PowerConsumptionSensor {
21    fn try_from_template(
22        template: &PowerConsumptionSensorTemplate,
23        value: &str,
24    ) -> Result<Self, SensorTemplateError> {
25        Ok(Self {
26            metadata: template.metadata.clone(),
27            unit: template.unit.clone(),
28            value: value.parse()?,
29        })
30    }
31}
32
33impl SensorTemplate for PowerConsumptionSensorTemplate {
34    fn try_to_sensor(&self, value_str: &str, sensors: &mut Sensors) -> Result<(), SensorTemplateError> {
35        sensors
36            .power_consumption
37            .push(PowerConsumptionSensor::try_from_template(self, value_str)?);
38        Ok(())
39    }
40}