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 bayou;
|
||||||
mod command;
|
mod command;
|
||||||
mod config;
|
mod config;
|
||||||
mod connection;
|
|
||||||
mod cryptoblob;
|
mod cryptoblob;
|
||||||
mod instance;
|
|
||||||
mod login;
|
mod login;
|
||||||
mod mailbox;
|
mod mailbox;
|
||||||
mod mailstore;
|
mod mailstore;
|
||||||
mod server;
|
mod server;
|
||||||
|
mod service;
|
||||||
mod time;
|
mod time;
|
||||||
mod uidindex;
|
mod uidindex;
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@ use anyhow::Result;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
use crate::config::*;
|
use crate::config::*;
|
||||||
use crate::instance;
|
use crate::service;
|
||||||
use crate::mailstore;
|
use crate::mailstore;
|
||||||
|
|
||||||
use boitalettres::server::accept::addr::AddrIncoming;
|
use boitalettres::server::accept::addr::AddrIncoming;
|
||||||
|
@ -32,7 +32,7 @@ impl Server {
|
||||||
//mailbox.test().await?;
|
//mailbox.test().await?;
|
||||||
|
|
||||||
let server =
|
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?;
|
let _ = server.await?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::task::{Context, Poll};
|
use std::task::{Context, Poll};
|
||||||
|
|
||||||
|
use anyhow::Result;
|
||||||
|
use boitalettres::server::accept::addr::AddrStream;
|
||||||
use boitalettres::errors::Error as BalError;
|
use boitalettres::errors::Error as BalError;
|
||||||
use boitalettres::proto::{Request, Response};
|
use boitalettres::proto::{Request, Response};
|
||||||
use futures::future::BoxFuture;
|
use futures::future::BoxFuture;
|
||||||
|
@ -10,6 +12,30 @@ use tower::Service;
|
||||||
use crate::command;
|
use crate::command;
|
||||||
use crate::mailstore::Mailstore;
|
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 struct Connection {
|
||||||
pub mailstore: Arc<Mailstore>,
|
pub mailstore: Arc<Mailstore>,
|
||||||
}
|
}
|
||||||
|
@ -39,3 +65,4 @@ impl Service<Request> for Connection {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue