Полностью заимствуя два поля закрепленной структуры

Я пытаюсь сделать асинхронную версию 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 чтобы записать в срез, поэтому мне нужно иметь изменяемые ссылки на оба поля одновременно.

0 ответов

Другие вопросы по тегам