src/tools.rs: file_get_json() - add new default parameter
This commit is contained in:
parent
79ad7b7ec2
commit
49cf9f3d0b
@ -43,7 +43,7 @@ fn record_repository(repo: &BackupRepository) {
|
||||
_ => return,
|
||||
};
|
||||
|
||||
let mut data = tools::file_get_json(&path).unwrap_or(json!({}));
|
||||
let mut data = tools::file_get_json(&path, None).unwrap_or(json!({}));
|
||||
|
||||
let repo = repo.to_string();
|
||||
|
||||
@ -93,7 +93,7 @@ fn complete_repository(_arg: &str, _param: &HashMap<String, String>) -> Vec<Stri
|
||||
_ => return result,
|
||||
};
|
||||
|
||||
let data = tools::file_get_json(&path).unwrap_or(json!({}));
|
||||
let data = tools::file_get_json(&path, None).unwrap_or(json!({}));
|
||||
|
||||
if let Some(map) = data.as_object() {
|
||||
for (repo, _count) in map {
|
||||
|
@ -33,7 +33,7 @@ fn store_ticket_info(server: &str, username: &str, ticket: &str, token: &str) ->
|
||||
|
||||
let mode = nix::sys::stat::Mode::from_bits_truncate(0o0600);
|
||||
|
||||
let mut data = tools::file_get_json(&path).unwrap_or(json!({}));
|
||||
let mut data = tools::file_get_json(&path, Some(json!({})))?;
|
||||
|
||||
let now = Utc::now().timestamp();
|
||||
|
||||
@ -72,7 +72,10 @@ fn load_ticket_info(server: &str, username: &str) -> Option<(String, String)> {
|
||||
_ => return None,
|
||||
};
|
||||
|
||||
let data = tools::file_get_json(&path).unwrap_or(json!({}));
|
||||
let data = match tools::file_get_json(&path, None) {
|
||||
Ok(v) => v,
|
||||
_ => return None,
|
||||
};
|
||||
|
||||
let now = Utc::now().timestamp();
|
||||
|
||||
|
16
src/tools.rs
16
src/tools.rs
@ -126,17 +126,27 @@ pub fn file_get_contents<P: AsRef<Path>>(path: P) -> Result<Vec<u8>, Error> {
|
||||
}).map_err(|err| format_err!("unable to read {:?} - {}", path, err))
|
||||
}
|
||||
|
||||
pub fn file_get_json<P: AsRef<Path>>(path: P) -> Result<Value, Error> {
|
||||
pub fn file_get_json<P: AsRef<Path>>(path: P, default: Option<Value>) -> Result<Value, Error> {
|
||||
|
||||
let path = path.as_ref();
|
||||
|
||||
let raw = file_get_contents(path)?;
|
||||
let raw = match std::fs::read(path) {
|
||||
Ok(v) => v,
|
||||
Err(err) => {
|
||||
if err.kind() == std::io::ErrorKind::NotFound {
|
||||
if let Some(v) = default {
|
||||
return Ok(v);
|
||||
}
|
||||
}
|
||||
bail!("unable to read json {:?} - {}", path, err);
|
||||
}
|
||||
};
|
||||
|
||||
try_block!({
|
||||
let data = String::from_utf8(raw)?;
|
||||
let json = serde_json::from_str(&data)?;
|
||||
Ok(json)
|
||||
}).map_err(|err: Error| format_err!("unable to read json from {:?} - {}", path, err))
|
||||
}).map_err(|err: Error| format_err!("unable to parse json from {:?} - {}", path, err))
|
||||
}
|
||||
|
||||
/// Atomically write a file. We first create a temporary file, which
|
||||
|
Loading…
Reference in New Issue
Block a user