tablo-macros 0.6.0

Procedural macros for Tablo.
Documentation
use super::{expand_checked, sentence_case, snake_case};

fn refusal(source: &str) -> String {
    let input: syn::DeriveInput = syn::parse_str(source).expect("the derive input parses");
    match expand_checked(&input) {
        Ok(_) => String::from("<accepted>"),
        Err(error) => error.to_string(),
    }
}

#[test]
fn two_variants_sharing_a_value_or_a_label_are_refused() {
    let message = refusal(r#"enum S { A, #[option(value = "a")] B }"#);
    assert!(message.contains("both store"), "{message}");
    let message = refusal(r#"enum S { A, #[option(label = "A")] B }"#);
    assert!(message.contains("both read as"), "{message}");
}

#[test]
fn a_variant_stores_its_snake_case_name_and_reads_in_sentence_case() {
    assert_eq!(snake_case("Draft"), "draft");
    assert_eq!(snake_case("PublishedLate"), "published_late");
    assert_eq!(sentence_case("published_late"), "Published late");
}