json_walk 0.1.0

Access values in your JSON data using string paths (e.g. "result.item[0].value").
Documentation
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());
}