use crate::{Result, Value};

#[cfg(feature = "json")]
pub fn parse_json(json: &str) -> Result<Value> {
    let data = serde_json::from_str::<serde_json::Value>(json);
    Ok(data?.into())
}

#[cfg(feature = "toml")]
pub fn parse_toml(toml: &str) -> Result<Value> {
    let data = toml::from_str::<toml::Value>(toml);
    Ok(data?.into())
}

#[cfg(feature = "yaml")]
pub fn parse_yaml(yaml: &str) -> Result<Value> {
    let out = yaml_rust::YamlLoader::load_from_str(&yaml)?;
    let value = match out.len() {
        1 => Value::from(out[0].clone()),
        _ => Value::from(out),
    };
    Ok(value)
}
