summaryrefslogtreecommitdiffstats
path: root/src/config.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/config.rs')
-rw-r--r--src/config.rs54
1 files changed, 38 insertions, 16 deletions
diff --git a/src/config.rs b/src/config.rs
index 635be32..c2199c4 100644
--- a/src/config.rs
+++ b/src/config.rs
@@ -21,19 +21,6 @@ pub struct LogItemDeser {
alias : String,
}
-impl LogItemDeser {
- pub fn file(&self) -> String {
- self.file.clone()
- }
- pub fn regex(&self) -> Result<Regex> {
- debug!("trying to parse regex `{}`", self.regex);
- Regex::new(self.regex.as_str()).chain_err(|| format!("failed to parse regex `{}`", self.regex))
- }
- pub fn alias(&self) -> String {
- self.alias.clone()
- }
-}
-
/// Used for deserialization only
#[derive(Debug, Deserialize)]
pub struct ConfigDeser {
@@ -59,8 +46,8 @@ impl ConfigDeser {
}
}
- pub fn get_items(&self) -> Vec<LogItemDeser> {
- self.item.clone()
+ fn get_items(&self) -> &Vec<LogItemDeser> {
+ &self.item
}
}
@@ -75,10 +62,13 @@ pub struct LogItem {
}
impl LogItem {
+
fn from_log_item_deser(lid : LogItemDeser) -> Result<LogItem> {
debug!("trying to parse regex `{}`", lid.regex);
let l_regex = Regex::new(lid.regex.as_str())
.chain_err(|| format!("regex not parseable: '{}'", lid.regex))?;
+ // first capture is the whole match and nameless
+ // second capture is always the timestamp
let cnames : Vec<String> = l_regex
.capture_names()
.skip(2)
@@ -97,6 +87,18 @@ impl LogItem {
Ok(LogItem { file : lid.file, regex : l_regex, aliases : als })
}
+
+ pub fn file(&self) -> &String {
+ &self.file
+ }
+
+ pub fn regex(&self) -> &Regex {
+ &self.regex
+ }
+
+ pub fn aliases(&self) -> &Vec<String> {
+ &self.aliases
+ }
}
pub struct Config {
@@ -105,8 +107,28 @@ pub struct Config {
}
impl Config {
+
pub fn load(filename : String) -> Result<Self> {
- Err(ErrorKind::ConfigParseError(String::from("meh")).into())
+ let conf_deser = ConfigDeser::load(filename)?;
+ let mut l_items : Vec<LogItem> = Vec::new();
+ for lid in conf_deser.get_items() {
+ l_items.push(LogItem::from_log_item_deser((*lid).clone())?);
+ }
+ let mut all_als : Vec<String> = Vec::new();
+ for li in &l_items {
+ for als in li.aliases() {
+ all_als.push((*als).clone());
+ }
+ }
+ Ok(Config { items: l_items, all_aliases : all_als })
+ }
+
+ pub fn items(&self) -> &Vec<LogItem> {
+ &self.items
+ }
+
+ pub fn all_aliases(&self) -> &Vec<String> {
+ &self.all_aliases
}
}