Moving parse response ok to its own file
This commit is contained in:
parent
668f71d5e9
commit
829b7de542
3 changed files with 22 additions and 17 deletions
|
|
@ -4,6 +4,7 @@ use std::io::{Error, ErrorKind, Read, Result, Write};
|
||||||
use regex::Regex;
|
use regex::Regex;
|
||||||
|
|
||||||
use super::mailbox::Mailbox;
|
use super::mailbox::Mailbox;
|
||||||
|
use super::parse::parse_response_ok;
|
||||||
|
|
||||||
static TAG_PREFIX: &'static str = "a";
|
static TAG_PREFIX: &'static str = "a";
|
||||||
const INITIAL_TAG: u32 = 0;
|
const INITIAL_TAG: u32 = 0;
|
||||||
|
|
@ -81,7 +82,7 @@ impl<T: Read+Write> Client<T> {
|
||||||
let permanent_flags_regex = Regex::new(r"^\* OK \[PERMANENTFLAGS (.+)\]\r\n").unwrap();
|
let permanent_flags_regex = Regex::new(r"^\* OK \[PERMANENTFLAGS (.+)\]\r\n").unwrap();
|
||||||
|
|
||||||
//Check Ok
|
//Check Ok
|
||||||
match self.parse_response_ok(lines.clone()) {
|
match parse_response_ok(lines.clone()) {
|
||||||
Ok(_) => (),
|
Ok(_) => (),
|
||||||
Err(e) => return Err(e)
|
Err(e) => return Err(e)
|
||||||
};
|
};
|
||||||
|
|
@ -178,7 +179,7 @@ impl<T: Read+Write> Client<T> {
|
||||||
let capability_regex = Regex::new(r"^\* CAPABILITY (.*)\r\n").unwrap();
|
let capability_regex = Regex::new(r"^\* CAPABILITY (.*)\r\n").unwrap();
|
||||||
|
|
||||||
//Check Ok
|
//Check Ok
|
||||||
match self.parse_response_ok(lines.clone()) {
|
match parse_response_ok(lines.clone()) {
|
||||||
Ok(_) => (),
|
Ok(_) => (),
|
||||||
Err(e) => return Err(e)
|
Err(e) => return Err(e)
|
||||||
};
|
};
|
||||||
|
|
@ -218,7 +219,7 @@ impl<T: Read+Write> Client<T> {
|
||||||
|
|
||||||
pub fn run_command_and_check_ok(&mut self, command: &str) -> Result<()> {
|
pub fn run_command_and_check_ok(&mut self, command: &str) -> Result<()> {
|
||||||
match self.run_command(command) {
|
match self.run_command(command) {
|
||||||
Ok(lines) => self.parse_response_ok(lines),
|
Ok(lines) => parse_response_ok(lines),
|
||||||
Err(e) => Err(e)
|
Err(e) => Err(e)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -234,20 +235,6 @@ impl<T: Read+Write> Client<T> {
|
||||||
self.read_response()
|
self.read_response()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn parse_response_ok(&mut self, lines: Vec<String>) -> Result<()> {
|
|
||||||
let ok_regex = Regex::new(r"^([a-zA-Z0-9]+) ([a-zA-Z0-9]+)(.*)").unwrap();
|
|
||||||
let last_line = lines.last().unwrap();
|
|
||||||
|
|
||||||
for cap in ok_regex.captures_iter(last_line) {
|
|
||||||
let response_type = cap.at(2).unwrap_or("");
|
|
||||||
if response_type == "OK" {
|
|
||||||
return Ok(());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return Err(Error::new(ErrorKind::Other, format!("Invalid Response: {}", last_line).to_string()));
|
|
||||||
}
|
|
||||||
|
|
||||||
fn read_response(&mut self) -> Result<Vec<String>> {
|
fn read_response(&mut self) -> Result<Vec<String>> {
|
||||||
let mut found_tag_line = false;
|
let mut found_tag_line = false;
|
||||||
let start_str = format!("{}{} ", TAG_PREFIX, self.tag);
|
let start_str = format!("{}{} ", TAG_PREFIX, self.tag);
|
||||||
|
|
|
||||||
|
|
@ -9,5 +9,7 @@ extern crate regex;
|
||||||
pub mod client;
|
pub mod client;
|
||||||
pub mod mailbox;
|
pub mod mailbox;
|
||||||
|
|
||||||
|
mod parse;
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod mock_stream;
|
mod mock_stream;
|
||||||
|
|
|
||||||
16
src/parse.rs
Normal file
16
src/parse.rs
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
use std::io::{Error, ErrorKind, Result};
|
||||||
|
use regex::Regex;
|
||||||
|
|
||||||
|
pub fn parse_response_ok(lines: Vec<String>) -> Result<()> {
|
||||||
|
let ok_regex = Regex::new(r"^([a-zA-Z0-9]+) ([a-zA-Z0-9]+)(.*)").unwrap();
|
||||||
|
let last_line = lines.last().unwrap();
|
||||||
|
|
||||||
|
for cap in ok_regex.captures_iter(last_line) {
|
||||||
|
let response_type = cap.at(2).unwrap_or("");
|
||||||
|
if response_type == "OK" {
|
||||||
|
return Ok(());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Err(Error::new(ErrorKind::Other, format!("Invalid Response: {}", last_line).to_string()));
|
||||||
|
}
|
||||||
Loading…
Add table
Reference in a new issue