tomli 0.5.0

A simple CLI for quering and editing TOML files
use toml_edit::DocumentMut;

use crate::{errors::TomliError, parser, query, set};

pub fn exec(
    source: &DocumentMut,
    source_query: &str,
    destination: &mut DocumentMut,
    destination_query: &str,
    dotted_key: bool,
) -> Result<String, TomliError> {
    let item_to_copy = if source_query.is_empty() || source_query == "." {
        source.as_item()
    } else {
        query::parse_toml_path(parser::evaluate(source_query)?, source.as_item())?
    };

    let item = set::parse_toml_path(
        parser::evaluate(destination_query)?,
        destination.as_item_mut(),
        dotted_key,
    )?;
    *item = item_to_copy.clone();

    Ok(destination.to_string())
}