Handling commands
Our handle_cmd() method does nothing, for now, so let's update it. First of all, we'll need a method to send a response to a client:
impl Client {
#[async]
fn send(mut self, answer: Answer) -> Result<Self> {
self.writer = await!(self.writer.send(answer))?;
Ok(self)
}
}This simply calls the send() method of the writer. Since it consumes it, we reassign the result to the attribute.
Now, we'll handle the USER FTP command:
#[async]
fn handle_cmd(mut self, cmd: Command) -> Result<Self> {
println!("Received command: {:?}", cmd);
match cmd {
Command::User(content) => {
if content.is_empty() {
self = await!
(self.send(Answer::new(ResultCode::InvalidParameterOrArgument, "Invalid
username")))?;
} else {
self = await!(self.send(Answer::new(ResultCode::UserLoggedIn,
&format!("Welcome {}!", content))))?;
}
...