diff --git a/src/bin.rs b/src/bin.rs index 3fd83050..9d8cbc61 100644 --- a/src/bin.rs +++ b/src/bin.rs @@ -36,13 +36,7 @@ fn main() { ncurses::setlocale(locale_conf, "en_US.UTF-8"); let set = Settings::new(); let ui = ui::TUI::initialize(); - let mut backends = Backends::new(); - backends - .register( - "maildir".to_string(), - Box::new(|| Box::new(MaildirType::new(""))), - ) - .unwrap(); + let backends = Backends::new(); let (sender, receiver): (SyncSender, Receiver) = sync_channel(::std::mem::size_of::()); diff --git a/src/lib.rs b/src/lib.rs index 83461738..1e61980e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -40,4 +40,3 @@ pub use mailbox::*; pub use conf::*; pub use mailbox::backends::{RefreshEventConsumer, Backends}; -pub use mailbox::backends::maildir::MaildirType; diff --git a/src/mailbox/accounts.rs b/src/mailbox/accounts.rs index 54f382c2..324175a8 100644 --- a/src/mailbox/accounts.rs +++ b/src/mailbox/accounts.rs @@ -46,7 +46,7 @@ impl Account { for _ in 0..settings.folders.len() { folders.push(None); } - let backend = backends.get(settings.get_format()).unwrap(); + let backend = backends.get(settings.get_format()); Account { name: name, folders: folders, diff --git a/src/mailbox/backends/mod.rs b/src/mailbox/backends/mod.rs index c87494a3..f39d48f4 100644 --- a/src/mailbox/backends/mod.rs +++ b/src/mailbox/backends/mod.rs @@ -21,40 +21,40 @@ pub mod maildir; use mailbox::email::{Envelope, Flag}; -use error::{MeliError, Result}; +use mailbox::backends::maildir::MaildirType; +use error::Result; use std::fmt; extern crate fnv; use self::fnv::FnvHashMap; use std; + +/// A hashmap containing all available mail backends. pub struct Backends { map: FnvHashMap Box>>, } impl Backends { pub fn new() -> Self { - Backends { + let mut b = Backends { map: FnvHashMap::with_capacity_and_hasher(1, Default::default()) - } + }; + b.register("maildir".to_string(), Box::new(|| Box::new(MaildirType::new("")))); + b } - pub fn get(&self, key: &str) -> Result> { + pub fn get(&self, key: &str) -> Box { if !self.map.contains_key(key) { - return Err(MeliError::new( - format!("{} is not a valid mail backend", key), - )); + panic!("{} is not a valid mail backend", key); } - Ok(self.map[key]()) + self.map[key]() } - pub fn register(&mut self, key: String, backend: Box Box>) -> Result<()> { + pub fn register(&mut self, key: String, backend: Box Box>) -> () { if self.map.contains_key(&key) { - return Err(MeliError::new( - format!("{} is an already registered backend", key), - )); + panic!("{} is an already registered backend", key); } self.map.insert(key, backend); - Ok(()) } }