# Gat Lending Iterator
My concept for what a lending iterator crate should look like. **Work in progress**.
Most `Iterator` methods can work as is on `LendingIterator`s, but some wouldn't make sense. Basically any method that needs to look at more than one element at once isn't possible.
Some `LendingIterator` methods _may_ return something that can act as an `Iterator`. For example `cloned`, or `map`, when the function passed to it returns a value that isn't tied to the lifetime of its input. In these cases, my design choice was to conditionally implement IntoIterator for the adapter.
I've also included an extension trait `ToLendingIterator: IntoIterator` for iterators that allows turning them into lending iterators in various ways, for example over windows of elements. It's possible I will add more methods to this trait.
## methods that behave the same on `LendingIterator`s as they do on `Iterator`s
- advance_by
- all
- any
- by_ref
- chain
- cmp
- cmp_by
- count
- cycle
- enumerate
- eq
- eq_by
- filter
- filter_map
- find
- find_map
- flat_map
- flatten
- fold
- for_each
- fuse
- ge
- gt
- inspect
- intersperse
- intersperse_with
- is_partitioned
- le
- lt
- map
- map_while
- ne
- nth
- partial_cmp
- partial_cmp_by
- position
- product
- scan
- size_hint
- skip
- skip_while
- step_by
- sum
- take
- take_while
- try_find
- try_fold
- try_for_each
- zip
## methods that don't make sense on `LendingIterator`s
- array_chunks
- collect
- collect_into
- is_sorted
- is_sorted_by
- is_sorted_by_key
- last
- next_chunk
- partition
- partition_in_place
- peekable
- try_collect
- unzip
## methods that behave differently on `LendingIterator`s
- max
- max_by
- max_by_key
- min
- min_by
- min_by_key
- reduce
- try_reduce
## methods that can sometimes be used to convert a `LendingIterator` into an `Iterator`
- cloned
- copied
- filter_map
- flat_map
- map
- map_while
- scan
## methods I'm not sure about
- rev
- rposition