Browse Source

Updated Saphir banchmarks to v2.0.1 (#5525)

* Added rust framework saphir

* Added rust/saphir to testdir inside .travis.yml

* Added desciption + relevant links to the readme.md

* Saphir 2.0.0
Richer Archambault 5 years ago
parent
commit
ffa12896b9

+ 7 - 3
frameworks/Rust/saphir/Cargo.toml

@@ -1,11 +1,15 @@
 [package]
 name = "saphir-techempower"
-version = "0.1.0"
+version = "0.2.0"
 authors = ["richer <[email protected]>"]
 edition = "2018"
 
+[profile.release]
+lto = true
+codegen-units = 1
+
 [dependencies]
-saphir = "0.8.1"
+saphir = { version = "2.0.1", features = ["macro", "json"] }
 serde = "1.0"
 serde_derive = "1.0"
-serde_json = "1.0"
+tokio = { version = "0.2", features = ["full"] }

+ 2 - 6
frameworks/Rust/saphir/README.md

@@ -8,18 +8,14 @@ Saphir is a fast and lightweight web framework that aims to give lowlevel contro
 
 ### Test Type Implementation Source Code
 
-* [JSON](src/main.rs)
-* [PLAINTEXT](src/main.rs)
+* [JSON](src/json.rs)
+* [PLAINTEXT](src/plain.rs)
 * [DB](src/main.rs)
 * [QUERY](src/main.rs)
 * [CACHED QUERY](src/main.rs)
 * [UPDATE](src/main.rs)
 * [FORTUNES](src/main.rs)
 
-## Important Libraries
-The tests were run with:
-* [serde](https://github.com/serde-rs/serde)
-
 ## Test URLs
 ### JSON
 

+ 1 - 1
frameworks/Rust/saphir/benchmark_config.json

@@ -19,7 +19,7 @@
         "database_os": "Linux",
         "display_name": "Saphir",
         "notes": "",
-        "versus": "hyper"
+        "versus": "Rocket"
       }
     }
   ]

+ 3 - 3
frameworks/Rust/saphir/saphir.dockerfile

@@ -1,12 +1,12 @@
-FROM rust:1.36
+FROM rust:1.41
 
 WORKDIR /saphir
 
 ADD . .
 
 RUN cargo clean
-RUN cargo build --release
+RUN RUSTFLAGS="-C target-cpu=native" cargo build --release
 
 EXPOSE 8080
 
-ENTRYPOINT [ "./target/release/saphir-techempower" ]
+CMD ./target/release/saphir-techempower

+ 17 - 0
frameworks/Rust/saphir/src/json.rs

@@ -0,0 +1,17 @@
+use saphir::prelude::*;
+use serde_derive::Serialize;
+
+#[derive(Serialize)]
+struct RspMessage<'t0> {
+    message: &'t0 str,
+}
+
+pub struct JsonController;
+
+#[controller]
+impl JsonController {
+    #[get("/")]
+    async fn return_json(&self) -> (u16, Json<RspMessage<'static>>) {
+        (200, Json(RspMessage { message: crate::HELLO_WORLD }))
+    }
+}

+ 15 - 48
frameworks/Rust/saphir/src/main.rs

@@ -1,55 +1,22 @@
-extern crate saphir;
-#[macro_use]
-extern crate serde_derive;
-extern crate serde;
-extern crate serde_json;
+use saphir::prelude::*;
 
-use saphir::*;
+mod json;
+mod plain;
 
-static HELLO_WORLD: &'static [u8] = b"Hello, world!";
+pub static HELLO_WORLD: &'static str = "Hello, world!";
 
-#[derive(Serialize)]
-struct ResponseJsonBody<'t0> {
-    message: &'t0 str,
-}
-
-fn main() {
-    let server_builder = Server::builder();
-
-    let server = server_builder
-        .configure_router(|router| {
-            let plaintext = BasicController::new("^/plaintext", ());
-            plaintext.add(Method::GET, reg!("^/$"), |_, _, res| {
-                res.header(header::CONTENT_TYPE, "text/plain")
-                    .header(header::SERVER, "Saphir")
-                    .status(StatusCode::OK)
-                    .body(HELLO_WORLD);
-            });
-
-            let json = BasicController::new("^/json", ());
-            json.add(Method::GET, reg!("^/$"), |_, _, res| {
-                let body = ResponseJsonBody {
-                    message: "hello, world!",
-                };
-                let json_str = ::serde_json::to_string(&body)
-                    .expect("this body serialization should never fail");
-                res.header(header::CONTENT_TYPE, "application/json")
-                    .header(header::SERVER, "Saphir")
-                    .status(StatusCode::OK)
-                    .body(json_str);
-            });
-
-            router.add(plaintext).add(json)
+#[tokio::main]
+async fn main() -> Result<(), SaphirError> {
+    let server = Server::builder()
+        .configure_listener(|l| {
+            l.interface("0.0.0.0:8080")
         })
-        .configure_listener(|listener_config| {
-            listener_config
-                .set_uri("http://0.0.0.0:8080")
-                .set_request_timeout_ms(5000) // 10 sec
-                .set_panic_handler(|panic| {
-                    println!("HA HA! : {:?}", panic);
-                })
+        .configure_router(|r| {
+            r
+                .controller(json::JsonController)
+                .controller(plain::PlainController)
         })
         .build();
 
-    server.run().unwrap();
-}
+    server.run().await
+}

+ 11 - 0
frameworks/Rust/saphir/src/plain.rs

@@ -0,0 +1,11 @@
+use saphir::prelude::*;
+
+pub struct PlainController;
+
+#[controller(name = "plaintext")]
+impl PlainController {
+    #[get("/")]
+    async fn return_plain(&self) -> (u16, &'static str) {
+        (200, crate::HELLO_WORLD)
+    }
+}