use imap_codec::{
decode::{Decoder, ResponseDecodeError},
ResponseCodec,
};
#[path = "common/common.rs"]
mod common;
use common::read_more;
use crate::common::Role;
const WELCOME: &str = r#"# Parsing of IMAP responses
"S:" denotes the server, and
".." denotes the continuation of an (incomplete) response, e.g., due to the use of an IMAP literal.
Note: "\n" will be automatically replaced by "\r\n".
--------------------------------------------------------------------------------------------------
Enter IMAP response (or "exit").
"#;
fn main() {
println!("{}", WELCOME);
let mut buffer = Vec::new();
loop {
match ResponseCodec::default().decode(&buffer) {
Ok((remaining, response)) => {
println!("{:#?}", response);
buffer = remaining.to_vec();
}
Err(ResponseDecodeError::Incomplete) => {
read_more(&mut buffer, Role::Server);
}
Err(ResponseDecodeError::LiteralFound { .. }) => {
read_more(&mut buffer, Role::Server);
}
Err(ResponseDecodeError::Failed) => {
println!("Error parsing response.");
println!("Clearing buffer.");
buffer.clear();
}
}
}
}