Skip to content

Instantly share code, notes, and snippets.

@zslayton
Last active August 29, 2015 14:14
Show Gist options
  • Save zslayton/f6811f9929348957f730 to your computer and use it in GitHub Desktop.
Save zslayton/f6811f9929348957f730 to your computer and use it in GitHub Desktop.
pub trait ToMessageHandler {
fn to_message_handler<'a>(self) -> Box<MessageHandler + 'a>;
}
impl <'b, F> ToMessageHandler for F where F : Fn(&Frame) -> AckOrNack + 'b {
fn to_message_handler<'a>(self) -> Box<MessageHandler + 'a> {
Box::new(ClosureMessageHandler{closure : self}) as Box<MessageHandler>
}
}
// ERROR
subscription.rs:90:5: 90:75 error: the parameter type `F` may not live long enough [E0309]
subscription.rs:90 Box::new(ClosureMessageHandler{closure : self}) as Box<MessageHandler>
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
subscription.rs:90:5: 90:75 help: consider adding an explicit lifetime bound `F: 'a`...
subscription.rs:90 Box::new(ClosureMessageHandler{closure : self}) as Box<MessageHandler>
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
subscription.rs:90:5: 90:75 note: ...so that it can be closed over into an object
subscription.rs:90 Box::new(ClosureMessageHandler{closure : self}) as Box<MessageHandler>
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment