Я реализовал AsRef<[u8]>
для моего типа, и автоматическое преобразование в &[u8]
с использованием .as_ref()
работает, но оператор &
не ... как я могу заставить оператора работать?
struct Buffer {
data: Vec<u8>,
}
impl AsRef<[u8]> for Buffer {
fn as_ref(&self) -> &[u8] {
&self.data
}
}
fn print_slice(slice: &[u8]) {
slice.iter().for_each(|b| print!("{:02x}", b));
println!()
}
fn main() {
let buffer = Buffer {
data: b"Testolope".to_vec(),
};
// print_slice(&buffer); // <- This does not work
print_slice(buffer.as_ref()) // <- This works
}
error[E0308]: mismatched types
--> src/main.rs:20:17
|
20 | print_slice(&buffer);
| ^^^^^^^ expected slice, found struct `Buffer`
|
= note: expected type `&[u8]`
found type `&Buffer`
Я хочу общее решение.Другие типы данных, такие как Vec<u8>
, поддерживают преобразование в &[u8]
с помощью оператора &
.Было бы здорово, если бы я мог сделать эту работу для своих типов, чтобы мне не приходилось каждый раз использовать .as_ref()
.