I'm struggling with a lifetime issue, does someone here maybe know the magic massaging I need to do so the compiler can reason that those are the same lifetimes? pub struct An3155Host<'d, T, M> where T: Instance, M: Mode, { uart: &'d mut Uart<'d, T, M>, } impl<'d, T> An3155Host<'d, T, Async> where T: Instance, { pub fn new (uart: &'d mut Uart<'d, T, Async>) -> Self { Self { uart } } ... impl<'d, F : Fn(u32,&mut [u8]) -> Result<(), FlashingError>, T : Instance> StBootloaderHost<'d, T, F> { pub fn new( uart: Uart<'d, T, Async>, size: u32, get_data: F, ) -> Result , FlashingError> { Ok(Self { uart, _marker: core::marker::PhantomData, get_data, size, }) } pub async fn flash(&mut self) -> Result<(), FlashingError> { let get_data = &self.get_data; let size = self.size; let mut an3155 = crate::host::an3155::An3155Host::new(&mut self.uart);