Documentation
extern crate mailbox;
use mailbox::header;

use std::fs::File;
use std::env;

#[derive(Eq, PartialEq, Copy, Clone, Default, Debug)]
pub struct Status {
	pub total:    usize,
	pub seen:     usize,
	pub old:      usize,
	pub answered: usize,
	pub flagged:  usize,
	pub draft:    usize,
	pub deleted:  usize,
}

fn main() {
	let mut status = Status::default();

	for path in env::args().skip(1) {
		for mail in mailbox::read(File::open(path).unwrap()).body(false) {
			if let Ok(mail) = mail {
				let mut current = header::Status::empty();

				if let Some(Ok(s)) = mail.headers().get::<header::Status>() {
					current |= s;
				}

				if let Some(Ok(s)) = mail.headers().get_from::<header::Status, _>("X-Status") {
					current |= s;
				}

				status.total += 1;

				if current.contains(header::status::SEEN) {
					status.seen += 1;
				}

				if current.contains(header::status::OLD) {
					status.old += 1;
				}

				if current.contains(header::status::ANSWERED) {
					status.answered += 1;
				}

				if current.contains(header::status::FLAGGED) {
					status.flagged += 1;
				}

				if current.contains(header::status::DRAFT) {
					status.draft += 1;
				}

				if current.contains(header::status::DELETED) {
					status.deleted += 1;
				}
			}
		}
	}

	println!("{:#?}", status);
}