twas 1.1.0

A text substitution application for using random look-up tables to generate text in a manner similar to the Mad Libs game.
Documentation
use rand::prelude::*;
use twas;

const CULTURE_BY_REGION_YAML: &str = r#"
any:
  - iltanno
"#;

const SPECIES_BY_CULTURE_YAML: &str = r#"
iltanno:
  human: 70
"#;

const GENDER_BY_SPECIES_YAML: &str = r#"
default:
  female: 1
human:
  - "${gender-by-species/default}"
"#;

const NAME_BY_CULTURE_YAML: &str = r#"
iltanno:
  female:
    - "${names/iltanno/female} ${names/iltanno/family}"
"#;

const NAMES_ILTANNO_CSV: &str = r#"family,female
Campos,Lisa
"#;

fn load_data(seed: u64) -> twas::Interpreter<impl RngExt> {
	let mut interp = twas::Interpreter::from_seed(seed);
	interp
		.load_yaml_str("culture-by-region", CULTURE_BY_REGION_YAML)
		.unwrap();
	interp
		.load_yaml_str("species-by-culture", SPECIES_BY_CULTURE_YAML)
		.unwrap();
	interp
		.load_yaml_str("gender-by-species", GENDER_BY_SPECIES_YAML)
		.unwrap();
	interp
		.load_yaml_str("name-by-culture", NAME_BY_CULTURE_YAML)
		.unwrap();
	interp
		.load_csv_str("names/iltanno", NAMES_ILTANNO_CSV)
		.unwrap();
	interp
}

#[test]
fn test_nested_reference() {
	let mut interpreter = load_data(12345);
	let test_str = r#"${{id: culture-by-region/any, ref: culture, hidden: true}}${{id: "species-by-culture/$culture", ref: species, hidden: true}}${{id: "gender-by-species/$species", ref: gender, hidden: true}}A ${@gender} ${{id: "@culture", case: title}} ${{id: "@species", case: title}} named ${{id: "name-by-culture/$culture/$gender"}}."#;
	eprintln!("       test_str: {}", test_str);
	let expected_output = "A female Iltanno Human named Lisa Campos.";
	eprintln!("expected_output: {}", expected_output);
	eprint!("  actual_output: ");
	let actual_output = interpreter.eval(test_str).unwrap();
	eprintln!("{}", actual_output);
	assert_eq!(expected_output, actual_output);
}