From 70b29be14d5987dd95c355e020d81652df1118da Mon Sep 17 00:00:00 2001 From: p11 Date: Sat, 31 May 2025 13:55:01 +0200 Subject: [PATCH] Put request data into a struct to parse --- src/main.rs | 45 ++++++++++++++++++++++++++++++++------------- 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/src/main.rs b/src/main.rs index 746f9ac..31c1969 100644 --- a/src/main.rs +++ b/src/main.rs @@ -472,6 +472,15 @@ fn load_character_file(path: &Path) -> Option { .map(|content| CharacterDefinition::parse(&content)) } +struct RequestData<'a> { + name: Option>, + text: Option>, + up: bool, + down: bool, + choice: usize, + progress: &'a str, +} + fn handle_relative_connection( info: Arc, 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('&', "&") .replace('<', "<") @@ -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;