eatmail 0.2.1

Temporary e-mail server
Documentation
use tokio::net::TcpListener;

use std::env;
use std::error::Error;

use eatmail::smtp;

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    tracing_subscriber::fmt::init();

    let addr = env::args()
        .nth(1)
        .unwrap_or_else(|| "0.0.0.0:2525".to_string());

    let listener = TcpListener::bind(&addr).await?;
    tracing::info!("Listening on: {}", addr);

    loop {
        let (stream, addr) = listener.accept().await?;

        let local = tokio::task::LocalSet::new();
        local
            .run_until(async move {
                tokio::task::spawn_local(async move {
                    tracing::info!("Accepted {}", addr);
                    let mut smtp = smtp::Server::new(stream).await?;
                    smtp.greet().await?;
                    smtp.serve().await
                })
                .await?
            })
            .await?;
    }
}