Skip to content

Commit 2b5b5ad

Browse files
refactor: reduce dependency on async-std
1 parent 4af4c85 commit 2b5b5ad

File tree

9 files changed

+36
-35
lines changed

9 files changed

+36
-35
lines changed

examples/tokio.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
use async_imap::error::{Error, Result};
2-
use async_std::prelude::*;
31
use std::env;
2+
3+
use async_imap::error::{Error, Result};
4+
use futures::TryStreamExt;
45
use tokio::runtime::Runtime;
56

67
fn main() -> Result<()> {
@@ -39,7 +40,7 @@ async fn fetch_inbox_top(imap_server: &str, login: &str, password: &str) -> Resu
3940
// fetch message number 1 in this mailbox, along with its RFC822 field.
4041
// RFC 822 dictates the format of the body of e-mails
4142
let messages_stream = imap_session.fetch("1", "RFC822").await?;
42-
let messages: Vec<_> = messages_stream.collect::<Result<_>>().await?;
43+
let messages: Vec<_> = messages_stream.try_collect().await?;
4344
let message = if let Some(m) = messages.first() {
4445
m
4546
} else {

src/client.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ use std::str;
66

77
use async_native_tls::{TlsConnector, TlsStream};
88
use async_std::channel;
9-
use async_std::io::{self, Read, Write};
109
use async_std::net::{TcpStream, ToSocketAddrs};
11-
use async_std::prelude::*;
1210
use extensions::quota::parse_get_quota_root;
11+
use futures::io::{self, AsyncRead as Read, AsyncWrite as Write};
12+
use futures::prelude::*;
1313
use imap_proto::{RequestId, Response};
1414

1515
use super::authenticator::Authenticator;

src/error.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
//! IMAP error types.
22
33
use std::io::Error as IoError;
4-
use std::result;
54
use std::str::Utf8Error;
65

76
use base64::DecodeError;
87

98
/// A convenience wrapper around `Result` for `imap::Error`.
10-
pub type Result<T> = result::Result<T, Error>;
9+
pub type Result<T> = std::result::Result<T, Error>;
1110

1211
/// A set of errors that can occur in the IMAP client
1312
#[derive(thiserror::Error, Debug)]

src/extensions/idle.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,8 @@ use std::fmt;
44
use std::pin::Pin;
55
use std::time::Duration;
66

7-
use async_std::io::{self, Read, Write};
8-
use async_std::prelude::*;
9-
use async_std::stream::Stream;
7+
use futures::io::{self, AsyncRead as Read, AsyncWrite as Write};
8+
use futures::prelude::*;
109
use futures::task::{Context, Poll};
1110
use imap_proto::{RequestId, Response, Status};
1211
use stop_token::prelude::*;

src/extensions/quota.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
//! Adds support for the GETQUOTA and GETQUOTAROOT commands specificed in [RFC2087](https://tools.ietf.org/html/rfc2087).
22
33
use async_std::channel;
4-
use async_std::io;
5-
use async_std::prelude::*;
6-
use async_std::stream::Stream;
4+
use futures::io;
5+
use futures::prelude::*;
76
use imap_proto::{self, RequestId, Response};
87

98
use crate::types::*;
109
use crate::{
1110
error::Result,
12-
parse::{filter_sync, handle_unilateral},
11+
parse::{filter, handle_unilateral},
1312
};
1413
use crate::{
1514
error::{Error, ParseError},
@@ -23,7 +22,7 @@ pub(crate) async fn parse_get_quota<T: Stream<Item = io::Result<ResponseData>> +
2322
) -> Result<Quota> {
2423
let mut quota = None;
2524
while let Some(resp) = stream
26-
.take_while(|res| filter_sync(res, &command_tag))
25+
.take_while(|res| filter(res, &command_tag))
2726
.next()
2827
.await
2928
{
@@ -53,7 +52,7 @@ pub(crate) async fn parse_get_quota_root<T: Stream<Item = io::Result<ResponseDat
5352
let mut quotas: Vec<Quota> = Vec::new();
5453

5554
while let Some(resp) = stream
56-
.take_while(|res| filter_sync(res, &command_tag))
55+
.take_while(|res| filter(res, &command_tag))
5756
.next()
5857
.await
5958
{

src/imap_stream.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
use std::fmt;
22
use std::pin::Pin;
3+
use std::sync::Arc;
34

4-
use async_std::io::{self, Read, Write};
5-
use async_std::prelude::*;
6-
use async_std::stream::Stream;
7-
use async_std::sync::Arc;
85
use byte_pool::{Block, BytePool};
6+
use futures::io::{self, AsyncRead as Read, AsyncWrite as Write};
7+
use futures::stream::Stream;
98
use futures::task::{Context, Poll};
9+
use futures::AsyncWriteExt;
1010
use nom::Needed;
1111
use once_cell::sync::Lazy;
1212

src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
//! Below is a basic client example. See the `examples/` directory for more.
1717
//!
1818
//! ```no_run
19-
//! use async_std::prelude::*;
19+
//! use futures::prelude::*;
2020
//! use async_imap::error::Result;
2121
//!
2222
//! async fn fetch_inbox_top() -> Result<Option<String>> {
@@ -40,7 +40,7 @@
4040
//! // fetch message number 1 in this mailbox, along with its RFC822 field.
4141
//! // RFC 822 dictates the format of the body of e-mails
4242
//! let messages_stream = imap_session.fetch("1", "RFC822").await?;
43-
//! let messages: Vec<_> = messages_stream.collect::<Result<_>>().await?;
43+
//! let messages: Vec<_> = messages_stream.try_collect().await?;
4444
//! let message = if let Some(m) = messages.first() {
4545
//! m
4646
//! } else {

src/mock_stream.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use std::cmp::min;
22
use std::pin::Pin;
33

4-
use async_std::io::{Error, ErrorKind, Read, Result, Write};
4+
use futures::io::{AsyncRead as Read, AsyncWrite as Write, Error, ErrorKind, Result};
55
use futures::task::{Context, Poll};
66

77
#[derive(Default, Clone, Debug, Eq, PartialEq, Hash)]

src/parse.rs

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
use std::collections::HashSet;
22

33
use async_std::channel;
4-
use async_std::io;
5-
use async_std::prelude::*;
6-
use async_std::stream::Stream;
4+
use futures::io;
5+
use futures::prelude::*;
6+
use futures::stream::Stream;
77
use imap_proto::{self, MailboxDatum, RequestId, Response};
88

99
use crate::error::{Error, Result};
@@ -41,7 +41,10 @@ pub(crate) fn parse_names<T: Stream<Item = io::Result<ResponseData>> + Unpin + S
4141
)
4242
}
4343

44-
fn filter(res: &io::Result<ResponseData>, command_tag: &RequestId) -> impl Future<Output = bool> {
44+
pub(crate) fn filter(
45+
res: &io::Result<ResponseData>,
46+
command_tag: &RequestId,
47+
) -> impl Future<Output = bool> {
4548
let val = filter_sync(res, command_tag);
4649
futures::future::ready(val)
4750
}
@@ -121,7 +124,7 @@ pub(crate) async fn parse_capabilities<T: Stream<Item = io::Result<ResponseData>
121124
let mut caps: HashSet<Capability> = HashSet::new();
122125

123126
while let Some(resp) = stream
124-
.take_while(|res| filter_sync(res, &command_tag))
127+
.take_while(|res| filter(res, &command_tag))
125128
.next()
126129
.await
127130
{
@@ -147,7 +150,7 @@ pub(crate) async fn parse_noop<T: Stream<Item = io::Result<ResponseData>> + Unpi
147150
command_tag: RequestId,
148151
) -> Result<()> {
149152
while let Some(resp) = stream
150-
.take_while(|res| filter_sync(res, &command_tag))
153+
.take_while(|res| filter(res, &command_tag))
151154
.next()
152155
.await
153156
{
@@ -294,7 +297,7 @@ pub(crate) async fn parse_ids<T: Stream<Item = io::Result<ResponseData>> + Unpin
294297
let mut ids: HashSet<u32> = HashSet::new();
295298

296299
while let Some(resp) = stream
297-
.take_while(|res| filter_sync(res, &command_tag))
300+
.take_while(|res| filter(res, &command_tag))
298301
.next()
299302
.await
300303
{
@@ -439,7 +442,7 @@ mod tests {
439442

440443
let id = RequestId("A0001".into());
441444
let names: Vec<_> = parse_names(&mut stream, send, id)
442-
.collect::<Result<Vec<Name>>>()
445+
.try_collect::<Vec<Name>>()
443446
.await
444447
.unwrap();
445448
assert!(recv.is_empty());
@@ -460,7 +463,7 @@ mod tests {
460463
let id = RequestId("a".into());
461464

462465
let fetches = parse_fetches(&mut stream, send, id)
463-
.collect::<Result<Vec<_>>>()
466+
.try_collect::<Vec<_>>()
464467
.await
465468
.unwrap();
466469
assert!(recv.is_empty());
@@ -478,7 +481,7 @@ mod tests {
478481
let id = RequestId("a".into());
479482

480483
let fetches = parse_fetches(&mut stream, send, id)
481-
.collect::<Result<Vec<_>>>()
484+
.try_collect::<Vec<_>>()
482485
.await
483486
.unwrap();
484487
assert!(recv.is_empty());
@@ -505,7 +508,7 @@ mod tests {
505508
let id = RequestId("a".into());
506509

507510
let fetches = parse_fetches(&mut stream, send, id)
508-
.collect::<Result<Vec<_>>>()
511+
.try_collect::<Vec<_>>()
509512
.await
510513
.unwrap();
511514
assert_eq!(recv.recv().await.unwrap(), UnsolicitedResponse::Recent(1));
@@ -526,7 +529,7 @@ mod tests {
526529

527530
let id = RequestId("A0001".into());
528531
let names = parse_names(&mut stream, send, id)
529-
.collect::<Result<Vec<_>>>()
532+
.try_collect::<Vec<_>>()
530533
.await
531534
.unwrap();
532535

0 commit comments

Comments
 (0)