Cleanup backend logic

embed
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"); ncurses::setlocale(locale_conf, "en_US.UTF-8");
let set = Settings::new(); let set = Settings::new();
let ui = ui::TUI::initialize(); let ui = ui::TUI::initialize();
let mut backends = Backends::new(); let backends = Backends::new();
backends
.register(
"maildir".to_string(),
Box::new(|| Box::new(MaildirType::new(""))),
)
.unwrap();
let (sender, receiver): (SyncSender<ThreadEvent>, Receiver<ThreadEvent>) = let (sender, receiver): (SyncSender<ThreadEvent>, Receiver<ThreadEvent>) =
sync_channel(::std::mem::size_of::<ThreadEvent>()); sync_channel(::std::mem::size_of::<ThreadEvent>());

View File

@ -40,4 +40,3 @@ pub use mailbox::*;
pub use conf::*; pub use conf::*;
pub use mailbox::backends::{RefreshEventConsumer, Backends}; 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() { for _ in 0..settings.folders.len() {
folders.push(None); folders.push(None);
} }
let backend = backends.get(settings.get_format()).unwrap(); let backend = backends.get(settings.get_format());
Account { Account {
name: name, name: name,
folders: folders, folders: folders,

View File

@ -21,40 +21,40 @@
pub mod maildir; pub mod maildir;
use mailbox::email::{Envelope, Flag}; use mailbox::email::{Envelope, Flag};
use error::{MeliError, Result}; use mailbox::backends::maildir::MaildirType;
use error::Result;
use std::fmt; use std::fmt;
extern crate fnv; extern crate fnv;
use self::fnv::FnvHashMap; use self::fnv::FnvHashMap;
use std; use std;
/// A hashmap containing all available mail backends.
pub struct Backends { pub struct Backends {
map: FnvHashMap<std::string::String, Box<Fn() -> Box<MailBackend>>>, map: FnvHashMap<std::string::String, Box<Fn() -> Box<MailBackend>>>,
} }
impl Backends { impl Backends {
pub fn new() -> Self { pub fn new() -> Self {
Backends { let mut b = Backends {
map: FnvHashMap::with_capacity_and_hasher(1, Default::default()) 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) { if !self.map.contains_key(key) {
return Err(MeliError::new( panic!("{} is not a valid mail backend", key);
format!("{} 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) { if self.map.contains_key(&key) {
return Err(MeliError::new( panic!("{} is an already registered backend", key);
format!("{} is an already registered backend", key),
));
} }
self.map.insert(key, backend); self.map.insert(key, backend);
Ok(())
} }
} }