guartcl 0.6.0-alpha1

Enhanced Jim Tcl.
Documentation
use std::{borrow::Cow, fs::read_to_string};

use jimtcl::{Interp, JimError, JimObject, JimResult, args::ProcArgParser};
use serde::de::DeserializeSeed;

pub(crate) fn parse_toml<'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 data: Cow<'_, str> = if args.get_flag("-file") {
        src.require_untainted("path")?;
        read_to_string(src.as_str()?)?.into()
    } else {
        src.as_str()?.into()
    };

    let de = toml::Deserializer::parse(&data).map_err(JimError::wrap)?;
    let obj = interp.deserialize(de).map_err(JimError::wrap)?;

    Ok(obj)
}