use std::{collections::HashMap, str::FromStr}; pub trait ParamMap { fn parse_param(&self, param: &str) -> Result; } impl ParamMap for HashMap { fn parse_param(&self, param: &str) -> Result { match self.get(param) { Some(value) => T::from_str(value).map_err(|_| crate::response::Error::InvalidParameter), None => Err(crate::response::Error::InvalidParameter), } } } pub fn parse(s: &str) -> std::io::Result<(String, HashMap)> { let mut parts = s.split("@"); let method = parts.next().unwrap().trim().to_lowercase(); let params = parts .map(|p| { let parts = p.split("=").collect::>(); (parts[0].trim().to_string(), parts[1].trim().to_string()) }) .collect::>(); Ok((method, params)) }