spaceapi/sensors/
network_connections.rs

1//! Module providing network connections sensor functionality.
2
3use super::{FromSensorTemplate, SensorMetadata, SensorTemplate, SensorTemplateError, Sensors};
4use serde::{Deserialize, Serialize};
5
6#[derive(Serialize, Deserialize, Default, Debug, Clone, PartialEq, Eq)]
7pub struct NetworkConnectionsSensor {
8    #[serde(flatten)]
9    pub metadata: SensorMetadata,
10    #[serde(skip_serializing_if = "Option::is_none")]
11    pub machines: Option<Vec<NetworkConnectionMachine>>,
12    #[serde(skip_serializing_if = "Option::is_none", rename = "type")]
13    pub kind: Option<NetworkConnectionKind>,
14    pub value: u64,
15}
16
17#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
18#[serde(rename_all = "snake_case")]
19pub enum NetworkConnectionKind {
20    Wifi,
21    Cable,
22    Spacenet,
23}
24
25#[derive(Serialize, Deserialize, Default, Debug, Clone, PartialEq, Eq)]
26pub struct NetworkConnectionMachine {
27    #[serde(skip_serializing_if = "Option::is_none")]
28    pub name: Option<String>,
29    pub mac: String,
30}
31
32#[derive(Debug, Clone)]
33pub struct NetworkConnectionsSensorTemplate {
34    pub metadata: SensorMetadata,
35    pub kind: Option<NetworkConnectionKind>,
36}
37
38impl FromSensorTemplate<NetworkConnectionsSensorTemplate> for NetworkConnectionsSensor {
39    fn try_from_template(
40        template: &NetworkConnectionsSensorTemplate,
41        value: &str,
42    ) -> Result<Self, SensorTemplateError> {
43        Ok(Self {
44            metadata: template.metadata.clone(),
45            kind: template.kind.clone(),
46            value: value.parse()?,
47            ..Default::default()
48        })
49    }
50}
51
52impl SensorTemplate for NetworkConnectionsSensorTemplate {
53    fn try_to_sensor(&self, value_str: &str, sensors: &mut Sensors) -> Result<(), SensorTemplateError> {
54        sensors
55            .network_connections
56            .push(NetworkConnectionsSensor::try_from_template(self, value_str)?);
57        Ok(())
58    }
59}