use boitalettres::proto::{Request, Response}; use boitalettres::server::accept::addr::{AddrIncoming, AddrStream}; use boitalettres::server::Server; use tracing_subscriber; async fn handle_req(req: Request) -> eyre::Result { use imap_codec::types::response::Status; tracing::debug!("Got request: {:#?}", req); Ok(Response::Status( Status::ok(Some(req.tag), None, "Ok").map_err(|e| eyre::eyre!(e))?, )) } #[tokio::main] async fn main() -> eyre::Result<()> { tracing_subscriber::fmt::init(); let incoming = AddrIncoming::new("127.0.0.1:4567").await?; let make_service = tower::service_fn(|addr: &AddrStream| { tracing::debug!(remote_addr = %addr.remote_addr, local_addr = %addr.local_addr, "accept"); let service = tower::ServiceBuilder::new().service_fn(handle_req); futures::future::ok::<_, std::convert::Infallible>(service) }); let server = Server::new(incoming).serve(make_service); let _ = server.await?; Ok(()) }