use jsonc_parser::{parse_to_value, JsonValue};
use crate::types::ErrBox;
use crate::utils;
pub struct ConfigFile {
pub binaries: Vec<utils::ChecksumUrl>,
}
pub fn read_config_file(file_text: &str) -> Result<ConfigFile, ErrBox> {
let value = match parse_to_value(file_text) {
Ok(value) => value,
Err(err) => {
return err!(
"Error parsing configuration file. {}",
err.get_message_with_range(file_text)
)
}
};
let mut root_object_node = match value {
Some(JsonValue::Object(obj)) => obj,
_ => return err!("Expected a root object in the json"),
};
let json_binaries = match root_object_node.take_array("binaries") {
Some(json_binaries) => json_binaries,
None => return err!("Expected to find a 'binaries' array."),
};
let mut binaries = Vec::new();
for value in json_binaries.into_iter() {
let url = match value {
JsonValue::String(text) => utils::parse_checksum_url(&text),
_ => return err!("Expected a string for all items in 'binaries' array."),
};
binaries.push(url);
}
Ok(ConfigFile { binaries })
}