(keys: Vec<String>)
| 226 | } |
| 227 | |
| 228 | fn normalize_skill_key_list(keys: Vec<String>) -> Vec<String> { |
| 229 | let mut seen = HashSet::new(); |
| 230 | let mut normalized = Vec::new(); |
| 231 | |
| 232 | for key in keys { |
| 233 | let trimmed = key.trim(); |
| 234 | if trimmed.is_empty() { |
| 235 | continue; |
| 236 | } |
| 237 | |
| 238 | let owned = trimmed.to_string(); |
| 239 | if seen.insert(owned.clone()) { |
| 240 | normalized.push(owned); |
| 241 | } |
| 242 | } |
| 243 | |
| 244 | normalized |
| 245 | } |
| 246 | |
| 247 | async fn persist_user_mode_skill_selection( |
| 248 | mode_id: &str, |
no test coverage detected