rust - Expected bound lifetime parameter, found concrete lifetime -


i can't figure out lifetime parameters code. try results in compiler error: "expected bound lifetime parameter 'a, found concrete lifetime" or "consider using explicit lifetime parameter shown" (and example shown doesn't help) or "method not compatible trait".

request, response, , action simplified versions keep example minimal.

struct request {     data: string, } struct response<'a> {     data: &'a str, }  pub enum action<'a> {     next(response<'a>),     done, }  pub trait handler: send + sync {     fn handle<'a>(&self, req: request, res: response<'a>) -> action<'a>; }  impl<'a, t> handler t     t: send + sync + fn(request, response<'a>) -> action<'a>, {     fn handle(&self, req: request, res: response<'a>) -> action<'a> {         (*self)(req, res)     } }  fn main() {     println!("running"); } 

rust playground

your trait function definition this:

fn handle<'a>(&self, req: request, res: response<'a>) -> action<'a>; 

note 'a specified caller , can , not tied self in way.

your trait implementation definition this:

fn handle(&self, req: request, res: response<'a>) -> action<'a>; 

'a not here specified caller, instead tied type implementing trait for. trait implementation not match trait definition.

here need:

trait handler: send + sync {     fn handle<'a>(&self, req: request, res: response<'a>) -> action<'a>; }  impl<t> handler t     t: send + sync + for<'a> fn(request, response<'a>) -> action<'a>, {     fn handle<'a>(&self, req: request, res: response<'a>) -> action<'a> {         (*self)(req, res)     } } 

the key point change in t bound: for<'a> fn(request, response<'a>) -> action<'a>. means: “given arbitrary lifetime parameter 'a, t must satisfy fn(request, response<'a>) -> action<'a>; or, “t must, 'a, satisfy fn(request, response<'a>) -> action<'a>.


Comments

Popular posts from this blog

python - ValueError: empty vocabulary; perhaps the documents only contain stop words -

java - UnknownEntityTypeException: Unable to locate persister (Hibernate 5.0) -

ubuntu - collect2: fatal error: ld terminated with signal 9 [Killed] -