Move to new nom + tokio-proto
This commit is contained in:
parent
e68d61a1e2
commit
5c91f4c1bb
3 changed files with 15 additions and 17 deletions
|
|
@ -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"
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
||||||
17
src/parse.rs
17
src/parse.rs
|
|
@ -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());
|
||||||
}
|
}
|
||||||
_ => {
|
_ => {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue