Browse Source

Merge pull request #1638 from waiteb3/nickel_rust

Add Rust with Iron and Nickel
Mike Smith 10 years ago
parent
commit
e2973e00d1

+ 2 - 0
.travis.yml

@@ -152,6 +152,8 @@ env:
     - "TESTDIR=Ruby/rails"
     - "TESTDIR=Ruby/rails-stripped"
     - "TESTDIR=Ruby/sinatra"
+    - "TESTDIR=Rust/iron"
+    - "TESTDIR=Rust/nickel"
     - "TESTDIR=Scala/akka-http"
     - "TESTDIR=Scala/colossus"
     - "TESTDIR=Scala/finagle"

+ 9 - 0
frameworks/Rust/iron/Cargo.toml

@@ -0,0 +1,9 @@
+[package]
+
+name = "iron"
+version = "0.0.1"
+
+[dependencies]
+rustc-serialize = "0.3"
+iron = "0.1.18"
+router = "0.0.10"

+ 24 - 0
frameworks/Rust/iron/benchmark_config.json

@@ -0,0 +1,24 @@
+{
+  "framework": "iron",
+  "tests": [{
+    "default": {
+      "setup_file": "setup",
+      "json_url": "/json",
+      "plaintext_url": "/plaintext",
+      "port": 8080,
+      "approach": "Realistic",
+      "classification": "Framework",
+      "database": "",
+      "framework": "iron",
+      "language": "rust",
+      "orm": "",
+      "platform": "Rust",
+      "webserver": "hyper",
+      "os": "Linux",
+      "database_os": "Linux",
+      "display_name": "iron",
+      "notes": "",
+      "versus": ""
+    }
+  }]
+}

+ 3 - 0
frameworks/Rust/iron/install.sh

@@ -0,0 +1,3 @@
+#!/bin/bash
+
+fw_depends rust

+ 7 - 0
frameworks/Rust/iron/setup.sh

@@ -0,0 +1,7 @@
+#!/bin/bash
+
+source $IROOT/rust.installed
+
+rm -rf target/
+cargo build --release
+./target/release/iron &

+ 32 - 0
frameworks/Rust/iron/src/main.rs

@@ -0,0 +1,32 @@
+extern crate iron;
+extern crate router;
+extern crate rustc_serialize;
+
+use iron::{Iron, Request, Response, IronResult};
+use iron::status;
+use router::{Router};
+use rustc_serialize::json;
+
+#[derive(RustcDecodable, RustcEncodable)]
+struct Message {
+    message: String,
+}
+
+fn main() {
+    let mut router = Router::new();
+    router.get("/json", jsonHandler);
+    router.get("/plaintext", plaintextHandler);
+
+    Iron::new(router).http("127.0.0.1:8080").unwrap();
+}
+
+fn jsonHandler(req: &mut Request) -> IronResult<Response> {
+    let message: Message = Message{
+        message: "Hello, World!".to_string(),
+    };
+    Ok(Response::with((status::Ok, json::encode(&message).unwrap())))
+}
+
+fn plaintextHandler(req: &mut Request) -> IronResult<Response> {
+    Ok(Response::with((status::Ok, "Hello, World!")))
+}

+ 9 - 0
frameworks/Rust/nickel/Cargo.toml

@@ -0,0 +1,9 @@
+[package]
+
+name = "nickel"
+version = "0.0.1"
+
+[dependencies]
+rustc-serialize = "0.3"
+nickel = "0.5.0"
+nickel_macros = "0.1.0"

+ 24 - 0
frameworks/Rust/nickel/benchmark_config.json

@@ -0,0 +1,24 @@
+{
+  "framework": "nickel",
+  "tests": [{
+    "default": {
+      "setup_file": "setup",
+      "json_url": "/json",
+      "plaintext_url": "/plaintext",
+      "port": 8080,
+      "approach": "Realistic",
+      "classification": "Framework",
+      "database": "",
+      "framework": "nickel",
+      "language": "rust",
+      "orm": "",
+      "platform": "Rust",
+      "webserver": "hyper",
+      "os": "Linux",
+      "database_os": "Linux",
+      "display_name": "nickel",
+      "notes": "",
+      "versus": ""
+    }
+  }]
+}

+ 3 - 0
frameworks/Rust/nickel/install.sh

@@ -0,0 +1,3 @@
+#!/bin/bash
+
+fw_depends rust

+ 7 - 0
frameworks/Rust/nickel/setup.sh

@@ -0,0 +1,7 @@
+#!/bin/bash
+
+source $IROOT/rust.installed
+
+rm -rf target/
+cargo build --release
+./target/release/nickel &

+ 31 - 0
frameworks/Rust/nickel/src/main.rs

@@ -0,0 +1,31 @@
+#[macro_use] extern crate nickel;
+extern crate rustc_serialize;
+
+use nickel::{ Nickel, HttpRouter, MediaType };
+use rustc_serialize::json;
+
+#[derive(RustcDecodable, RustcEncodable)]
+struct Message {
+    message: String,
+}
+
+fn main() {
+    let mut server = Nickel::new();
+    let mut router = Nickel::router();
+
+    router.get("/json", middleware!{ |_, mut response|
+        response.set(MediaType::Json);
+        let message: Message = Message{
+            message: "Hello, World!".to_string(),
+        };
+        json::encode(&message).unwrap()
+    });
+
+    router.get("/plaintext", middleware! { |_, mut response|
+        response.set(MediaType::Txt);
+        "Hello, World!"
+    });
+
+    server.utilize(router);
+    server.listen("127.0.0.1:8080");
+}

+ 14 - 0
toolset/setup/linux/languages/rust.sh

@@ -0,0 +1,14 @@
+#!/bin/bash
+
+RETCODE=$(fw_exists $IROOT/rust.installed)
+[ ! "$RETCODE" == 0 ] || { . $IROOT/rust.installed; return 0; }
+
+fw_get https://static.rust-lang.org/dist/rust-1.0.0-x86_64-unknown-linux-gnu.tar.gz
+fw_untar rust-1.0.0-x86_64-unknown-linux-gnu.tar.gz
+(
+	cd rust-1.0.0-x86_64-unknown-linux-gnu
+	./install.sh --prefix=$IROOT/rust
+)
+
+echo -e "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$IROOT/rust/lib" > $IROOT/rust.installed
+echo -e "export PATH=$IROOT/rust/bin:$PATH" >> $IROOT/rust.installed