I have a struct:
pub struct Paradise {
    cstream: TcpStream,
}
with a method:
pub fn write_message(&mut self, code: i32, message: &str) {
    let foo = format!("{} {}\r\n", code, message);
    let _ = self.cstream.write(foo.as_bytes());
}
That works great. It's an FTP server so when I get a new TcpStream from TcpListener::bind I do:
let mut p = Paradise::new(stream);
p.start();
And inside that start method I call:
self.write_message(220, "Welcome to Paradise");
and sure enough, I see that message in the FTP client. So far so good.
But then I do:
let mut br = BufReader::new(&self.cstream);
loop {
    let mut buffer = String::new();
    let _ = br.read_line(&mut buffer);
    println!("{:?}", buffer);
    self.write_message(550, "Testing");
}
And when I get to the next write_message call inside the loop:
cannot borrow
*selfas mutable becauseself.cstreamis also borrowed as immutable [E0502]
Full code:
How can I change stuff around so I can call write_message inside the loop?