Полностью заимствуя два поля закрепленной структуры
Я пытаюсь сделать асинхронную версию BufReader
и Lines
struct, но у меня проблемы, потому что мне нужно позаимствовать два поля одновременно. Работает без Pin
потому что компилятор может распознавать непосредственно заимствование полей, но он не может сделать это, когда он получает ссылку из DerefMut
на булавке. Фьючерсы Stream
черта требует, чтобы тип личности был Pin<&mut Self>
так что я не могу просто использовать нормальный тип. Как я могу убедить компилятор, что это безопасно, или иным образом использовать unsafe
сделать это сам?
Вот мой пример:
#![feature(arbitrary_self_types, pin)]
use std::pin::Pin;
pub struct Example {
a: Vec<u32>,
b: Vec<u32>,
}
impl Example {
pub fn next(mut self: Pin<&mut Self>) {
let a = &mut self.a;
let b = &mut self.b;
a.push(b.remove(0));
}
}
Мой более сложный пример требует использования Read
чтобы записать в срез, поэтому мне нужно иметь изменяемые ссылки на оба поля одновременно.