1use serde::de::DeserializeOwned;
2use serde::Serialize;
3use serde_json::ser::PrettyFormatter;
4use std::error::Error;
5use std::fs;
6use std::fs::File;
7use std::path::Path;
8
9pub fn parse_json<T: DeserializeOwned>(path: &Path) -> Result<T, Box<dyn Error>> {
10 let json_data = fs::read_to_string(path).map_err(|e| Box::new(e) as Box<dyn Error>)?;
11
12 serde_json::from_str(&json_data).map_err(|e| Box::new(e) as Box<dyn Error>)
13}
14
15pub fn save_json<T: Serialize>(data: &T, path: &Path) -> Result<(), Box<dyn Error>> {
16 let file = File::create(path).map_err(|e| Box::new(e) as Box<dyn Error>)?;
17
18 let formatter = PrettyFormatter::with_indent(b" ");
19 let mut serializer = serde_json::Serializer::with_formatter(file, formatter);
20
21 data.serialize(&mut serializer)
22 .map_err(|e| Box::new(e) as Box<dyn Error>)?;
23
24 Ok(())
25}