Ваш пример довольно легко решаем, просто заимствуйте кусочек!
use std::io::{copy, Read, Write};
fn f(input: &mut Read, output: &mut Write) {
copy(input, output).unwrap();
}
fn main() {
let i = vec![0u8, 1, 2, 3];
let mut o = Vec::new();
f(&mut &i[..], &mut o);
println!("{:?} {:?}", i, o);
}
Хотя я не знаю, почему вы делаете i[..]
, потому что чтение не меняет читателя в этом конкретном случае (обратите внимание, что оно может изменить читателя, потому что оно требует изменяемой ссылки, который может (например, в сокетах) потреблять байты, которые он читает).
Вы также можете просто написать
f(&mut i.as_slice(), &mut o);
если вы не обязаны клонировать vec.