]> piware.de Git - learn-rust.git/commitdiff
tokio-tutorial-mini-redis: Rename to server binary
authorMartin Pitt <martin@piware.de>
Fri, 16 Sep 2022 12:11:19 +0000 (14:11 +0200)
committerMartin Pitt <martin@piware.de>
Fri, 16 Sep 2022 12:11:19 +0000 (14:11 +0200)
Invoke with

    cargo run --bin server

tokio-tutorial-mini-redis/src/bin/server.rs [new file with mode: 0644]
tokio-tutorial-mini-redis/src/main.rs [deleted file]

diff --git a/tokio-tutorial-mini-redis/src/bin/server.rs b/tokio-tutorial-mini-redis/src/bin/server.rs
new file mode 100644 (file)
index 0000000..2488f03
--- /dev/null
@@ -0,0 +1,47 @@
+use std::collections::HashMap;
+use std::sync::{Arc, Mutex};
+
+use bytes::Bytes;
+use mini_redis::{Connection, Frame};
+use mini_redis::Command::{self, Get, Set};
+use tokio::net::{TcpListener, TcpStream};
+
+type Db = Arc<Mutex<HashMap<String, Bytes>>>;
+
+#[tokio::main]
+async fn main() {
+    let listener = TcpListener::bind("127.0.0.1:6379").await.unwrap();
+    let db: Db = Arc::new(Mutex::new(HashMap::new()));
+
+    loop {
+        // The second item contains the IP and port of the new connection
+        let (socket, _) = listener.accept().await.unwrap();
+        let db_i = db.clone();
+        tokio::spawn(async move { process(socket, db_i).await });
+    }
+}
+
+async fn process(socket: TcpStream, db: Db) {
+    let mut connection = Connection::new(socket);
+
+    while let Some(frame) = connection.read_frame().await.unwrap() {
+        let response = match Command::from_frame(frame).unwrap() {
+            Set(cmd) => {
+                // The value is stored as `Vec<u8>`
+                db.lock().unwrap().insert(cmd.key().to_string(), cmd.value().clone());
+                Frame::Simple("OK".to_string())
+            }
+            Get(cmd) => {
+                if let Some(value) = db.lock().unwrap().get(cmd.key()) {
+                    Frame::Bulk(value.clone())
+                } else {
+                    Frame::Null
+                }
+            }
+            cmd => panic!("unimplemented {:?}", cmd),
+        };
+
+        // Write the response to the client
+        connection.write_frame(&response).await.unwrap();
+    }
+}
diff --git a/tokio-tutorial-mini-redis/src/main.rs b/tokio-tutorial-mini-redis/src/main.rs
deleted file mode 100644 (file)
index 2488f03..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-use std::collections::HashMap;
-use std::sync::{Arc, Mutex};
-
-use bytes::Bytes;
-use mini_redis::{Connection, Frame};
-use mini_redis::Command::{self, Get, Set};
-use tokio::net::{TcpListener, TcpStream};
-
-type Db = Arc<Mutex<HashMap<String, Bytes>>>;
-
-#[tokio::main]
-async fn main() {
-    let listener = TcpListener::bind("127.0.0.1:6379").await.unwrap();
-    let db: Db = Arc::new(Mutex::new(HashMap::new()));
-
-    loop {
-        // The second item contains the IP and port of the new connection
-        let (socket, _) = listener.accept().await.unwrap();
-        let db_i = db.clone();
-        tokio::spawn(async move { process(socket, db_i).await });
-    }
-}
-
-async fn process(socket: TcpStream, db: Db) {
-    let mut connection = Connection::new(socket);
-
-    while let Some(frame) = connection.read_frame().await.unwrap() {
-        let response = match Command::from_frame(frame).unwrap() {
-            Set(cmd) => {
-                // The value is stored as `Vec<u8>`
-                db.lock().unwrap().insert(cmd.key().to_string(), cmd.value().clone());
-                Frame::Simple("OK".to_string())
-            }
-            Get(cmd) => {
-                if let Some(value) = db.lock().unwrap().get(cmd.key()) {
-                    Frame::Bulk(value.clone())
-                } else {
-                    Frame::Null
-                }
-            }
-            cmd => panic!("unimplemented {:?}", cmd),
-        };
-
-        // Write the response to the client
-        connection.write_frame(&response).await.unwrap();
-    }
-}