Major refactor
This commit is contained in:
62
crates/siren-core/src/utils/text_utils.rs
Normal file
62
crates/siren-core/src/utils/text_utils.rs
Normal file
@@ -0,0 +1,62 @@
|
||||
pub fn a_or_an(word: &str) -> &'static str {
|
||||
let vowels = ['a', 'e', 'i', 'o', 'u'];
|
||||
let lowercase_word = word.to_lowercase();
|
||||
|
||||
// Special cases where the article should be "a"
|
||||
let special_cases_a = vec!["one"];
|
||||
if special_cases_a.contains(&lowercase_word.as_str()) {
|
||||
return "a";
|
||||
}
|
||||
|
||||
// Special cases where the article should be "an"
|
||||
let special_cases_an = vec!["hour"];
|
||||
if special_cases_an.contains(&lowercase_word.as_str()) {
|
||||
return "an";
|
||||
}
|
||||
|
||||
let first_char = lowercase_word.chars().next();
|
||||
|
||||
match first_char {
|
||||
// If the first character is a vowel, return "an"
|
||||
Some(c) if vowels.contains(&c) => "an",
|
||||
// Otherwise, return "a"
|
||||
_ => "a",
|
||||
}
|
||||
}
|
||||
|
||||
pub fn number_to_words(n: i32) -> String {
|
||||
let ones = [
|
||||
"", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine",
|
||||
];
|
||||
let teens = [
|
||||
"ten",
|
||||
"eleven",
|
||||
"twelve",
|
||||
"thirteen",
|
||||
"fourteen",
|
||||
"fifteen",
|
||||
"sixteen",
|
||||
"seventeen",
|
||||
"eighteen",
|
||||
"nineteen",
|
||||
];
|
||||
let tens = [
|
||||
"", "", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety",
|
||||
];
|
||||
|
||||
if n < 10 {
|
||||
ones[n as usize].to_string()
|
||||
} else if n < 20 {
|
||||
teens[(n - 10) as usize].to_string()
|
||||
} else if n < 100 {
|
||||
let ten_part = tens[(n / 10) as usize];
|
||||
let one_part = ones[(n % 10) as usize];
|
||||
if n % 10 == 0 {
|
||||
ten_part.to_string() // e.g., 20 → "twenty"
|
||||
} else {
|
||||
format!("{}-{}", ten_part, one_part) // e.g., 42 → "forty-two"
|
||||
}
|
||||
} else {
|
||||
"Number out of range".to_string() // Handle numbers >= 100 (or extend the logic)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user