Refactor
This commit is contained in:
parent
16e66cb563
commit
b82df13082
4 changed files with 30 additions and 38 deletions
|
@ -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)) })
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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(())
|
||||
|
|
|
@ -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 {
|
|||
})
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in a new issue