diff --git a/src/imap/client.rs b/src/imap/client.rs index 079789bf2..5e8d0895d 100644 --- a/src/imap/client.rs +++ b/src/imap/client.rs @@ -10,10 +10,10 @@ use tokio::io::BufWriter; use super::capabilities::Capabilities; use super::session::Session; -use super::session::SessionStream; use crate::context::Context; use crate::login_param::build_tls; use crate::net::connect_tcp; +use crate::net::session::SessionStream; use crate::socks::Socks5Config; /// IMAP write and read timeout. diff --git a/src/imap/session.rs b/src/imap/session.rs index f3dd00a86..ced292591 100644 --- a/src/imap/session.rs +++ b/src/imap/session.rs @@ -1,16 +1,10 @@ use std::ops::{Deref, DerefMut}; -use std::pin::Pin; -use std::time::Duration; use async_imap::types::Mailbox; use async_imap::Session as ImapSession; -use async_native_tls::TlsStream; -use fast_socks5::client::Socks5Stream; -use tokio::io::BufWriter; -use tokio::net::TcpStream; -use tokio_io_timeout::TimeoutStream; -use super::capabilities::Capabilities; +use crate::imap::capabilities::Capabilities; +use crate::net::session::SessionStream; #[derive(Debug)] pub(crate) struct Session { @@ -27,39 +21,6 @@ pub(crate) struct Session { pub selected_folder_needs_expunge: bool, } -pub(crate) trait SessionStream: - tokio::io::AsyncRead + tokio::io::AsyncWrite + Unpin + Send + Sync + std::fmt::Debug -{ - /// Change the read timeout on the session stream. - fn set_read_timeout(&mut self, timeout: Option); -} - -impl SessionStream for Box { - fn set_read_timeout(&mut self, timeout: Option) { - self.as_mut().set_read_timeout(timeout); - } -} -impl SessionStream for TlsStream { - fn set_read_timeout(&mut self, timeout: Option) { - self.get_mut().set_read_timeout(timeout); - } -} -impl SessionStream for BufWriter { - fn set_read_timeout(&mut self, timeout: Option) { - self.get_mut().set_read_timeout(timeout); - } -} -impl SessionStream for Pin>> { - fn set_read_timeout(&mut self, timeout: Option) { - self.as_mut().set_read_timeout_pinned(timeout); - } -} -impl SessionStream for Socks5Stream { - fn set_read_timeout(&mut self, timeout: Option) { - self.get_socket_mut().set_read_timeout(timeout) - } -} - impl Deref for Session { type Target = ImapSession>; diff --git a/src/net.rs b/src/net.rs index c1065ea9e..2fb9cb6b6 100644 --- a/src/net.rs +++ b/src/net.rs @@ -12,6 +12,8 @@ use tokio_io_timeout::TimeoutStream; use crate::context::Context; use crate::tools::time; +pub(crate) mod session; + async fn connect_tcp_inner(addr: SocketAddr, timeout_val: Duration) -> Result { let tcp_stream = timeout(timeout_val, TcpStream::connect(addr)) .await diff --git a/src/net/session.rs b/src/net/session.rs new file mode 100644 index 000000000..d57288c98 --- /dev/null +++ b/src/net/session.rs @@ -0,0 +1,41 @@ +use async_native_tls::TlsStream; +use fast_socks5::client::Socks5Stream; +use std::pin::Pin; +use std::time::Duration; +use tokio::io::{AsyncRead, AsyncWrite, BufWriter}; +use tokio_io_timeout::TimeoutStream; + +pub(crate) trait SessionStream: + AsyncRead + AsyncWrite + Unpin + Send + Sync + std::fmt::Debug +{ + /// Change the read timeout on the session stream. + fn set_read_timeout(&mut self, timeout: Option); +} + +impl SessionStream for Box { + fn set_read_timeout(&mut self, timeout: Option) { + self.as_mut().set_read_timeout(timeout); + } +} +impl SessionStream for TlsStream { + fn set_read_timeout(&mut self, timeout: Option) { + self.get_mut().set_read_timeout(timeout); + } +} +impl SessionStream for BufWriter { + fn set_read_timeout(&mut self, timeout: Option) { + self.get_mut().set_read_timeout(timeout); + } +} +impl SessionStream + for Pin>> +{ + fn set_read_timeout(&mut self, timeout: Option) { + self.as_mut().set_read_timeout_pinned(timeout); + } +} +impl SessionStream for Socks5Stream { + fn set_read_timeout(&mut self, timeout: Option) { + self.get_socket_mut().set_read_timeout(timeout) + } +}