diff --git a/Cargo.toml b/Cargo.toml index 44d3f67..7217af9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,7 +5,7 @@ authors = ["Thilo Behnke "] edition = "2018" [workspace] -members = ["pong"] +members = ["pong", "server"] [lib] crate-type = ["cdylib", "rlib"] diff --git a/server/Cargo.toml b/server/Cargo.toml new file mode 100644 index 0000000..986f069 --- /dev/null +++ b/server/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "server" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +kafka = { version = "0.8.0" } +hyper = {version = "0.14.18", features = ["full"]} +tokio = { version = "1", features = ["full"] } +tokio-stream = {version = "0.1" } diff --git a/server/src/http.rs b/server/src/http.rs new file mode 100644 index 0000000..b25202c --- /dev/null +++ b/server/src/http.rs @@ -0,0 +1,31 @@ +use std::convert::Infallible; +use hyper::{Body, Request, Response, Server}; +use hyper::server::conn::AddrStream; +use hyper::service::{make_service_fn, service_fn}; + +pub struct HttpServer { + addr: [u8; 4], + port: u16 +} +impl HttpServer { + pub fn new(addr: [u8; 4], port: u16) -> HttpServer { + HttpServer {addr, port} + } + + pub async fn run(&self) -> Result<(), Box> { + let make_svc = make_service_fn(|socket: &AddrStream| async { + Ok::<_, Infallible>(service_fn(handle_request)) + }); + + let host = (self.addr, self.port).into(); + let server = Server::bind(&host).serve(make_svc); + println!("Listening on http://{}", host); + server.await?; + Ok(()) + } + +} + +async fn handle_request(req: Request) -> Result, Infallible> { + Ok(Response::new("hello".into())) +} diff --git a/server/src/main.rs b/server/src/main.rs new file mode 100644 index 0000000..81ae76a --- /dev/null +++ b/server/src/main.rs @@ -0,0 +1,8 @@ +use crate::http::HttpServer; + +mod http; + +#[tokio::main] +pub async fn main() { + HttpServer::new([127, 0, 0, 1], 4000).run().await.expect("failed to run server"); +}