2022-05-19 10:39:20 +00:00
|
|
|
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 10:39:20 +00:00
|
|
|
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-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-05-19 10:39:20 +00:00
|
|
|
async fn main() -> Result<()> {
|
2022-05-13 15:52:30 +00:00
|
|
|
setup_logging();
|
2022-05-09 17:15:52 +00:00
|
|
|
|
2022-05-19 10:39:20 +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| {
|
2022-05-13 15:52:30 +00:00
|
|
|
tracing::debug!(remote_addr = %addr.remote_addr, local_addr = %addr.local_addr, "accept");
|
|
|
|
|
2022-05-23 01:20:06 +00:00
|
|
|
let service = tower::ServiceBuilder::new().service_fn(handle_req);
|
2022-05-13 15:52:30 +00:00
|
|
|
|
|
|
|
futures::future::ok::<_, std::convert::Infallible>(service)
|
2022-05-09 17:15:52 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
let server = Server::new(incoming).serve(make_service);
|
|
|
|
|
2022-05-19 10:39:20 +00:00
|
|
|
server.await.map_err(Into::into)
|
2022-05-09 17:15:52 +00:00
|
|
|
}
|
2022-05-13 15:52:30 +00:00
|
|
|
|
|
|
|
// Don't mind this, this is just for debugging.
|
|
|
|
fn setup_logging() {
|
|
|
|
use tracing_subscriber::prelude::*;
|
|
|
|
|
2022-05-19 10:45:03 +00:00
|
|
|
let registry = tracing_subscriber::registry().with(
|
|
|
|
tracing_subscriber::fmt::layer().with_filter(
|
|
|
|
tracing_subscriber::filter::Targets::new()
|
|
|
|
.with_default(tracing::Level::DEBUG)
|
|
|
|
.with_target("boitalettres", tracing::Level::TRACE)
|
|
|
|
.with_target("simple", tracing::Level::TRACE)
|
|
|
|
.with_target("tower", tracing::Level::TRACE)
|
|
|
|
.with_target("tokio_tower", tracing::Level::TRACE)
|
|
|
|
.with_target("mio", tracing::Level::TRACE),
|
|
|
|
),
|
|
|
|
);
|
|
|
|
|
|
|
|
#[cfg(tokio_unstable)]
|
|
|
|
let registry = registry.with(console_subscriber::spawn());
|
|
|
|
|
|
|
|
registry.init();
|
2022-05-13 15:52:30 +00:00
|
|
|
}
|