use crate::{
objects::{self, Contributor},
Result,
};
use serde::Deserialize;
use std::collections::BTreeMap;
use std::fs::File;
use std::path;
use tracing::info;
#[derive(Deserialize, Debug)]
struct ConfigDataset {
dataset_id: String,
}
#[derive(Deserialize, Debug)]
struct Config {
contributor: objects::Contributor,
dataset: ConfigDataset,
feed_infos: Option<BTreeMap<String, String>>,
}
pub fn read_config<P: AsRef<path::Path>>(
config_path: Option<P>,
) -> Result<(
objects::Contributor,
objects::Dataset,
BTreeMap<String, String>,
)> {
let contributor;
let dataset;
let mut feed_infos = BTreeMap::default();
if let Some(config_path) = config_path {
let config_path = config_path.as_ref();
info!("Reading dataset and contributor from {:?}", config_path);
let json_config_file = File::open(config_path)?;
let config: Config = serde_json::from_reader(json_config_file)?;
contributor = config.contributor;
dataset = objects::Dataset::new(config.dataset.dataset_id, contributor.id.clone());
if let Some(config_feed_infos) = config.feed_infos {
feed_infos = config_feed_infos;
}
} else {
contributor = Contributor::default();
dataset = objects::Dataset::default();
}
Ok((contributor, dataset, feed_infos))
}