Можно заимствовать Vec<u32>
в &Vec<u32>
или &[u32]
. Я думал, что это благодаря чертам AsRef
или Borrow
. Однако я не смог реализовать такие заимствования на свой собственный тип. Я лаю не на том дереве?
use std::borrow::Borrow;
struct MyArray([u32; 5]);
impl MyArray {
fn new() -> MyArray {
MyArray([42; 5])
}
}
impl AsRef<[u32]> for MyArray {
fn as_ref(&self) -> &[u32] {
&self.0
}
}
impl Borrow<[u32]> for MyArray {
fn borrow(&self) -> &[u32] {
&self.0
}
}
fn main() {
let ma = MyArray::new();
let _: &[u32] = &ma; // compilation failure
}