|
1 | 1 | use std::net::{TcpStream, TcpListener};
|
2 | 2 | use std::io::{Write, BufReader, BufRead};
|
3 | 3 |
|
4 |
| -fn get_operation(stream: &mut TcpStream) { |
| 4 | +fn get_operation(stream: &mut TcpStream) -> std::io::Result<()> { |
5 | 5 | let body = "HTTP server sample";
|
6 |
| - writeln!(stream, "HTTP/1.1 200 OK").unwrap(); |
7 |
| - writeln!(stream, "Content-Type: text/html; charset=UTF-8").unwrap(); |
8 |
| - writeln!(stream, "Content-Length: {}", body.len()).unwrap(); |
9 |
| - writeln!(stream).unwrap(); |
| 6 | + writeln!(stream, "HTTP/1.1 200 OK")?; |
| 7 | + writeln!(stream, "Content-Type: text/plain; charset=UTF-8")?; |
| 8 | + writeln!(stream, "Content-Length: {}", body.len())?; |
| 9 | + writeln!(stream)?; |
10 | 10 |
|
11 |
| - writeln!(stream, "{}", body).unwrap(); |
| 11 | + writeln!(stream, "{}", body)?; |
| 12 | + Ok(()) |
12 | 13 | }
|
13 | 14 |
|
14 |
| -fn handle_client(stream: TcpStream) { |
| 15 | +fn handle_client(stream: TcpStream) -> std::io::Result<()> { |
15 | 16 | let mut reader = BufReader::new(stream);
|
16 | 17 |
|
17 | 18 | let mut first_line = String::new();
|
18 |
| - if let Err(err) = reader.read_line(&mut first_line) { |
19 |
| - panic!("error during receive a line: {}", err); |
20 |
| - } |
| 19 | + reader.read_line(&mut first_line)?; |
21 | 20 |
|
22 | 21 | let mut params = first_line.split_whitespace();
|
23 | 22 | let method = params.next();
|
24 | 23 | let path = params.next();
|
25 | 24 | match (method, path) {
|
26 | 25 | (Some("GET"), Some(_)) => {
|
27 |
| - get_operation(reader.get_mut()); |
| 26 | + get_operation(reader.get_mut())?; |
28 | 27 | }
|
29 | 28 | _ => panic!("failed to parse"),
|
30 | 29 | }
|
| 30 | + Ok(()) |
31 | 31 | }
|
32 | 32 |
|
33 |
| -fn main() { |
34 |
| - let listener = TcpListener::bind("127.0.0.1:8080").unwrap(); |
| 33 | +fn main() -> std::io::Result<()> { |
| 34 | + let listener = TcpListener::bind("127.0.0.1:8080")?; |
35 | 35 |
|
36 | 36 | for stream in listener.incoming() {
|
37 |
| - match stream { |
38 |
| - Ok(stream) => { |
39 |
| - handle_client(stream) |
40 |
| - } |
41 |
| - Err(_) => { panic!("connection failed") } |
42 |
| - }; |
| 37 | + handle_client(stream?)?; |
43 | 38 | }
|
| 39 | + Ok(()) |
44 | 40 | }
|
0 commit comments