// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

//! Useful utilities for Serde JSON deserialization.

use {
    serde::de::DeserializeOwned,
    std::{
        fs,
        path::{Path, PathBuf},
    },
    thiserror::Error,
};

/// Loads and deserializes a JSON-serialized value of type `T` from a file path.
pub fn load_from_path<T: DeserializeOwned, P: AsRef<Path>>(path: P) -> Result<T, LoadError> {
    let path = path.as_ref();
    let contents = fs::read_to_string(path)
        .map_err(|e| LoadError::Io { path: path.into(), error: e.into() })?;
    serde_json5::from_str(&contents)
        .map_err(|e| LoadError::Parse { path: path.into(), error: e.into() })
}

/// Serde JSON load/deserialization errors.
#[derive(Debug, Error)]
pub enum LoadError {
    #[error("File {:?} failed to load: {:?}", path, error)]
    Io {
        path: PathBuf,
        #[source]
        error: anyhow::Error,
    },

    #[error("File {:?} failed to parse: {:?}", path, error)]
    Parse {
        path: PathBuf,
        #[source]
        error: anyhow::Error,
    },
}
