Skip to content

Commit

Permalink
fix(conf): fix the ambigity when we get a list of confs
Browse files Browse the repository at this point in the history
Signed-off-by: Vincenzo Palazzo <[email protected]>
  • Loading branch information
vincenzopalazzo committed May 23, 2023
1 parent af940d0 commit d090c23
Showing 1 changed file with 34 additions and 3 deletions.
37 changes: 34 additions & 3 deletions conf/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -78,17 +78,48 @@ impl CLNConf {
Ok(())
}

pub fn get_conf(&self, key: &str) -> Option<Vec<String>> {
/// Get a unique field with the specified key, if there are multiple definition
/// the function return an error.
///
/// In the case of multiple definition of the same key you would like to use `get_confs`.
pub fn get_conf(&self, key: &str) -> Result<Option<String>, ParsingError> {
let mut results = vec![];
if let Some(fields) = self.fields.get(key) {
results.append(&mut fields.clone());
}
for include in &self.includes {
let fields = include.get_confs(key);
if !fields.is_empty() {
results.append(&mut fields.clone());
}
}
if results.is_empty() {
return Ok(None);
}

if results.len() > 1 {
return Err(ParsingError {
core: 1,
cause: "mutiple field with the `{key}`".to_owned(),
});
}
Ok(Some(results.first().unwrap().clone()))
}

/// Return a list of values with the specified key, if no
/// item is found, return an empity vector.
pub fn get_confs(&self, key: &str) -> Vec<String> {
let mut results = vec![];
if let Some(fields) = self.fields.get(key) {
results.append(&mut fields.clone());
}
for include in &self.includes {
if let Some(fields) = include.get_conf(key) {
let fields = include.get_confs(key);
if !fields.is_empty() {
results.append(&mut fields.clone());
}
}
Some(results)
results
}

pub fn add_subconf(&mut self, conf: CLNConf) -> Result<(), ParsingError> {
Expand Down

0 comments on commit d090c23

Please sign in to comment.