use crate::cst::user_id_cst::USER_ID_HEADER_NAME;
use actix_web::web::Query;
use actix_web::HttpRequest;
use std::collections::HashMap;
use validator;
pub fn get_id_from_query_params(
query: Query<HashMap<String, String>>,
) -> actix_web::Result<u64, validator::ValidationError> {
let id = match query.get("id") {
Some(id_str) => match id_str.parse::<u64>() {
Ok(id_val) => id_val,
Err(_) => {
let msg = format!("参数<id>格式错误: {}", id_str);
return Err(validator::ValidationError::new(Box::leak(
msg.into_boxed_str(),
)));
}
},
None => {
return Err(validator::ValidationError::new("缺少必要参数<id>"));
}
};
Ok(id)
}
pub fn get_current_user_id(req: HttpRequest) -> Result<u64, validator::ValidationError> {
req.headers()
.get(USER_ID_HEADER_NAME)
.ok_or_else(|| {
let msg = format!("缺少必要参数<{}>", USER_ID_HEADER_NAME);
validator::ValidationError::new(Box::leak(msg.into_boxed_str()))
})?
.to_str()
.unwrap()
.to_string()
.parse::<u64>()
.map_err(|_| {
let msg = format!("参数<{}>格式不正确", USER_ID_HEADER_NAME);
validator::ValidationError::new(Box::leak(msg.into_boxed_str()))
})
}