plugins: HashMap<String, SectionConfigPlugin>,
id_schema: Arc<Schema>,
- parse_section_header: fn(&str) -> Option<(String, String)>,
- parse_section_content: fn(&str) -> Option<(String, String)>,
+ parse_section_header: fn(&str) -> Option<(String, String)>,
+ parse_section_content: fn(&str) -> Option<(String, String)>,
}
enum ParseState<'a> {
self.plugins.insert(plugin.type_name.clone(), plugin);
}
- pub fn parse(&self, filename: &str, raw: &str) -> Result<(), Error> {
+ pub fn parse(&self, filename: &str, raw: &str) -> Result<Value, Error> {
let mut line_no = 0;
Ok(())
};
+ let mut result = json!({
+ "ids": {},
+ "order": {}
+ });
+
+ let mut create_section = |section_id, config| {
+ result[section_id] = config;
+ };
+
for line in raw.lines() {
line_no += 1;
if let Err(err) = test_required_properties(config, &plugin.properties) {
bail!("file '{}' line {} - {}", filename, line_no, err.to_string());
}
+ create_section(section_id.clone(), config.clone());
state = ParseState::BeforeHeader;
continue;
}
if let Err(err) = test_required_properties(config, &plugin.properties) {
bail!("file '{}' line {} - {}", filename, line_no, err.to_string());
}
+ create_section(section_id.clone(), config.clone());
}
- Ok(())
+ Ok(result)
}
pub fn default_parse_section_content(line: &str) -> Option<(String, String)> {