write_text

pull/1/head
dvkt 5 years ago
parent 915945b1ed
commit 1708db9ffa

@ -95,7 +95,7 @@ impl Request {
fn respond(&mut self) -> Result<()> { fn respond(&mut self) -> Result<()> {
let md = fs::metadata(self.path()?)?; let md = fs::metadata(self.path()?)?;
if md.is_file() { if md.is_file() {
self.send_text() write_text(&self.stream, self.path()?)
} else if md.is_dir() { } else if md.is_dir() {
self.send_dir() self.send_dir()
} else { } else {
@ -123,10 +123,13 @@ impl Request {
menu.end()?; menu.end()?;
Ok(()) Ok(())
} }
}
/// Send a text document to the client. /// Send a text file to the client.
fn send_text(&mut self) -> Result<()> { fn write_text<'a, W>(mut w: &'a W, path: PathBuf) -> Result<()>
let path = self.path()?; where
&'a W: Write,
{
let md = fs::metadata(&path)?; let md = fs::metadata(&path)?;
let mut f = fs::File::open(&path)?; let mut f = fs::File::open(&path)?;
let mut buf = [0; 1024]; let mut buf = [0; 1024];
@ -134,20 +137,18 @@ impl Request {
while bytes > 0 { while bytes > 0 {
let n = f.read(&mut buf[..])?; let n = f.read(&mut buf[..])?;
bytes -= n as u64; bytes -= n as u64;
self.stream.write_all(&buf[..n])?; w.write_all(&buf[..n])?;
} }
self.stream.write_all(b"\r\n.\r\n")?; // end gopher response w.write_all(b"\r\n.\r\n")?; // end gopher response
Ok(()) Ok(())
} }
}
/// Determine the gopher type for a DirEntry on disk. /// Determine the gopher type for a DirEntry on disk.
fn file_type(dir: &fs::DirEntry) -> ItemType { fn file_type(dir: &fs::DirEntry) -> ItemType {
let metadata = dir.metadata(); let metadata = match dir.metadata() {
if metadata.is_err() { Err(_) => return ItemType::Error,
return ItemType::Error; Ok(md) => md,
} };
let metadata = metadata.unwrap();
if metadata.is_file() { if metadata.is_file() {
if let Ok(file) = fs::File::open(&dir.path()) { if let Ok(file) = fs::File::open(&dir.path()) {

Loading…
Cancel
Save