|
|
|
@ -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 ん!"),
|
|
|
|
|