use cdumay_core::ErrorConverter;
pub struct JsonManager {
path: String,
}
impl crate::Manager for JsonManager {
fn new(path: String) -> JsonManager {
JsonManager { path }
}
fn path(&self) -> String {
self.path.clone()
}
fn read<R: std::io::Read, C: serde::de::DeserializeOwned>(
&self,
reader: R,
context: &std::collections::BTreeMap<String, serde_value::Value>,
) -> cdumay_core::Result<C> {
let mut ctx = context.clone();
ctx.insert("path".to_string(), serde_value::Value::String(self.path()));
cdumay_json::convert_json_result!(serde_json::from_reader(reader), ctx)
}
fn write<D: serde::Serialize, W: std::io::Write>(
&self,
writer: W,
data: D,
context: &std::collections::BTreeMap<String, serde_value::Value>,
) -> cdumay_core::Result<()> {
let mut ctx = context.clone();
ctx.insert("path".to_string(), serde_value::Value::String(self.path()));
cdumay_json::convert_json_result!(serde_json::to_writer_pretty(writer, &data), ctx)
}
fn read_str<C: serde::de::DeserializeOwned>(
content: &str,
context: &std::collections::BTreeMap<String, serde_value::Value>,
) -> cdumay_core::Result<C> {
cdumay_json::convert_json_result!(serde_json::from_str(content), context.clone())
}
}