From 79f99847fe4c3c1086ab6ce943969e01fd15b587 Mon Sep 17 00:00:00 2001 From: Jiayi Zhao Date: Mon, 5 Aug 2019 10:24:34 -0400 Subject: rework how mimetype configuration works - config file is now easier to visually parse and edit - fix opening files via open_with --- src/config/mimetype.rs | 68 +++++++++++++------------------------------------- src/config/theme.rs | 4 ++- 2 files changed, 20 insertions(+), 52 deletions(-) (limited to 'src/config') diff --git a/src/config/mimetype.rs b/src/config/mimetype.rs index 891a201..a557211 100644 --- a/src/config/mimetype.rs +++ b/src/config/mimetype.rs @@ -5,7 +5,7 @@ use std::io::Read; use std::path::PathBuf; use std::process; -use super::{parse_to_config_file, ConfigStructure, Flattenable}; +use super::{parse_config_file, ConfigStructure}; use crate::MIMETYPE_FILE; const fn default_false() -> bool { @@ -14,7 +14,6 @@ const fn default_false() -> bool { #[derive(Debug, Deserialize)] pub struct JoshutoMimetypeEntry { - pub id: usize, pub command: String, #[serde(default)] pub args: Vec, @@ -27,10 +26,6 @@ pub struct JoshutoMimetypeEntry { } impl JoshutoMimetypeEntry { - pub fn get_id(&self) -> usize { - self.id - } - pub fn get_command(&self) -> &str { &self.command } @@ -105,69 +100,40 @@ impl std::fmt::Display for JoshutoMimetypeEntry { } #[derive(Debug, Deserialize)] -pub struct JoshutoRawMimetype { - #[serde(default)] - entry: Vec, +pub struct JoshutoMimetype { + #[serde(default, skip)] + empty_vec: Vec, #[serde(default)] - extension: HashMap>, + pub extension: HashMap>, #[serde(default)] - mimetype: HashMap>, -} - -impl Flattenable for JoshutoRawMimetype { - fn flatten(self) -> JoshutoMimetype { - let mut entries = HashMap::with_capacity(self.entry.len()); - for entry in self.entry { - entries.insert(entry.get_id(), entry); - } - JoshutoMimetype { - entries, - extension: self.extension, - mimetype: self.mimetype, - } - } -} - -#[derive(Debug)] -pub struct JoshutoMimetype { - pub entries: HashMap, - pub extension: HashMap>, - pub mimetype: HashMap>, + pub mimetype: HashMap>, } impl JoshutoMimetype { - pub fn get_entries_for_ext(&self, extension: &str) -> Vec<&JoshutoMimetypeEntry> { - Self::get_entries(&self.extension, &self.entries, extension) - } - pub fn get_entries_for_mimetype(&self, mimetype: &str) -> Vec<&JoshutoMimetypeEntry> { - Self::get_entries(&self.mimetype, &self.entries, mimetype) + pub fn get_entries_for_ext(&self, extension: &str) -> &[JoshutoMimetypeEntry] { + match self.extension.get(extension) { + Some(s) => s, + None => &self.empty_vec, + } } - fn get_entries<'a>( - map: &HashMap>, - entry_map: &'a HashMap, - key: &str, - ) -> Vec<&'a JoshutoMimetypeEntry> { - match map.get(key) { - Some(entry_ids) => entry_ids - .iter() - .filter_map(|id| entry_map.get(id)) - .collect(), - None => Vec::new(), + pub fn get_entries_for_mimetype(&self, mimetype: &str) -> &[JoshutoMimetypeEntry] { + match self.mimetype.get(mimetype) { + Some(s) => s, + None => &self.empty_vec, } } } impl ConfigStructure for JoshutoMimetype { fn get_config() -> Self { - parse_to_config_file::(MIMETYPE_FILE) - .unwrap_or_else(JoshutoMimetype::default) + parse_config_file::(MIMETYPE_FILE).unwrap_or_else(Self::default) } } impl std::default::Default for JoshutoMimetype { fn default() -> Self { JoshutoMimetype { - entries: HashMap::new(), + empty_vec: Vec::new(), mimetype: HashMap::new(), extension: HashMap::new(), } diff --git a/src/config/theme.rs b/src/config/theme.rs index ef5e9ba..2de2882 100644 --- a/src/config/theme.rs +++ b/src/config/theme.rs @@ -1,6 +1,8 @@ use serde_derive::Deserialize; use std::collections::HashMap; +use crate::THEME_FILE; + use super::{parse_config_file, ConfigStructure}; const fn default_zero() -> i16 { @@ -82,7 +84,7 @@ pub struct JoshutoTheme { impl ConfigStructure for JoshutoTheme { fn get_config() -> Self { - parse_config_file::(crate::THEME_FILE).unwrap_or_else(JoshutoTheme::default) + parse_config_file::(THEME_FILE).unwrap_or_else(Self::default) } } -- cgit v1.2.3