Files
orchid/src/utils/replace_first.rs
Lawrence Bethlenfalvy e99ade92ba Cleanup #1
- Removed notes
- Removed superfluous uses of `where`
2023-05-23 18:39:45 +01:00

20 lines
528 B
Rust

use std::iter;
/// Iterate over a sequence with the first element the function returns
/// Some() for updated, but only if there is such an element.
pub fn replace_first<
T: Clone,
F: FnMut(&T) -> Option<T>
>(
slice: &[T], mut f: F
) -> Option<impl Iterator<Item = T> + '_> {
for i in 0..slice.len() {
if let Some(new) = f(&slice[i]) {
let subbed_iter = slice[0..i].iter().cloned()
.chain(iter::once(new))
.chain(slice[i+1..].iter().cloned());
return Some(subbed_iter)
}
}
None
}