mod indent;
use std::{fs::File, io::BufReader};
pub use anyhow::Result;
use indent::Indent;
use serde::Serialize;
pub use serde_json::Value;
use serde_json::{from_reader, ser::PrettyFormatter, to_writer_pretty, Serializer};
mod tests;
#[allow(dead_code)]
pub fn get_keys(json: Value) -> Vec<String> {
let mut keys = Vec::new();
if let Value::Object(map) = json {
for key in map.keys() {
keys.push(key.to_owned());
}
}
keys
}
#[allow(dead_code)]
pub fn get_values(json: Value) -> Vec<Value> {
let mut values = Vec::new();
if let Value::Object(map) = json {
for value in map.values() {
values.push(value.to_owned());
}
}
values
}
#[allow(dead_code)]
pub fn get_map(json: Value) -> Vec<(String, Value)> {
let mut map = Vec::new();
if let Value::Object(m) = json {
for (key, value) in m {
map.push((key.to_owned(), value.to_owned()));
}
}
map
}
#[allow(dead_code)]
pub fn read_json(path: &str) -> Result<Value> {
let json_reader = BufReader::new(File::open(path)?);
Ok(from_reader(json_reader)?)
}
#[allow(dead_code)]
pub fn write_json(path: &str, json: &Value, indent: Indent) -> Result<()> {
let file = File::create(path)?;
let indent = indent.to_indent().to_string();
let fmt = PrettyFormatter::with_indent(indent.as_bytes());
let mut buf = Vec::new();
let mut ser = Serializer::with_formatter(&mut buf, fmt);
json.serialize(&mut ser)?;
Ok(to_writer_pretty(file, &json)?)
}