This commit is contained in:
Quentin 2022-06-07 12:38:59 +02:00
parent 16e66cb563
commit b82df13082
Signed by: quentin
GPG key ID: E9602264D639FF68
4 changed files with 30 additions and 38 deletions

View file

@ -1,34 +0,0 @@
use std::sync::Arc;
use std::task::{Context, Poll};
use anyhow::Result;
use boitalettres::server::accept::addr::AddrStream;
use futures::future::BoxFuture;
use tower::Service;
use crate::connection::Connection;
use crate::mailstore::Mailstore;
pub struct Instance {
pub mailstore: Arc<Mailstore>,
}
impl Instance {
pub fn new(mailstore: Arc<Mailstore>) -> Self {
Self { mailstore }
}
}
impl<'a> Service<&'a AddrStream> for Instance {
type Response = Connection;
type Error = anyhow::Error;
type Future = BoxFuture<'static, Result<Self::Response>>;
fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll<Result<(), Self::Error>> {
Poll::Ready(Ok(()))
}
fn call(&mut self, addr: &'a AddrStream) -> Self::Future {
tracing::info!(remote_addr = %addr.remote_addr, local_addr = %addr.local_addr, "accept");
let ms = self.mailstore.clone();
Box::pin(async { Ok(Connection::new(ms)) })
}
}

View file

@ -1,13 +1,12 @@
mod bayou;
mod command;
mod config;
mod connection;
mod cryptoblob;
mod instance;
mod login;
mod mailbox;
mod mailstore;
mod server;
mod service;
mod time;
mod uidindex;

View file

@ -2,7 +2,7 @@ use anyhow::Result;
use std::sync::Arc;
use crate::config::*;
use crate::instance;
use crate::service;
use crate::mailstore;
use boitalettres::server::accept::addr::AddrIncoming;
@ -32,7 +32,7 @@ impl Server {
//mailbox.test().await?;
let server =
ImapServer::new(self.incoming).serve(instance::Instance::new(self.mailstore.clone()));
ImapServer::new(self.incoming).serve(service::Instance::new(self.mailstore.clone()));
let _ = server.await?;
Ok(())

View file

@ -1,6 +1,8 @@
use std::sync::Arc;
use std::task::{Context, Poll};
use anyhow::Result;
use boitalettres::server::accept::addr::AddrStream;
use boitalettres::errors::Error as BalError;
use boitalettres::proto::{Request, Response};
use futures::future::BoxFuture;
@ -10,6 +12,30 @@ use tower::Service;
use crate::command;
use crate::mailstore::Mailstore;
pub struct Instance {
pub mailstore: Arc<Mailstore>,
}
impl Instance {
pub fn new(mailstore: Arc<Mailstore>) -> Self {
Self { mailstore }
}
}
impl<'a> Service<&'a AddrStream> for Instance {
type Response = Connection;
type Error = anyhow::Error;
type Future = BoxFuture<'static, Result<Self::Response>>;
fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll<Result<(), Self::Error>> {
Poll::Ready(Ok(()))
}
fn call(&mut self, addr: &'a AddrStream) -> Self::Future {
tracing::info!(remote_addr = %addr.remote_addr, local_addr = %addr.local_addr, "accept");
let ms = self.mailstore.clone();
Box::pin(async { Ok(Connection::new(ms)) })
}
}
pub struct Connection {
pub mailstore: Arc<Mailstore>,
}
@ -39,3 +65,4 @@ impl Service<Request> for Connection {
})
}
}