Put request data into a struct to parse
This commit is contained in:
parent
f64a38ce58
commit
70b29be14d
45
src/main.rs
45
src/main.rs
@ -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('&', "&")
|
.replace('&', "&")
|
||||||
.replace('<', "<")
|
.replace('<', "<")
|
||||||
@ -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;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user