1use crate::base::sample;
4use crate::locale::fetch_locale;
5
6pub fn alignment() -> String {
8 fetch_locale("dnd.alignment", "en")
9 .map(|v| sample(&v))
10 .unwrap_or_else(|| "Lawful Good".to_string())
11}
12
13pub fn background() -> String {
15 fetch_locale("dnd.background", "en")
16 .map(|v| sample(&v))
17 .unwrap_or_else(|| "Acolyte".to_string())
18}
19
20pub fn city() -> String {
22 fetch_locale("dnd.cities", "en")
23 .map(|v| sample(&v))
24 .unwrap_or_else(|| "Waterdeep".to_string())
25}
26
27pub fn klass() -> String {
29 fetch_locale("dnd.klasses", "en")
30 .map(|v| sample(&v))
31 .unwrap_or_else(|| "Fighter".to_string())
32}
33
34pub fn language() -> String {
36 fetch_locale("dnd.languages", "en")
37 .map(|v| sample(&v))
38 .unwrap_or_else(|| "Common".to_string())
39}
40
41pub fn monster() -> String {
43 fetch_locale("dnd.monsters", "en")
44 .map(|v| sample(&v))
45 .unwrap_or_else(|| "Beholder".to_string())
46}
47
48pub fn race() -> String {
50 fetch_locale("dnd.races", "en")
51 .map(|v| sample(&v))
52 .unwrap_or_else(|| "Human".to_string())
53}
54
55pub fn melee_weapon() -> String {
57 fetch_locale("dnd.melee_weapons", "en")
58 .map(|v| sample(&v))
59 .unwrap_or_else(|| "Longsword".to_string())
60}
61
62pub fn ranged_weapon() -> String {
64 fetch_locale("dnd.ranged_weapons", "en")
65 .map(|v| sample(&v))
66 .unwrap_or_else(|| "Longbow".to_string())
67}
68
69#[cfg(test)]
70mod tests {
71 use super::*;
72
73 #[test]
74 fn test_dnd_generation() {
75 assert!(!alignment().is_empty());
76 assert!(!background().is_empty());
77 assert!(!city().is_empty());
78 assert!(!klass().is_empty());
79 assert!(!language().is_empty());
80 assert!(!monster().is_empty());
81 assert!(!race().is_empty());
82 assert!(!melee_weapon().is_empty());
83 assert!(!ranged_weapon().is_empty());
84 }
85}