optimize duplicated constructions

This commit is contained in:
yggverse 2025-09-08 21:54:26 +03:00
parent 96c3df1b41
commit b31d28ebee

View file

@ -75,7 +75,7 @@ fn handle(
peer: SocketAddr,
connection: Result<TlsStream<TcpStream>, HandshakeError<TcpStream>>,
) {
debug!("New peer connected: `{peer}`");
debug!("Incoming connection from: `{peer}`");
match connection {
Ok(mut stream) => {
// server should work with large files without memory overload,
@ -153,15 +153,10 @@ fn response(
stream: &mut TlsStream<TcpStream>,
) {
use route::Route;
debug!("Incoming request from `{peer}` to `{}`", request.url.path());
let route = Route::from_url(&request.url);
// try index page, including optional page value
match route {
Route::List { page } => send(
&match list(config, public, request.url.query(), page) {
send(
&match Route::from_url(&request.url) {
Route::List { page } => match list(config, public, request.url.query(), page) {
Ok(data) => response::success::Default {
data: data.as_bytes(),
meta: response::success::default::Meta {
@ -177,31 +172,12 @@ fn response(
.into_bytes()
}
},
stream,
|result| {
if let Err(e) = result {
error!("Internal server error on handle peer `{peer}` request: `{e}`")
}
},
),
Route::Search => send(
&response::Input::Default(response::input::Default {
Route::Search => response::Input::Default(response::input::Default {
message: Some("Keyword, file, hash...".into()),
})
.into_bytes(),
stream,
|result| {
if let Err(e) = result {
error!(
"Internal server error on handle peer `{peer}` request `{}`: `{e}`",
request.url.as_str()
)
}
},
),
Route::Info(id) => match public.torrent(id) {
Some(torrent) => send(
&match info(config, torrent) {
Some(torrent) => match info(config, torrent) {
Ok(data) => response::success::Default {
data: data.as_bytes(),
meta: response::success::default::Meta {
@ -217,38 +193,36 @@ fn response(
.into_bytes()
}
},
stream,
|result| {
if let Err(e) = result {
error!("Internal server error on handle peer `{peer}` request: `{e}`")
None => {
warn!(
"Requested resource `{}` not found by peer `{peer}`",
request.url.as_str()
);
response::Failure::Permanent(response::failure::Permanent::NotFound(
response::failure::permanent::NotFound { message: None },
))
.into_bytes()
}
},
),
None => todo!(),
},
Route::NotFound => {
warn!(
"Requested resource `{}` not found by peer `{peer}`",
request.url.as_str()
);
send(
&response::Failure::Permanent(response::failure::Permanent::NotFound(
response::Failure::Permanent(response::failure::Permanent::NotFound(
response::failure::permanent::NotFound { message: None },
))
.into_bytes(),
.into_bytes()
}
},
stream,
|result| {
if let Err(e) = result {
error!(
"Internal server error on handle peer `{peer}` request `{}`: `{e}`",
request.url.as_str()
)
error!("Internal server error on handle peer `{peer}` request: `{e}`")
}
},
)
}
}
}
fn send(data: &[u8], stream: &mut TlsStream<TcpStream>, callback: impl FnOnce(Result<()>)) {
fn close(stream: &mut TlsStream<TcpStream>) -> Result<()> {