use crate::DaemonError;
use serde_json::{from_reader, json, Value};
use std::{
fs::{File, OpenOptions},
path::PathBuf,
str::FromStr,
};
pub fn write(filename: &String, chain_id: &String, network_id: &String, deploy_id: &String) {
let file_buf = PathBuf::from_str(filename).unwrap();
if let Some(parent) = file_buf.parent() {
let _ = std::fs::create_dir_all(parent);
}
let file = OpenOptions::new()
.create(true)
.read(true)
.write(true)
.truncate(false)
.open(filename.clone())
.unwrap();
let mut json: Value = if file.metadata().unwrap().len().eq(&0) {
json!({})
} else {
from_reader(file).unwrap()
};
if json.get(network_id).is_none() {
json[network_id] = json!({});
}
if json[network_id].get(chain_id).is_none() {
json[network_id][chain_id] = json!({
deploy_id: {},
"code_ids": {}
});
}
serde_json::to_writer_pretty(File::create(filename).unwrap(), &json).unwrap();
}
pub fn read(filename: &String) -> Result<Value, DaemonError> {
let file =
File::open(filename).unwrap_or_else(|_| panic!("File should be present at {}", filename));
let json: serde_json::Value = from_reader(file)?;
Ok(json)
}