Я хочу построить HashSet<u8> из Vec<u8>. Я бы хотел сделать это
- в одной строке кода,
 - копирование данных только один раз,
 -  используя только 
2nпамять, 
 но единственное, что я могу скомпилировать, это кусок... мусора, который, я думаю, дважды копирует данные и использует память 3n.
fn vec_to_set(vec: Vec<u8>) -> HashSet<u8> {
    let mut victim = vec.clone();
    let x: HashSet<u8> = victim.drain(..).collect();
    return x;
}
Я надеялся написать что-то простое, например:
fn vec_to_set(vec: Vec<u8>) -> HashSet<u8> {
    return HashSet::from_iter(vec.iter());
}
но это не будет компилироваться:
error[E0308]: mismatched types
 --> <anon>:5:12
  |
5 |     return HashSet::from_iter(vec.iter());
  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected u8, found &u8
  |
  = note: expected type `std::collections::HashSet<u8>`
  = note:    found type `std::collections::HashSet<&u8, _>`
.. и я действительно не понимаю сообщение об ошибке, возможно потому, что мне нужно RTFM.