Skip to content

Instantly share code, notes, and snippets.

Created June 23, 2015 11:52
Show Gist options
  • Save anonymous/bb9b4fcbbcafe823dd4c to your computer and use it in GitHub Desktop.
Save anonymous/bb9b4fcbbcafe823dd4c to your computer and use it in GitHub Desktop.
Shared via Rust Playground
use std::sync::mpsc::{channel, Sender};
use std::sync::Mutex;
use std::thread;
#[derive(Debug)]
enum Message { A, B }
struct Request;
struct Response;
struct IronError;
type IronResult<T> = Result<T, IronError>;
// copied from Iron
trait Handler: Send + Sync {
fn handle(&self, &mut Request) -> IronResult<Response>;
}
impl<F> Handler for F where F: Send + Sync + Fn(&mut Request) -> IronResult<Response> {
fn handle(&self, req: &mut Request) -> IronResult<Response> {
(*self)(req)
}
}
fn make_handler(tx: Sender<Message>) -> Box<Handler> {
let mtx = Mutex::new(tx);
Box::new(move |req: &mut Request| { mtx.lock().unwrap().send(Message::A); Ok(Response) })
}
fn iron_setup(tx: Sender<Message>) {
let handler = make_handler(tx);
handler.handle(&mut Request);
}
fn main() {
let (tx, rx) = channel::<Message>();
thread::spawn(move || iron_setup(tx.clone()));
println!("{:?}", rx.recv());
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment