diff --git a/src/webserver/http_request_info.rs b/src/webserver/http_request_info.rs index c9bdd00e..66d9faa7 100644 --- a/src/webserver/http_request_info.rs +++ b/src/webserver/http_request_info.rs @@ -1,4 +1,3 @@ -use super::http::SingleOrVec; use crate::AppState; use actix_multipart::form::bytes::Bytes; use actix_multipart::form::tempfile::TempFile; @@ -16,13 +15,15 @@ use actix_web_httpauth::headers::authorization::Authorization; use actix_web_httpauth::headers::authorization::Basic; use anyhow::anyhow; use anyhow::Context; -use std::collections::hash_map::Entry; use std::collections::HashMap; use std::net::IpAddr; use std::rc::Rc; use std::sync::Arc; use tokio_stream::StreamExt; +use super::request_variables::param_map; +use super::request_variables::ParamMap; + #[derive(Debug)] pub struct RequestInfo { pub method: actix_web::http::Method, @@ -210,32 +211,9 @@ async fn extract_file( Ok(file) } -pub type ParamMap = HashMap; - -fn param_map>(values: PAIRS) -> ParamMap { - values - .into_iter() - .fold(HashMap::new(), |mut map, (mut k, v)| { - let entry = if k.ends_with("[]") { - k.replace_range(k.len() - 2.., ""); - SingleOrVec::Vec(vec![v]) - } else { - SingleOrVec::Single(v) - }; - match map.entry(k) { - Entry::Occupied(mut s) => { - SingleOrVec::merge(s.get_mut(), entry); - } - Entry::Vacant(v) => { - v.insert(entry); - } - } - map - }) -} - #[cfg(test)] mod test { + use super::super::http::SingleOrVec; use super::*; use crate::app_config::AppConfig; use actix_web::{http::header::ContentType, test::TestRequest}; diff --git a/src/webserver/mod.rs b/src/webserver/mod.rs index 44ecb014..343ecf6f 100644 --- a/src/webserver/mod.rs +++ b/src/webserver/mod.rs @@ -3,6 +3,7 @@ pub mod error_with_status; pub mod http; pub mod http_request_info; mod https; +pub mod request_variables; pub use database::Database; pub use error_with_status::ErrorWithStatus; diff --git a/src/webserver/request_variables.rs b/src/webserver/request_variables.rs new file mode 100644 index 00000000..0aa9879a --- /dev/null +++ b/src/webserver/request_variables.rs @@ -0,0 +1,27 @@ +use std::collections::{hash_map::Entry, HashMap}; + +use super::http::SingleOrVec; + +pub type ParamMap = HashMap; + +pub fn param_map>(values: PAIRS) -> ParamMap { + values + .into_iter() + .fold(HashMap::new(), |mut map, (mut k, v)| { + let entry = if k.ends_with("[]") { + k.replace_range(k.len() - 2.., ""); + SingleOrVec::Vec(vec![v]) + } else { + SingleOrVec::Single(v) + }; + match map.entry(k) { + Entry::Occupied(mut s) => { + SingleOrVec::merge(s.get_mut(), entry); + } + Entry::Vacant(v) => { + v.insert(entry); + } + } + map + }) +}