Cleanup backend logic

master
Manos Pitsidianakis 2017-09-30 20:53:14 +03:00
parent e503b0015a
commit f2899b63d2
Signed by: Manos Pitsidianakis
GPG Key ID: 73627C2F690DF710
4 changed files with 15 additions and 22 deletions

View File

@ -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<ThreadEvent>, Receiver<ThreadEvent>) =
sync_channel(::std::mem::size_of::<ThreadEvent>());

View File

@ -40,4 +40,3 @@ pub use mailbox::*;
pub use conf::*;
pub use mailbox::backends::{RefreshEventConsumer, Backends};
pub use mailbox::backends::maildir::MaildirType;

View File

@ -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,

View File

@ -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<std::string::String, Box<Fn() -> Box<MailBackend>>>,
}
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<Box<MailBackend>> {
pub fn get(&self, key: &str) -> Box<MailBackend> {
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<Fn() -> Box<MailBackend>>) -> Result<()> {
pub fn register(&mut self, key: String, backend: Box<Fn() -> Box<MailBackend>>) -> () {
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(())
}
}