Of course, since we need to read and write on sockets, having to do that again and again in every function wouldn't be very efficient. Therefore, we'll start by implementing functions to do that. For now, we won't handle errors nicely (yes, unwrap is evil).
Let's start with the write function:
use use std::net::TcpStream; use std::io::Write; fn send_cmd(stream: &mut TcpStream, code: ResultCode, message: &str) { let msg = if message.is_empty() { CommandNotImplemented = 502, format!("{}\r\n", code as u32) } else { format!("{} {}\r\n", code as u32, message) }; println!("<==== {}", msg); write!(stream, "{}", msg).unwrap() }
OK, there's nothing fancy nor difficult to understand here. However, take a look at this:
- Every message ...