fix: /get and /post urlencoded string parsing
This commit is contained in:
parent
f8d788f8bb
commit
1c0437b820
3 changed files with 10 additions and 6 deletions
|
@ -13,6 +13,8 @@ use crate::web_server::old_device_sensor_api::qs_parser::QSParserError;
|
|||
use rust_decimal::Decimal;
|
||||
use serde_json::json;
|
||||
|
||||
use super::old_device_sensor_api::qs_parser;
|
||||
|
||||
/// Главный объект ошибки [std::error::Error] для всего Web API.
|
||||
///
|
||||
/// В целом, все Result у Web сервера должны использовать этот Error.
|
||||
|
@ -45,7 +47,7 @@ pub enum AppError {
|
|||
#[display(fmt = "IDK")]
|
||||
UnknownBody {
|
||||
json_err: Option<serde_json::Error>,
|
||||
query_error: Option<serde_qs::Error>,
|
||||
query_error: Option<qs_parser::QSParserError>,
|
||||
},
|
||||
|
||||
#[display(fmt = "IDK")]
|
||||
|
|
|
@ -2,9 +2,10 @@
|
|||
|
||||
pub mod qs_parser;
|
||||
|
||||
use crate::ingest_protocol::{NMDeviceDataPacket, NMJsonPacket};
|
||||
use crate::ingest_protocol::NMJsonPacket;
|
||||
use crate::web_server::app_error::AppError;
|
||||
|
||||
use bstr::ByteSlice;
|
||||
use ntex::http::{HttpMessage, StatusCode};
|
||||
use ntex::util::Bytes;
|
||||
use ntex::web::types::State;
|
||||
|
@ -12,7 +13,6 @@ use ntex::{http, web};
|
|||
use qs_parser::QSParserError;
|
||||
use thiserror::Error;
|
||||
|
||||
|
||||
use super::NMAppState;
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
|
@ -50,7 +50,7 @@ pub async fn device_handler<'a>(
|
|||
Err(error) => json_error = Some(error),
|
||||
},
|
||||
"application/x-www-form-urlencoded" => {
|
||||
match serde_qs::from_bytes::<NMDeviceDataPacket>(body.as_ref()) {
|
||||
match qs_parser::parse_nm_qs_format(&body.as_ref().to_str_lossy()).await {
|
||||
Ok(qs_body) => {
|
||||
real_body = Some(NMJsonPacket {
|
||||
devices: Vec::from([qs_body]),
|
||||
|
@ -62,7 +62,7 @@ pub async fn device_handler<'a>(
|
|||
_ => {}
|
||||
}
|
||||
} else if request.method() == http::Method::GET {
|
||||
match serde_qs::from_str::<NMDeviceDataPacket>(request.query_string()) {
|
||||
match qs_parser::parse_nm_qs_format(request.query_string()).await {
|
||||
Ok(qs_body) => {
|
||||
real_body = Some(NMJsonPacket {
|
||||
devices: Vec::from([qs_body]),
|
||||
|
|
|
@ -45,7 +45,7 @@ impl From<serde_qs::Error> for QSParserError {
|
|||
/// [SensorValue].
|
||||
///
|
||||
/// Формат: `<SENSOR_MAC>=<SENSOR_VALUE>`.
|
||||
/// Других данных на подобии названия и времени нет.
|
||||
/// Других данных наподобие названия и времени нет.
|
||||
pub fn qs_rest_to_values(
|
||||
parsed: HashMap<String, String>,
|
||||
) -> Result<HashSet<SensorValue>, QSParserError> {
|
||||
|
@ -96,6 +96,8 @@ pub async fn parse_nm_qs_format(input: &str) -> Result<NMDeviceDataPacket, QSPar
|
|||
return Err(QSParserError::NoMAC);
|
||||
};
|
||||
|
||||
parsed.remove("ID");
|
||||
|
||||
let device_data = NMDeviceDataPacket {
|
||||
mac: device_mac,
|
||||
name: parsed.remove("name").map(|v| v.to_owned()),
|
||||
|
|
Loading…
Reference in a new issue