boitalettres/examples/simple.rs

54 lines
1.4 KiB
Rust
Raw Normal View History

use miette::{IntoDiagnostic, Result};
2022-05-23 01:20:06 +00:00
2022-05-09 17:15:52 +00:00
use boitalettres::proto::{Request, Response};
use boitalettres::server::accept::addr::{AddrIncoming, AddrStream};
use boitalettres::server::Server;
2022-05-19 08:18:25 +00:00
use tracing_subscriber;
2022-05-09 17:15:52 +00:00
use tokio::time::{sleep, Duration};
async fn handle_req(req: Request) -> Result<Response> {
2022-05-23 01:20:06 +00:00
use imap_codec::types::response::{Capability, Data};
2022-05-09 17:15:52 +00:00
tracing::debug!("Got request: {:#?}", req);
2022-06-03 12:32:10 +00:00
println!("WILL SLEEP");
sleep(Duration::from_millis(100)).await;
println!("DONE SLEEP");
2022-05-23 01:20:06 +00:00
let capabilities = vec![Capability::Imap4Rev1, Capability::Idle];
let body = vec![Data::Capability(capabilities)];
Ok(Response::ok("Done")?.with_body(body))
2022-05-09 17:15:52 +00:00
}
#[tokio::main]
2022-06-03 12:32:10 +00:00
async fn main() -> Result<()> {
2022-05-19 08:18:25 +00:00
tracing_subscriber::fmt::init();
2022-05-09 17:15:52 +00:00
let incoming = AddrIncoming::new("127.0.0.1:4567")
.await
.into_diagnostic()?;
2022-05-09 17:15:52 +00:00
let make_service = tower::service_fn(|addr: &AddrStream| {
tracing::debug!(remote_addr = %addr.remote_addr, local_addr = %addr.local_addr, "accept");
async {
println!("222 WILL SLEEP");
sleep(Duration::from_millis(100)).await;
println!("222 DONE SLEEP");
let service = tower::ServiceBuilder::new().service_fn(handle_req);
let r: Result<_, boitalettres::errors::Error> = Ok(service);
r
}
2022-05-09 17:15:52 +00:00
});
let server = Server::new(incoming).serve(make_service);
server.await.map_err(Into::into)
2022-05-09 17:15:52 +00:00
}