Введение в свой итератор в Rust
Итератор в Rust это не только готовые обходы из стандартной библиотеки. Свой тип может хранить счет, границу или любое другое состояние и по шагам отдавать значения, пока они еще есть.
Такой обход отдает следующий элемент или
пустое значение, когда элементы кончились.
Цикл for умеет работать с таким
типом так же, как с обходом по срезу:
на каждом шаге в переменную попадает
очередное число или другой элемент.
Чтобы тип подошел под общий трейт обхода, в блоке выполнения задают вид элемента и метод, который двигает внутреннее состояние. Пустой вариант в ответе означает конец последовательности, а не ошибку программы.
Дальше соберем счетчик с верхней границей, разберем связанный тип элемента, обернем чужой обход в адаптер и закрепим прием на задачах.