use std::fs::File;
use jimtcl::{Interp, JimError, JimObject, JimResult, args::ProcArgParser};
use serde::de::DeserializeSeed;
pub(crate) fn parse_yaml<'jim>(
interp: &'jim Interp,
args: &[JimObject<'jim>],
) -> JimResult<JimObject<'jim>> {
let mut parser = ProcArgParser::new();
parser.add_flag("-file");
parser.add_required_arg("input");
let args = parser.parse(interp, args)?;
let src = args.require_arg("input")?;
let de = if args.get_flag("-file") {
src.require_untainted("path")?;
let open = File::open(src.as_str()?)?;
serde_yaml_ng::Deserializer::from_reader(open)
} else {
let data = src.as_bytes();
serde_yaml_ng::Deserializer::from_slice(data)
};
let obj = interp.deserialize(de).map_err(JimError::wrap)?;
Ok(obj)
}