Cleanup backend logic
parent
e503b0015a
commit
f2899b63d2
|
@ -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>());
|
||||
|
|
|
@ -40,4 +40,3 @@ pub use mailbox::*;
|
|||
pub use conf::*;
|
||||
|
||||
pub use mailbox::backends::{RefreshEventConsumer, Backends};
|
||||
pub use mailbox::backends::maildir::MaildirType;
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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(())
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue