Put request data into a struct to parse

This commit is contained in:
p11 2025-05-31 13:55:01 +02:00
parent f64a38ce58
commit 70b29be14d

View File

@ -472,6 +472,15 @@ fn load_character_file(path: &Path) -> Option<CharacterDefinition> {
.map(|content| CharacterDefinition::parse(&content)) .map(|content| CharacterDefinition::parse(&content))
} }
struct RequestData<'a> {
name: Option<Box<str>>,
text: Option<Box<str>>,
up: bool,
down: bool,
choice: usize,
progress: &'a str,
}
fn handle_relative_connection( fn handle_relative_connection(
info: Arc<SiteInfo>, info: Arc<SiteInfo>,
mut stream: TcpStream, mut stream: TcpStream,
@ -482,13 +491,14 @@ fn handle_relative_connection(
cookie: Option<&str>, cookie: Option<&str>,
censored: bool, censored: bool,
) { ) {
let mut name = None; let mut data = RequestData {
let mut text = None; name: None,
text: None,
let mut up = false; up: false,
let mut down = false; down: false,
let mut choice = 0; choice: 0,
let mut progress = ""; progress: "",
};
for entry in body.split('&') { for entry in body.split('&') {
let Some((key, input)) = entry.split_once('=') else { let Some((key, input)) = entry.split_once('=') else {
@ -500,7 +510,7 @@ fn handle_relative_connection(
let name_value = input.replace('+', " "); let name_value = input.replace('+', " ");
let decoded_name = percent_decode_str(&name_value).decode_utf8_lossy(); let decoded_name = percent_decode_str(&name_value).decode_utf8_lossy();
eprintln!("Received comment by \"{decoded_name}\":"); eprintln!("Received comment by \"{decoded_name}\":");
name = Some( data.name = Some(
decoded_name decoded_name
.replace('&', "&amp;") .replace('&', "&amp;")
.replace('<', "&lt;") .replace('<', "&lt;")
@ -517,20 +527,29 @@ fn handle_relative_connection(
eprintln!(); eprintln!();
let mut text_buf = Vec::new(); let mut text_buf = Vec::new();
convert(decoded_text.lines(), &mut text_buf); convert(decoded_text.lines(), &mut text_buf);
text = Some( data.text = Some(
std::str::from_utf8(text_buf.as_slice()) std::str::from_utf8(text_buf.as_slice())
.unwrap_or_default() .unwrap_or_default()
.into(), .into(),
); );
} }
"up" => up = true, "up" => data.up = true,
"down" => down = true, "down" => data.down = true,
"choice" => choice = input.parse().unwrap_or_default(), "choice" => data.choice = input.parse().unwrap_or_default(),
"progress" => progress = input, "progress" => data.progress = input,
_ => (), _ => (),
} }
} }
let RequestData {
name,
text,
up,
down,
choice,
progress,
} = data;
let comments = { let comments = {
let Ok(mut comments) = info.comments.lock() else { let Ok(mut comments) = info.comments.lock() else {
return; return;