Skip to content

Instantly share code, notes, and snippets.

@ArtemGr
Forked from gyscos/gist:42510a335098ce935848
Last active August 29, 2015 14:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ArtemGr/cae521d49677a905d63c to your computer and use it in GitHub Desktop.
Save ArtemGr/cae521d49677a905d63c to your computer and use it in GitHub Desktop.
#![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);
}
#[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