Я пишу клиент для TCP-сервера
use std::net::TcpStream;
use std::io::{Read, Write, Error};
pub struct Client {
addr: String,
conn: Option<TcpStream>,
}
impl Client {
pub fn connect(&mut self) {
let res = TcpStream::connect(&self.addr);
match res {
Ok(c) => {
self.conn = Some(c);
},
Err(_) => panic!(),
}
}
pub fn version(self) -> Result<[u8; 8], Error> {
let mut ver: [u8; 8] = [0;8];
let command_string = b"VERSION\r\n";
let res = self.conn.unwrap().write(&command_string[0..]);
match res {
Ok(_) => self.conn.unwrap().read(&mut ver[..]),
Err(e) => panic!(e)
};
Ok(ver)
}
}
Метод version возвращает ошибку
error[E0382]: use of moved value: `self.conn`
, когда я пытаюсь повторно использовать ссылку.Я думал об использовании #[derive(Copy, Clone)]
, но поскольку эти черты не реализованы для TCPStream, я не уверен, что делать.Каков наилучший способ добиться чтения и записи на сервер в методе (кстати, будет много таких методов, как версия, которая будет как читать, так и записывать на сервер)
Я все еще плохо знаком с ржавчиной ипытаясь обернуть голову вокруг концепции владения, поэтому я прошу прощения, если это глупый вопрос, но так как я хочу обсудить различные подходы (если действительно существует несколько подходов к решению этой проблемы), чтобы повторно использовать поля, не являющиеся клонируемыми / копируемыми, я подумал, что этот вопрос былстоит спросить.