Move to new nom + tokio-proto

This commit is contained in:
Jon Gjengset 2018-10-31 21:15:19 -04:00
parent e68d61a1e2
commit 5c91f4c1bb
No known key found for this signature in database
GPG key ID: D64AC9D67176DC71
3 changed files with 15 additions and 17 deletions

View file

@ -28,8 +28,8 @@ path = "src/lib.rs"
native-tls = "0.2" native-tls = "0.2"
regex = "1.0" regex = "1.0"
bufstream = "0.1" bufstream = "0.1"
imap-proto = "0.4.1" imap-proto = "0.6"
nom = "3.2.1" nom = "4.0"
[dev-dependencies] [dev-dependencies]
base64 = "0.9.2" base64 = "0.10"

View file

@ -1,6 +1,5 @@
use bufstream::BufStream; use bufstream::BufStream;
use native_tls::{TlsConnector, TlsStream}; use native_tls::{TlsConnector, TlsStream};
use nom::IResult;
use std::collections::HashSet; use std::collections::HashSet;
use std::io::{self, Read, Write}; use std::io::{self, Read, Write};
use std::net::{TcpStream, ToSocketAddrs}; use std::net::{TcpStream, ToSocketAddrs};
@ -743,7 +742,7 @@ impl<T: Read + Write> Connection<T> {
let line = &data[line_start..]; let line = &data[line_start..];
match parse_response(line) { match parse_response(line) {
IResult::Done( Ok((
_, _,
Response::Done { Response::Done {
tag, tag,
@ -751,7 +750,7 @@ impl<T: Read + Write> Connection<T> {
information, information,
.. ..
}, },
) => { )) => {
assert_eq!(tag.as_bytes(), match_tag.as_bytes()); assert_eq!(tag.as_bytes(), match_tag.as_bytes());
Some(match status { Some(match status {
Status::Bad | Status::No => { Status::Bad | Status::No => {
@ -761,8 +760,8 @@ impl<T: Read + Write> Connection<T> {
status => Err((status, None)), status => Err((status, None)),
}) })
} }
IResult::Done(..) => None, Ok((..)) => None,
IResult::Incomplete(..) => { Err(nom::Err::Incomplete(..)) => {
continue_from = Some(line_start); continue_from = Some(line_start);
None None
} }

View file

@ -1,5 +1,4 @@
use imap_proto::{self, MailboxDatum, Response}; use imap_proto::{self, MailboxDatum, Response};
use nom::IResult;
use regex::Regex; use regex::Regex;
use std::collections::HashSet; use std::collections::HashSet;
@ -36,7 +35,7 @@ where
} }
match imap_proto::parse_response(lines) { match imap_proto::parse_response(lines) {
IResult::Done(rest, resp) => { Ok((rest, resp)) => {
lines = rest; lines = rest;
match map(resp) { match map(resp) {
@ -130,7 +129,7 @@ pub fn parse_capabilities(lines: Vec<u8>) -> ZeroCopyResult<Capabilities> {
let mut caps = HashSet::new(); let mut caps = HashSet::new();
loop { loop {
match imap_proto::parse_response(lines) { match imap_proto::parse_response(lines) {
IResult::Done(rest, Response::Capabilities(c)) => { Ok((rest, Response::Capabilities(c))) => {
lines = rest; lines = rest;
caps.extend(c); caps.extend(c);
@ -138,7 +137,7 @@ pub fn parse_capabilities(lines: Vec<u8>) -> ZeroCopyResult<Capabilities> {
break Ok(Capabilities(caps)); break Ok(Capabilities(caps));
} }
} }
IResult::Done(_, resp) => { Ok((_, resp)) => {
break Err(resp.into()); break Err(resp.into());
} }
_ => { _ => {
@ -156,7 +155,7 @@ pub fn parse_mailbox(mut lines: &[u8]) -> Result<Mailbox> {
loop { loop {
match imap_proto::parse_response(lines) { match imap_proto::parse_response(lines) {
IResult::Done(rest, Response::Data { status, code, .. }) => { Ok((rest, Response::Data { status, code, .. })) => {
lines = rest; lines = rest;
if let imap_proto::Status::Ok = status { if let imap_proto::Status::Ok = status {
@ -184,7 +183,7 @@ pub fn parse_mailbox(mut lines: &[u8]) -> Result<Mailbox> {
_ => {} _ => {}
} }
} }
IResult::Done(rest, Response::MailboxData(m)) => { Ok((rest, Response::MailboxData(m))) => {
lines = rest; lines = rest;
use imap_proto::MailboxDatum; use imap_proto::MailboxDatum;
@ -206,7 +205,7 @@ pub fn parse_mailbox(mut lines: &[u8]) -> Result<Mailbox> {
MailboxDatum::SubList { .. } | MailboxDatum::List { .. } => {} MailboxDatum::SubList { .. } | MailboxDatum::List { .. } => {}
} }
} }
IResult::Done(_, resp) => { Ok((_, resp)) => {
break Err(resp.into()); break Err(resp.into());
} }
_ => { _ => {
@ -225,7 +224,7 @@ pub fn parse_ids(lines: Vec<u8>) -> Result<HashSet<u32>> {
let mut ids = HashSet::new(); let mut ids = HashSet::new();
loop { loop {
match imap_proto::parse_response(lines) { match imap_proto::parse_response(lines) {
IResult::Done(rest, Response::IDs(c)) => { Ok((rest, Response::IDs(c))) => {
lines = rest; lines = rest;
ids.extend(c); ids.extend(c);
@ -233,7 +232,7 @@ pub fn parse_ids(lines: Vec<u8>) -> Result<HashSet<u32>> {
break Ok(ids); break Ok(ids);
} }
} }
IResult::Done(_, resp) => { Ok((_, resp)) => {
break Err(resp.into()); break Err(resp.into());
} }
_ => { _ => {