async_tftp/server/
handler.rs

1use futures_lite::{AsyncRead, AsyncWrite};
2use std::net::SocketAddr;
3use std::path::Path;
4
5use crate::packet;
6
7/// Trait for implementing advance handlers.
8#[crate::async_trait]
9pub trait Handler: Send {
10    type Reader: AsyncRead + Unpin + Send + 'static;
11    type Writer: AsyncWrite + Unpin + Send + 'static;
12
13    /// Open `Reader` to serve a read request.
14    async fn read_req_open(
15        &mut self,
16        client: &SocketAddr,
17        path: &Path,
18    ) -> Result<(Self::Reader, Option<u64>), packet::Error>;
19
20    /// Open `Writer` to serve a write request.
21    async fn write_req_open(
22        &mut self,
23        client: &SocketAddr,
24        path: &Path,
25        size: Option<u64>,
26    ) -> Result<Self::Writer, packet::Error>;
27}