aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFuwn <[email protected]>2022-04-14 21:54:15 +0000
committerFuwn <[email protected]>2022-04-14 21:54:15 +0000
commit71d38927fb631dd98bd2bc011ef6665d0e355a3e (patch)
tree61b7c08c695a606a2de9fa9fde53757fa1e77583 /src
parentfeat(handle): return bad request (diff)
downloadwindmark-71d38927fb631dd98bd2bc011ef6665d0e355a3e.tar.xz
windmark-71d38927fb631dd98bd2bc011ef6665d0e355a3e.zip
feat: handle bad request
Diffstat (limited to 'src')
-rw-r--r--src/lib.rs48
1 files changed, 29 insertions, 19 deletions
diff --git a/src/lib.rs b/src/lib.rs
index d18d177..8b3c1f3 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -137,6 +137,23 @@ use crate::{
returnable::{CallbackContext, ErrorContext, RouteContext},
};
+macro_rules! or_error {
+ ($stream:ident, $operation:expr, $error_format:literal) => {
+ match $operation {
+ Ok(u) => u,
+ Err(e) => {
+ $stream
+ .write_all(format!($error_format, e).as_bytes())
+ .await?;
+
+ $stream.shutdown().await?;
+
+ return Ok(());
+ }
+ }
+ };
+}
+
/// A router which takes care of all tasks a Windmark server should handle:
/// response generation, panics, logging, and more.
#[derive(Clone)]
@@ -353,25 +370,18 @@ impl Router {
let mut header = String::new();
while let Ok(size) = stream.read(&mut buffer).await {
- let content = String::from_utf8(buffer[0..size].to_vec())?;
-
- url = match url::Url::parse(&content.replace("\r\n", "")) {
- Ok(u) => u,
- Err(e) => {
- stream
- .write_all(
- format!("59 The server (Windmark) received a bad request: {}", e)
- .as_bytes(),
- )
- .await?;
-
- stream.shutdown().await?;
-
- return Ok(());
- }
- };
-
- if content.contains("\r\n") {
+ let request = or_error!(
+ stream,
+ String::from_utf8(buffer[0..size].to_vec()),
+ "59 The server (Windmark) received a bad request: {}"
+ );
+ url = or_error!(
+ stream,
+ url::Url::parse(&request.replace("\r\n", "")),
+ "59 The server (Windmark) received a bad request: {}"
+ );
+
+ if request.contains("\r\n") {
break;
}
}