Peekable<I>
- это итератор, который выдает элементы из итератора, который он переносит (с поворотом, который можно посмотреть вперед, но здесь это не актуально).
&[u8]
- это фрагментбайты расположены в памяти непрерывно.
Итак, у вас есть две проблемы:
Итератор I
может быть любым. Предполагая, что вы получили I
из общего контекста, такого как foo<I: Iterator>()
, вам нужно убедиться, что итератор дает u8
или что-то, что можно преобразовать в u8
.
Данныепозади Peekable
не должно существовать в памяти. Он может быть создан из диапазона, например, (0..1000)
или итерацией по HashMap
, в котором данные разбросаны случайным образом. Вам нужно скопировать его в вектор, который гарантирует непрерывное расположение.
Сначала вам нужно будет объявить, что вы хотите u8
с where I: Iterator<Item=u8>
, или потребовать, чтобы тип был конвертируемым. до u8
с where I: Iterator<Item=impl Into<u8>>
. Тогда вы сможете сделать let iterator = iterator.map(|el| el.into())
, чтобы получить итератор u8
элементов.
И когда у вас есть это, вы можете собрать их в вектор и получить часть вектора:
let vec: Vec<u8> = iterator.collect();
let slice = &vec[..];