I have this function:
pub fn two_sum(numbers: Vec<i32>, target: i32) -> Vec<i32> {
let mut iter = numbers.iter().enumerate();
if let Some((i, l)) = iter.next() {
if let Some((j, r)) = iter.by_ref().rev().next() {
if l + r == target {
vec![i as i32 + 1, j as i32 + 1]
} else {
std::iter::repeat(()).try_fold((l + r > target, (i, l), (j, r)), move |(cond, (i, l), (j, r)), ()| {
if cond {
if let Some((j, r)) = iter.by_ref().rev().next() {
if l + r == target {
Err(vec![i as i32 + 1, j as i32 + 1])
} else {
Ok((l + r > target, (i, l), (j, r)))
}
} else {
Err(vec![])
}
} else {
if let Some((i, l)) = iter.next() {
if l + r == target {
Err(vec![i as i32 + 1, j as i32 + 1])
} else {
Ok((l + r > target, (i, l), (j, r)))
}
} else {
Err(vec![])
}
}
}).err().unwrap_or(vec![])
}
} else {
vec![]
}
} else {
vec![]
}
}
Using for loops it can be simplified but, I want to be solved it ONLY using iterators. How to simplify only using iterators?