Put request data parsing into separate method
This commit is contained in:
parent
70b29be14d
commit
8e6efef5bb
108
src/main.rs
108
src/main.rs
@ -481,6 +481,62 @@ struct RequestData<'a> {
|
||||
progress: &'a str,
|
||||
}
|
||||
|
||||
impl<'a> RequestData<'a> {
|
||||
fn parse(body: &'a str) -> Self {
|
||||
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 {
|
||||
continue;
|
||||
};
|
||||
|
||||
match key {
|
||||
"name" => {
|
||||
let name_value = input.replace('+', " ");
|
||||
let decoded_name = percent_decode_str(&name_value).decode_utf8_lossy();
|
||||
eprintln!("Received comment by \"{decoded_name}\":");
|
||||
data.name = Some(
|
||||
decoded_name
|
||||
.replace('&', "&")
|
||||
.replace('<', "<")
|
||||
.replace('>', ">")
|
||||
.into(),
|
||||
);
|
||||
}
|
||||
"text" => {
|
||||
let text_value = input.replace('+', " ");
|
||||
let decoded_text = percent_decode_str(&text_value).decode_utf8_lossy();
|
||||
for line in decoded_text.lines() {
|
||||
eprintln!(" {line}");
|
||||
}
|
||||
eprintln!();
|
||||
let mut text_buf = Vec::new();
|
||||
convert(decoded_text.lines(), &mut text_buf);
|
||||
data.text = Some(
|
||||
std::str::from_utf8(text_buf.as_slice())
|
||||
.unwrap_or_default()
|
||||
.into(),
|
||||
);
|
||||
}
|
||||
"up" => data.up = true,
|
||||
"down" => data.down = true,
|
||||
"choice" => data.choice = input.parse().unwrap_or_default(),
|
||||
"progress" => data.progress = input,
|
||||
_ => (),
|
||||
}
|
||||
}
|
||||
|
||||
data
|
||||
}
|
||||
}
|
||||
|
||||
fn handle_relative_connection(
|
||||
info: Arc<SiteInfo>,
|
||||
mut stream: TcpStream,
|
||||
@ -491,56 +547,6 @@ fn handle_relative_connection(
|
||||
cookie: Option<&str>,
|
||||
censored: bool,
|
||||
) {
|
||||
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 {
|
||||
continue;
|
||||
};
|
||||
|
||||
match key {
|
||||
"name" => {
|
||||
let name_value = input.replace('+', " ");
|
||||
let decoded_name = percent_decode_str(&name_value).decode_utf8_lossy();
|
||||
eprintln!("Received comment by \"{decoded_name}\":");
|
||||
data.name = Some(
|
||||
decoded_name
|
||||
.replace('&', "&")
|
||||
.replace('<', "<")
|
||||
.replace('>', ">")
|
||||
.into(),
|
||||
);
|
||||
}
|
||||
"text" => {
|
||||
let text_value = input.replace('+', " ");
|
||||
let decoded_text = percent_decode_str(&text_value).decode_utf8_lossy();
|
||||
for line in decoded_text.lines() {
|
||||
eprintln!(" {line}");
|
||||
}
|
||||
eprintln!();
|
||||
let mut text_buf = Vec::new();
|
||||
convert(decoded_text.lines(), &mut text_buf);
|
||||
data.text = Some(
|
||||
std::str::from_utf8(text_buf.as_slice())
|
||||
.unwrap_or_default()
|
||||
.into(),
|
||||
);
|
||||
}
|
||||
"up" => data.up = true,
|
||||
"down" => data.down = true,
|
||||
"choice" => data.choice = input.parse().unwrap_or_default(),
|
||||
"progress" => data.progress = input,
|
||||
_ => (),
|
||||
}
|
||||
}
|
||||
|
||||
let RequestData {
|
||||
name,
|
||||
text,
|
||||
@ -548,7 +554,7 @@ fn handle_relative_connection(
|
||||
down,
|
||||
choice,
|
||||
progress,
|
||||
} = data;
|
||||
} = RequestData::parse(body);
|
||||
|
||||
let comments = {
|
||||
let Ok(mut comments) = info.comments.lock() else {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user