diff options
author | saber.wu <saber.wu@trantect.com> | 2018-06-14 17:09:43 +0800 |
---|---|---|
committer | saber.wu <saber.wu@trantect.com> | 2018-06-15 11:13:53 +0800 |
commit | ba6014543dfb4040921bb4809c6b293cfdf33c84 (patch) | |
tree | 523708c74eb31e5c861c7e474f092fafbd416879 /src/file/format/ini.rs | |
parent | e8fa9fee96185ddd18ebcef8a925c75459111edb (diff) |
support ini
Diffstat (limited to 'src/file/format/ini.rs')
-rw-r--r-- | src/file/format/ini.rs | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/file/format/ini.rs b/src/file/format/ini.rs new file mode 100644 index 0000000..b7c0f71 --- /dev/null +++ b/src/file/format/ini.rs @@ -0,0 +1,32 @@ +use source::Source; +use std::collections::HashMap; +use std::error::Error; +use value::{Value, ValueKind}; +use ini::Ini; + +pub fn parse( + uri: Option<&String>, + text: &str, +) -> Result<HashMap<String, Value>, Box<Error + Send + Sync>> { + let mut map: HashMap<String, Value> = HashMap::new(); + let i = Ini::load_from_str(text)?; + for (sec, prop) in i.iter() { + match *sec { + Some(ref sec) => { + let mut sec_map: HashMap<String, Value> = HashMap::new(); + for (k, v) in prop.iter() { + sec_map.insert(k.to_lowercase().clone(), + Value::new(uri, ValueKind::String(v.clone()))); + } + map.insert(sec.to_lowercase().clone(), Value::new(uri, ValueKind::Table(sec_map))); + } + None => { + for (k, v) in prop.iter() { + map.insert(k.to_lowercase().clone(), + Value::new(uri, ValueKind::String(v.clone()))); + } + } + } + } + Ok(map) +} |