1use crate::base::sample;
4use crate::locale::fetch_locale;
5
6pub fn verb() -> String {
8 fetch_locale("verb.verbs", "en")
9 .map(|v| sample(&v))
10 .unwrap_or_else(|| sample(FALLBACK_VERBS).to_string())
11}
12
13pub fn past() -> String {
15 fetch_locale("verb.pasts", "en")
16 .map(|v| sample(&v))
17 .unwrap_or_else(|| sample(FALLBACK_PASTS).to_string())
18}
19
20pub fn ing_form() -> String {
22 fetch_locale("verb.ing_forms", "en")
23 .map(|v| sample(&v))
24 .unwrap_or_else(|| sample(FALLBACK_ING).to_string())
25}
26
27const FALLBACK_VERBS: &[&str] = &[
29 "run", "walk", "jump", "swim", "fly", "drive", "read", "write", "speak",
30 "listen", "eat", "drink", "sleep", "wake", "think", "feel", "know",
31 "understand", "learn", "teach", "create", "build", "destroy", "grow",
32 "shrink", "open", "close", "start", "stop", "begin", "end", "continue",
33];
34
35const FALLBACK_PASTS: &[&str] = &[
36 "ran", "walked", "jumped", "swam", "flew", "drove", "read", "wrote",
37 "spoke", "listened", "ate", "drank", "slept", "woke", "thought", "felt",
38 "knew", "understood", "learned", "taught", "created", "built", "destroyed",
39 "grew", "shrank", "opened", "closed", "started", "stopped", "began",
40];
41
42const FALLBACK_ING: &[&str] = &[
43 "running", "walking", "jumping", "swimming", "flying", "driving", "reading",
44 "writing", "speaking", "listening", "eating", "drinking", "sleeping",
45 "waking", "thinking", "feeling", "knowing", "understanding", "learning",
46 "teaching", "creating", "building", "destroying", "growing", "shrinking",
47];
48
49#[cfg(test)]
50mod tests {
51 use super::*;
52
53 #[test]
54 fn test_verb() {
55 assert!(!verb().is_empty());
56 }
57
58 #[test]
59 fn test_past() {
60 assert!(!past().is_empty());
61 }
62
63 #[test]
64 fn test_ing_form() {
65 assert!(!ing_form().is_empty());
66 }
67}