]> piware.de Git - learn-rust.git/commitdiff
tokio-tutorial-jbarszczewski: Initial savings balance API
authorMartin Pitt <martin@piware.de>
Fri, 16 Sep 2022 08:53:18 +0000 (10:53 +0200)
committerMartin Pitt <martin@piware.de>
Fri, 16 Sep 2022 09:54:11 +0000 (11:54 +0200)
tokio-tutorial-jbarszczewski/src/main.rs

index 6e69036614e531eea1354ea7eb8f5b6a83d7bd33..5d49be551efef52c54ac9d9e2a12fc52029e249e 100644 (file)
@@ -1,17 +1,24 @@
-use tokio::join;
-
-async fn guten_tag() {
-    println!("Guten Tag!");
-}
+use tokio::io::AsyncWriteExt;
+use tokio::net::{TcpListener, TcpStream};
 
 #[tokio::main]
 async fn main() {
-    let task1 = tokio::spawn(async {
-        println!("Hello, world!");
-    });
-    let task2 = tokio::spawn(guten_tag());
+    let listener = TcpListener::bind("127.0.0.1:8181").await.unwrap();
+
+    loop {
+        let (stream, _) = listener.accept().await.unwrap();
+        handle_connection(stream).await;
+    }
+}
+
+async fn handle_connection(mut stream: TcpStream) {
+    let contents = "{\"balance\": 0.00}";
 
-    let (r1, r2) = join!(task1, task2);
-    r1.unwrap();
-    r2.unwrap()
+    let response = format!(
+        "HTTP/1.1 200 OK\r\nContent-Type: application/json\r\nContent-Length: {}\r\n\r\n{}",
+        contents.len(),
+        contents
+    );
+    assert!(stream.write(response.as_bytes()).await.unwrap() > 0);
+    stream.flush().await.unwrap();
 }