grue 0.1.0

Various tools and algorithms for building role-playing and adventure games
Documentation
use grue::generation::markov::*;
use heck::TitleCase;

pub fn get_markov_data() -> MarkovDataGroup {
	let defaults = include_str!("../data/markov_chain.toml");
	match toml::from_str(defaults) {
		Ok(result) => result,
		Err(err) => {
			println!("failed to load default Markov data: {:?}", err);
			MarkovDataGroup {
				..Default::default()
			}
		}
	}
}

fn main() {
	let result_count = 5;

	let markov_order = 3;
	let markov_data = get_markov_data();

	let config = MarkovGenerateConfig {
		min_len: 4,
		max_len: 13,
		starts_with: "",
		ends_with: "",
		contains: "",
		does_not_contain: "",
		allow_duplicates: false,
		max_attempts: 500,
	};

	for dataset in &markov_data.datasets {
		println!("\nData Set: {}", dataset.name);

		let values: Vec<&str> = dataset.values.iter().map(|x| x.as_ref()).collect();

		let mut markov_gen = MarkovNameGenerator::new(markov_order);
		markov_gen.build_chain(&values);

		for x in 0..result_count {
			let result = markov_gen.generate_word(&config);
			println!("result [{}] is {}", x, result.to_title_case());
		}
	}
}