Reporting progress using a Follower
You can get rid of the lifetimes completely, just replace every instance of:

&amp;'a N


with just:

N


See Playground

But why? Well, in your current code N is inferred to be i32. However, with my suggested changes N will be inferred to be &amp;'a i32. If you allow Rust to infer the reference it will also infer the correct lifetime for you.

But does this, as you ask, leak implementation details of DebugFollower? Not from a Rust perspective. In Rust, ownership details are very much part of the interface and not just an implementation detail. The key issue is that the Follower trait has to specify how long the references will be valid so that DebugFollower knows how long it is allowed to store those references.