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