mirror of
https://github.com/mat-1/azalea.git
synced 2025-08-02 23:44:38 +00:00
39 lines
1.1 KiB
Rust
39 lines
1.1 KiB
Rust
pub fn combinations_of<T: Clone>(items: &[Vec<T>]) -> Vec<Vec<T>> {
|
|
let mut combinations = Vec::new();
|
|
if items.is_empty() {
|
|
return combinations;
|
|
};
|
|
if items.len() == 1 {
|
|
for item in &items[0] {
|
|
combinations.push(vec![item.clone()]);
|
|
}
|
|
return combinations;
|
|
};
|
|
|
|
for i in 0..items[0].len() {
|
|
let item = &items[0][i];
|
|
for other_combinations in combinations_of(&items[1..]) {
|
|
let mut combination = vec![item.clone()];
|
|
combination.extend(other_combinations);
|
|
combinations.push(combination);
|
|
}
|
|
}
|
|
|
|
combinations
|
|
}
|
|
|
|
pub fn to_pascal_case(s: &str) -> String {
|
|
let mut result = String::new();
|
|
let mut prev_was_underscore = true; // set to true by default so the first character is capitalized
|
|
for c in s.chars() {
|
|
if c == '_' {
|
|
prev_was_underscore = true;
|
|
} else if prev_was_underscore {
|
|
result.push(c.to_ascii_uppercase());
|
|
prev_was_underscore = false;
|
|
} else {
|
|
result.push(c);
|
|
}
|
|
}
|
|
result
|
|
}
|