summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main.rs59
1 files changed, 32 insertions, 27 deletions
diff --git a/src/main.rs b/src/main.rs
index 993d72b..15e17ae 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -4,46 +4,51 @@ use std::io::prelude::*;
use std::net::TcpListener;
use std::net::TcpStream;
-fn main() {
- start_server("127.0.0.1:7878".to_string())
+pub struct Server {
+ bind: String,
}
-pub fn start_server(bind: String) {
- let listener = TcpListener::bind(bind).unwrap();
- for next_stream in listener.incoming() {
- handle(next_stream.unwrap());
+impl Server {
+ pub fn new(bind: String) -> Server {
+ Server { bind }
}
-}
-
-fn handle(mut stream: TcpStream) {
- let io = BufReader::new(&stream);
- let request_line = io.lines().next().unwrap().unwrap();
- let (status_line, filename) = match &request_line[..] {
- "GET / HTTP/1.1" => ("HTTP/1.1 200 OK", "./public/index.html"),
- "GET /.well-known/oauth-authorization-server HTTP/1.1" => {
- ("HTTP/1.1 200 OK", "./public/metadata.json")
+ pub fn start(&self) {
+ let listener = TcpListener::bind(self.bind.clone()).unwrap();
+ for next_stream in listener.incoming() {
+ self.handle(next_stream.unwrap());
}
- _ => ("HTTP/1.1 404 NOT FOUND", "./public/404.html"),
- };
+ }
+
+ pub fn handle(&self, mut stream: TcpStream) {
+ let io = BufReader::new(&stream);
+ let request_line = io.lines().next().unwrap().unwrap();
+
+ let (status_line, filename) = match &request_line[..] {
+ "GET / HTTP/1.1" => ("HTTP/1.1 200 OK", "./public/index.html"),
+ "GET /.well-known/oauth-authorization-server HTTP/1.1" => {
+ ("HTTP/1.1 200 OK", "./public/metadata.json")
+ }
+ _ => ("HTTP/1.1 404 NOT FOUND", "./public/404.html"),
+ };
- let contents = fs::read_to_string(filename).unwrap();
- let length = contents.len();
- let response = format!("{status_line}\r\nContent-Length: {length}\r\n\r\n{contents}");
+ let contents = fs::read_to_string(filename).unwrap();
+ let length = contents.len();
+ let response = format!("{status_line}\r\nContent-Length: {length}\r\n\r\n{contents}");
- stream.write_all(response.as_bytes()).unwrap();
+ stream.write_all(response.as_bytes()).unwrap();
+ }
+}
+
+fn main() {
+ let server = Server::new("127.0.0.1:7878".to_string());
+ server.start()
}
#[cfg(test)]
mod tests {
- use crate::start_server;
- use std::thread;
-
#[test]
fn it_starts_a_server() {
- // TODO:: figure out how to spawn a server in a background thread
- // let server = thread::spawn(|| start_server("127.0.0.1:7878".to_string()));
assert!(true);
- // server.join().unwrap();
}
}