diff --git a/src/tftp/server.rs b/src/tftp/server.rs index 1586c09..3a5891b 100644 --- a/src/tftp/server.rs +++ b/src/tftp/server.rs @@ -28,11 +28,15 @@ pub enum Error { Timeout, } -pub async fn handle_connection( +pub async fn handle_connection( src: SocketAddr, packet: Packet, - callback: impl (Fn(&str) -> Option>) + Send + Clone + 'static, -) -> Result<(), Error> { + callback: F, +) -> Result<(), Error> +where + F: Fn(&str) -> Fut, + Fut: Future>>, +{ let socket = UdpSocket::bind("127.0.0.1:0").await?; println!( "{src}: Connecting from {}", @@ -50,7 +54,7 @@ pub async fn handle_connection( let filename = request.filename(); println!("{src}: {filename} [{:?}]", request.mode()); - let Some(data) = callback(filename) else { + let Some(data) = callback(filename).await else { Packet::error(ErrorCode::FileNotFound, "Unknown file") .send_to(&socket, &src) .await?; @@ -141,9 +145,11 @@ pub async fn handle_connection( Ok(()) } -pub async fn serve( - callback: impl (Fn(&str) -> Option>) + Send + Clone + 'static, -) -> Result<(), Error> { +pub async fn serve(callback: F) -> Result<(), Error> +where + F: Fn(&str) -> Fut + Clone + Send + 'static, + Fut: Future>> + Send + 'static, +{ let socket = UdpSocket::bind("127.0.0.1:69").await?; println!("Server started");