use crate::{
parsers::{FileParserBuilder, Load},
AnyResult, Case, Value,
};
use std::{
borrow::Cow,
io::{Error as IoError, Read},
};
#[non_exhaustive]
#[derive(thiserror::Error, Debug)]
pub enum Error {
#[error("${1}")]
IoError(#[source] IoError, Cow<'static, str>),
#[error("Failed parse JSON5")]
ParseJson5(#[source] json5::Error),
}
pub type ParserBuilder = FileParserBuilder<LoadJson>;
#[derive(Clone, Default)]
pub struct LoadJson;
impl Case for LoadJson {}
impl Load for LoadJson {
#[inline]
fn load(&mut self, mut reader: impl Read) -> AnyResult<Value> {
let mut data = String::new();
reader
.read_to_string(&mut data)
.map_err(|e| Error::IoError(e, "Failed read data to buffer".into()))?;
Ok(json5::from_str(&data).map_err(Error::ParseJson5)?)
}
}