async_imap_lite/
lib.rs

1use std::io;
2use std::net::TcpStream;
3
4use async_io::Async;
5use async_net::AsyncToSocketAddrs;
6use imap_patch_for_async_imap_lite as imap;
7
8#[cfg(feature = "async_native_tls")]
9pub use async_stream_tls_upgrader::AsyncNativeTlsClientTlsUpgrader;
10#[cfg(feature = "async_tls")]
11pub use async_stream_tls_upgrader::AsyncTlsClientTlsUpgrader;
12
13use crate::connection::{
14    AsyncRead, AsyncWrite, TlsClientUpgrader, UpgradableAsyncStream, UpgraderExtRefer,
15};
16use crate::imap::{Error, Result};
17
18// ref https://github.com/jonhoo/rust-imap/blob/v2.2.0/src/client.rs#L137-L155
19pub async fn connect_async<A: AsyncToSocketAddrs, ASTU>(
20    addr: A,
21    tls_upgrader: ASTU,
22    debug: Option<bool>,
23) -> Result<AsyncClient<TcpStream, ASTU>>
24where
25    ASTU: TlsClientUpgrader<Async<TcpStream>> + UpgraderExtRefer<Async<TcpStream>> + Unpin,
26    ASTU::Output: AsyncRead + AsyncWrite + Unpin,
27{
28    let addr = addr
29        .to_socket_addrs()
30        .await?
31        .next()
32        .ok_or(Error::Io(io::Error::new(
33            io::ErrorKind::InvalidInput,
34            "invalid addr",
35        )))?;
36
37    let stream = Async::<TcpStream>::connect(addr).await?;
38    let mut stream = UpgradableAsyncStream::new(stream, tls_upgrader);
39    stream.upgrade().await?;
40
41    let conn = AsyncConnection::new(stream, debug.unwrap_or(false), false).await;
42    let mut client = AsyncClient::new(conn);
43
44    client.read_greeting().await?;
45
46    Ok(client)
47}
48
49//
50//
51//
52mod client;
53mod connection;
54mod session;
55mod util;
56
57pub use client::AsyncClient;
58pub use connection::AsyncConnection;
59pub use session::AsyncSession;