-
-
Save ArtemGr/cae521d49677a905d63c to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#![feature(scoped_tls)] | |
#[macro_use] extern crate nickel; | |
use nickel::Nickel; | |
use nickel::router::http_router::HttpRouter; | |
use nickel::ResponseFinalizer; | |
struct MyObject; | |
impl MyObject { | |
fn foo(&self) {} | |
} | |
scoped_thread_local! (static MY_OBJECT: MyObject); | |
struct Middle; | |
impl nickel::Middleware for Middle { | |
fn invoke<'a, 'b> (&'a self, _: &mut nickel::Request<'b, 'a, 'b>, res: nickel::Response<'a>) -> nickel::MiddlewareResult<'a> { | |
MY_OBJECT.with (|obj| obj.foo()); | |
"hi\n".respond (res) | |
} | |
} | |
fn serve(obj: &MyObject) { | |
let mut server = Nickel::new(); | |
let mut router = Nickel::router(); | |
MY_OBJECT.set (obj, || { | |
router.get("/foo", Middle); | |
server.utilize(router); | |
server.listen("127.0.0.1:6767"); | |
}) | |
} | |
fn main() { | |
let obj = MyObject; | |
serve(&obj); | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#[macro_use] | |
extern crate nickel; | |
use nickel::Nickel; | |
use nickel::router::http_router::HttpRouter; | |
use nickel::ResponseFinalizer; | |
use std::mem::transmute; | |
struct MyObject; | |
impl MyObject { | |
fn foo(&self) {} | |
} | |
struct Middle (&'static MyObject); | |
impl nickel::Middleware for Middle { | |
fn invoke<'a, 'b> (&'a self, _: &mut nickel::Request<'b, 'a, 'b>, res: nickel::Response<'a>) -> nickel::MiddlewareResult<'a> { | |
self.0.foo(); | |
"hi\n".respond (res) | |
} | |
} | |
fn serve(obj: &MyObject) { | |
let mut server = Nickel::new(); | |
let mut router = Nickel::router(); | |
router.get("/foo", Middle (unsafe {transmute (obj)})); | |
server.utilize(router); | |
server.listen("127.0.0.1:6767"); | |
} | |
fn main() { | |
let obj = MyObject; | |
serve(&obj); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment