use jimtcl::{Interp, JimError, JimObject, JimResult};
use serde::de::DeserializeSeed;
use serde_json::de::SliceRead;
pub(crate) fn parse_json<'jim>(
interp: &'jim Interp,
args: &[JimObject<'jim>],
) -> JimResult<JimObject<'jim>> {
if args.len() != 2 {
return Err(JimError::from("usage: parse json <json>"));
}
let data = args[1].as_bytes();
let read = SliceRead::new(data);
let mut de = serde_json::Deserializer::new(read);
let obj = interp.deserialize(&mut de).map_err(JimError::wrap)?;
Ok(obj)
}
pub(crate) fn parse_toml<'jim>(
interp: &'jim Interp,
args: &[JimObject<'jim>],
) -> JimResult<JimObject<'jim>> {
if args.len() != 2 {
return Err(JimError::from("usage: parse json <json>"));
}
let data = args[1].as_str()?;
let de = toml::Deserializer::parse(data).map_err(JimError::wrap)?;
let obj = interp.deserialize(de).map_err(JimError::wrap)?;
Ok(obj)
}
pub(crate) fn parse_yaml<'jim>(
interp: &'jim Interp,
args: &[JimObject<'jim>],
) -> JimResult<JimObject<'jim>> {
if args.len() != 2 {
return Err(JimError::from("usage: parse json <json>"));
}
let data = args[1].as_bytes();
let de = yaml_serde::Deserializer::from_slice(data);
let obj = interp.deserialize(de).map_err(JimError::wrap)?;
Ok(obj)
}