use anyhow::anyhow;
use serde_json::Value;
use std::fs::File;
use std::path::Path;
#[derive(Debug, Clone)]
pub struct FileHandler {}
impl FileHandler {
pub fn load(path: &str) -> anyhow::Result<Value> {
let path = Path::new(path);
if !path.exists() {
return Err(anyhow!("FILE_NOT_EXISTS"));
}
if !path.is_file() {
return Err(anyhow!("NOT_A_FILE"));
}
let reader = File::options().read(true).open(path)?;
let data = serde_json::from_reader::<_, Value>(reader)?;
Ok(data)
}
}
#[test]
fn test_file_handler() {
let handler = FileHandler::load("storage/test-data/data.json");
assert!(handler.is_ok(), "{:#?}", handler.err());
let handler = FileHandler::load("storage/test-data/notexists.json");
assert!(handler.is_err());
let handler = FileHandler::load("storage/test-data");
assert!(handler.is_err());
}