From 7e024a79fa8e467f58ce4345f368c7111ce14eeb Mon Sep 17 00:00:00 2001 From: nm17 Date: Mon, 24 Feb 2025 19:53:24 +0400 Subject: [PATCH] fix(ingest_protocol): slight rework --- src/ingest_protocol/error.rs | 2 +- src/ingest_protocol/packet_types.rs | 10 ++-- src/ingest_protocol/parser.rs | 10 ++-- src/ingest_protocol/tests/mod.rs | 78 +++++++++++++++++++++++++---- src/web_server/old_app_api/mod.rs | 7 +-- 5 files changed, 83 insertions(+), 24 deletions(-) diff --git a/src/ingest_protocol/error.rs b/src/ingest_protocol/error.rs index 843eddf..a152d85 100644 --- a/src/ingest_protocol/error.rs +++ b/src/ingest_protocol/error.rs @@ -1,7 +1,7 @@ use snafu::Snafu; /// Тип ошибки Ingest протокола -#[derive(Debug, Snafu)] +#[derive(Debug, Snafu, PartialEq)] #[snafu(visibility(pub))] pub enum Error { Incomplete, diff --git a/src/ingest_protocol/packet_types.rs b/src/ingest_protocol/packet_types.rs index f3409c6..2c0db43 100644 --- a/src/ingest_protocol/packet_types.rs +++ b/src/ingest_protocol/packet_types.rs @@ -30,9 +30,9 @@ use std::hash::{Hash, Hasher}; /// NarodMon, `mac` может означать EUI-48 совместимый MAC адрес, или же просто /// уникальный идентификатор. /// -/// Парсинг этих данных отличается в разных транспортных протоколах. -/// Для HTTP /post или /get: см. [crate::web_server::old_device_sensor_api] -/// Для TCP/UDP: TODO +/// Парсинг этих данных отличается в разных транспортных протоколах. +/// Для HTTP /post или /get: см. [crate::web_server::old_device_sensor_api] +/// Для TCP/UDP: см. [crate::ingest_protocol] /// Для MQTT: TODO #[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)] pub struct SensorValue { @@ -74,6 +74,10 @@ pub struct NMDeviceDataPacket { pub values: HashSet, + /// Владелец датчика + /// + /// Будет игнорироваться, так как в данном значении нет смысла, одни проблемы. + /// Автором датчика может быть только тот, кто его создал. pub owner: Option, pub lat: Option, diff --git a/src/ingest_protocol/parser.rs b/src/ingest_protocol/parser.rs index 7efa60a..250ba3b 100644 --- a/src/ingest_protocol/parser.rs +++ b/src/ingest_protocol/parser.rs @@ -40,7 +40,7 @@ pub fn parse_packet(input: impl AsRef<[u8]>) -> Result None, }; - (&input[idx_lf..], mac, name) + (&input[idx_lf+1..], mac, name) }; let mut packet = NMDeviceDataPacket { @@ -53,12 +53,14 @@ pub fn parse_packet(input: impl AsRef<[u8]>) -> Result) -> Result = - serde_json::from_slice(body_bytes).context(app_error::JsonSnafu {})?; // TODO: Simd-JSON + serde_json::from_slice(&body_bytes).context(app_error::JsonSnafu {})?; // TODO: Simd-JSON // Ignore clippy singlematch if mandatory_params.cmd.as_ref() == "version" { @@ -45,7 +42,7 @@ pub async fn old_api_handler( match mandatory_params.cmd.as_ref() { "appInit" => { let body: AppInitRequest = - serde_json::from_slice(body_bytes).context(app_error::JsonSnafu {})?; + serde_json::from_slice(&body_bytes).context(app_error::JsonSnafu {})?; app_init(body, &app_state).await }