use std::io::IoResult;
use std::io::net::tcp::TcpStream;
use protocol::{DirEntity, Parser};
pub struct Gopher {
host: String,
port: u16
}
impl Gopher {
pub fn new(host: &str, port: u16) -> Gopher {
Gopher {
host: host.into_string(),
port: port
}
}
pub fn root(&self) -> IoResult<Vec<DirEntity>> {
self.fetch_dir(&[])
}
pub fn fetch_dir(&self, selector: &[u8]) -> IoResult<Vec<DirEntity>> {
use std::io::BufferedReader;
let mut stream = try!(self.connect());
try!(stream.write(selector));
try!(stream.write(b"\r\n"));
let mut parser = try!(Parser::new(BufferedReader::new(stream)));
parser.parse_menu()
}
fn connect(&self) -> IoResult<TcpStream> {
TcpStream::connect((self.host.as_slice(), self.port))
}
}