Re:Rust is the future, C is the new Assembly: Josh Triplett ...
by atombender on Wednesday August 28, 2019 @02:35PM
(#20822642)
No, I tried that! That actually moves the "Cannot move" error to the "self.buffers" use itself.
The reason I can't just iterate by value is that I'd be consuming data that is already held by the map. The buffer is defined thus:
use bitstream_io::{BigEndian, BitWriter};
struct PostingBuffer<W: io::Write> {
bw: BitWriter<W, BigEndian>,
// ...
}
impl PostingBuffer {
pub fn get_data(self) -> W {
self.bw.into_writer()
}
}
bitstream_io::BitWriter's [1] into_writer consumes itself: pub fn into_writer(self) -> W {
self.writer
}
[1] https://docs.rs/bitstream-io/0.8.2/bitstream_io/write/struct...
Re:Rust is the future, C is the new Assembly: Josh Triplett ...
by steveklabnik on Wednesday August 28, 2019 @02:39PM
(#20822674)
Ah, ah, I see now. Yes, right.
This is exactly why I couched my last paragraph the way I did, heh.
I think that if you wrote
it should have Just Worked. By iterating over a reference to self.buffers, you iterate over a reference to the contents, which you can't move out of. But iterating over it by value, it should give it to you by value, and you'd be fine. That said, I have not tried it, so there might be some context I'm missing. One nice thing about a strict compiler is that I have to think about the details less, and use the error messages to help me fix any problems I find. But that makes it harder to know how it goes without the compiler...