I'm not sure what you're trying to say, but the compile-time safety requirement isn't given up. It would look something like:
self.buffer = io_read(self.buffer)?
This isn't much different than io_read(&mut self.buffer)?
since rust doesn't permit simultaneous access when a mutable reference is taken.