Adding errors for parsing problems
This commit is contained in:
parent
6992615921
commit
378b4bbb96
2 changed files with 38 additions and 5 deletions
36
src/error.rs
36
src/error.rs
|
|
@ -18,6 +18,8 @@ pub enum Error {
|
|||
BadResponse(Vec<String>),
|
||||
/// A NO response from the IMAP server.
|
||||
NoResponse(Vec<String>),
|
||||
// Error parsing a server response.
|
||||
Parse(ParseError)
|
||||
}
|
||||
|
||||
impl From<IoError> for Error {
|
||||
|
|
@ -47,8 +49,9 @@ impl StdError for Error {
|
|||
match *self {
|
||||
Error::Io(ref e) => e.description(),
|
||||
Error::Ssl(ref e) => e.description(),
|
||||
Error::Parse(ref e) => e.description(),
|
||||
Error::BadResponse(_) => "Bad Response",
|
||||
Error::NoResponse(_) => "No Response"
|
||||
Error::NoResponse(_) => "No Response",
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -60,3 +63,34 @@ impl StdError for Error {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub enum ParseError {
|
||||
// Indicates an error parsing the status response. Such as OK, NO, and BAD.
|
||||
StatusResponse(Vec<String>),
|
||||
// Error parsing the cabability response.
|
||||
Capability(Vec<String>)
|
||||
}
|
||||
|
||||
impl fmt::Display for ParseError {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
match *self {
|
||||
ref e => f.write_str(e.description()),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl StdError for ParseError {
|
||||
fn description(&self) -> &str {
|
||||
match *self {
|
||||
ParseError::StatusResponse(_) => "Unable to parse status response",
|
||||
ParseError::Capability(_) => "Unable to parse capability response"
|
||||
}
|
||||
}
|
||||
|
||||
fn cause(&self) -> Option<&StdError> {
|
||||
match *self {
|
||||
_ => None
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,7 @@
|
|||
use std::io::{self};
|
||||
use regex::Regex;
|
||||
|
||||
use super::mailbox::Mailbox;
|
||||
use super::error::{Error, Result};
|
||||
use super::error::{Error, ParseError, Result};
|
||||
|
||||
pub fn parse_capability(lines: Vec<String>) -> Result<Vec<String>> {
|
||||
let capability_regex = Regex::new(r"^\* CAPABILITY (.*)\r\n").unwrap();
|
||||
|
|
@ -21,7 +20,7 @@ pub fn parse_capability(lines: Vec<String>) -> Result<Vec<String>> {
|
|||
}
|
||||
}
|
||||
|
||||
Err(Error::Io(io::Error::new(io::ErrorKind::Other, "Error parsing capabilities response")))
|
||||
Err(Error::Parse(ParseError::Capability(lines)))
|
||||
}
|
||||
|
||||
pub fn parse_response_ok(lines: Vec<String>) -> Result<()> {
|
||||
|
|
@ -35,7 +34,7 @@ pub fn parse_response_ok(lines: Vec<String>) -> Result<()> {
|
|||
}
|
||||
}
|
||||
|
||||
Err(Error::Io(io::Error::new(io::ErrorKind::Other, format!("Invalid Response: {}", last_line).to_string())))
|
||||
Err(Error::Parse(ParseError::StatusResponse(lines.clone())))
|
||||
}
|
||||
|
||||
pub fn parse_select_or_examine(lines: Vec<String>) -> Result<Mailbox> {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue