diff --git a/src/server.rs b/src/server.rs index c8ba785..122de05 100644 --- a/src/server.rs +++ b/src/server.rs @@ -197,9 +197,46 @@ impl Server { message: String::from("It's not your turn!"), } } else { - match lookup(&message) { + let query = if message.is_japanese() { + Some(message) + } else { + let kana = message.to_kana(); + if kana.is_japanese() { + Some(kana) + } else { + None + } + }; + // For some reason result will keep a reference to + // katakana_query and hiragana_query, meaning that + // these need to be kept around as a variable + // to prevent them from being dropped. + let (katakana_query, hiragana_query) = match &query { + Some(query) => ( + Some(query.to_katakana()), + Some(query.to_hiragana()) + ), + None => (None, None), + }; + let result = match &query { + Some(query) => match lookup(query) { + Some(result) => Some(result), + None => { + if query.is_hiragana() { + // looking up ごりら doesn't return ゴリラ + lookup(katakana_query.as_ref().unwrap()) + } else if query.is_katakana() { + // looking up シリトリ doesn't return 尻取り + lookup(hiragana_query.as_ref().unwrap()) + } else { + None + } + } + }, + None => None, + }; + match result { Some(entry) => { - println!("{}, {:?}", get_starting_mora(&entry.reading), self.next_mora); if entry.reading.chars().last().unwrap().to_string().to_hiragana() == "ん" { MessageResponseData::Error { message: String::from("Can't end with ん!"),