This looks correct to me. It is the same behavior at play as in the following minimized form:
trait Trait {
fn f(arg: &'static u8);
}
struct S;
impl Trait for S {
fn f(_arg: &u8) {}
}
The relevant behavior is that trait impls are allowed to provide functions that are more general than what is required by the trait. In my code, the trait requires fn f<'a>(arg: &'a u8) where 'a: 'static, and the trait impl for S has dropped the where-clause 'a: 'static to provide the more general implementation fn f<'a>(arg: &'a u8).
In your top snippet, the trait From<&'a User> requires a function with the signature fn from(user: &'a User) -> Self i.e. fn from<'from>(user: &'from User) -> Self where 'from: 'a. The trait impl for UserProtoBuf drops that where-clause and provides the more general implementation signature fn from<'b>(user: &'b User) -> Self which can accept an arbitrarily short 'b.