use-toml 0.1.0

Lightweight TOML table and key-value helpers for RustUse
Documentation
use use_toml::{
    extract_toml_key_values, extract_toml_tables, is_toml_array_table, is_toml_table,
    looks_like_toml, quote_toml_string, split_toml_key_value, unquote_toml_string,
};

#[test]
fn detects_tables_and_array_tables() {
    assert!(is_toml_table("[package]"));
    assert!(is_toml_array_table("[[products]]"));
    assert!(looks_like_toml("[package]\nname = \"use-data\"\n"));
}

#[test]
fn splits_key_values() {
    assert_eq!(
        split_toml_key_value("name = \"use-data\" # comment"),
        Some(("name".to_string(), "\"use-data\"".to_string()))
    );
}

#[test]
fn extracts_tables_and_key_values() {
    let input = "[package]\nname = \"use-data\"\n[[products]]\nid = 1\n";
    let tables = extract_toml_tables(input);
    let values = extract_toml_key_values(input);

    assert_eq!(tables.len(), 2);
    assert_eq!(tables[0].line, 1);
    assert_eq!(tables[1].name, "products");
    assert_eq!(values[0].key, "name");
    assert_eq!(values[1].value, "1");
}

#[test]
fn quotes_and_unquotes_strings() {
    let quoted = quote_toml_string("line\nbreak");

    assert_eq!(quoted, "\"line\\nbreak\"");
    assert_eq!(
        unquote_toml_string(&quoted),
        Some("line\nbreak".to_string())
    );
    assert_eq!(
        unquote_toml_string("'literal'"),
        Some("literal".to_string())
    );
}

#[test]
fn handles_malformed_input_gracefully() {
    assert_eq!(split_toml_key_value("name"), None);
    assert_eq!(split_toml_key_value("key ="), None);
    assert_eq!(unquote_toml_string("\"unterminated"), None);
}

#[test]
fn handles_empty_input() {
    assert!(!looks_like_toml("   \n  # comment only"));
    assert!(extract_toml_tables("").is_empty());
    assert!(extract_toml_key_values("").is_empty());
}