Is there any way to access a field of self
and still be able to call a &mut self
method?
pub struct StreamProcessor {
poll: Poll,
events: Events,
temp: [u8; BUFF_SIZE],
}
impl StreamProcessor {
pub fn new() -> Result<Self> {
Ok(Self {
poll: Poll::new()?,
events: Events::with_capacity(128),
temp: [0u8; BUFF_SIZE],
})
}
pub fn read_request(&mut self, stream: &mut TcpStream) -> Result<Buffer> {
self.poll.registry().register(stream, STREAM_RD, Interest::READABLE)?;
self.read_all(stream).finally(|| {
drop(self.poll.registry().deregister(stream));
})
}
fn read_all(&mut self, stream: &mut TcpStream) -> Result<Buffer> {
let mut buffer: Option<Buffer> = None;
loop {
match self.poll.poll(&mut self.events, None) {
Ok(()) => {
for event in self.events.iter() {
match event.token() {
STREAM_RD => {
match self.handle_event_read(stream, &mut buffer) {
/* ... */
}
},
_ => unreachable!(),
}
}
}
Err(err) => return Err(err),
}
}
}
fn handle_event_read(&mut self, stream: &mut TcpStream, buffer: &mut Option<Buffer>) -> Result<bool>
{
/* ... */
}
[...]
}
Error:
error[E0502]: cannot borrow `*self` as mutable because it is also borrowed as immutable
--> src\net\processor.rs:57:39
|
54 | for event in self.events.iter() {
| ------------------
| |
| immutable borrow occurs here
| immutable borrow later used here
...
57 | match self.handle_event_read(stream, &mut buffer) {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
Can the code be refactored to solve this problem?
Thanks!