(filter: &String, sort_field: &SortColumn)
| 292 | } |
| 293 | |
| 294 | fn query_executables(filter: &String, sort_field: &SortColumn) -> Vec<(FileId, ExecutableMeta)> { |
| 295 | let mut execs: Vec<_> = DB |
| 296 | .executables |
| 297 | .iter() |
| 298 | .filter_map(|(file_id, value_ref)| { |
| 299 | let meta = value_ref.read(); |
| 300 | let name = meta.file_name.as_deref().unwrap_or(NO_NAME); |
| 301 | if name.contains(filter) { |
| 302 | return Some((file_id, meta)); |
| 303 | } |
| 304 | None |
| 305 | }) |
| 306 | .collect(); |
| 307 | |
| 308 | // Apply sorting. |
| 309 | execs.sort_unstable_by( |
| 310 | |(lhs_file_id, lhs_metas), (rhs_file_id, rhs_metas)| match sort_field { |
| 311 | SortColumn::Symbols => lhs_metas.symb_status.cmp(&rhs_metas.symb_status).reverse(), |
| 312 | SortColumn::FileName => { |
| 313 | let lhs_name = lhs_metas.file_name.as_deref().unwrap_or(NO_NAME); |
| 314 | let rhs_name = rhs_metas.file_name.as_deref().unwrap_or(NO_NAME); |
| 315 | lhs_name.cmp(&rhs_name) |
| 316 | } |
| 317 | SortColumn::BuildId => lhs_metas.build_id.cmp(&rhs_metas.build_id).reverse(), |
| 318 | SortColumn::FileId => u128::from(*lhs_file_id).cmp(&u128::from(*rhs_file_id)), |
| 319 | }, |
| 320 | ); |
| 321 | |
| 322 | return execs; |
| 323 | } |
no test coverage detected