На основании определения Transaction
кажется, что вам нужен спецификатор / параметр времени жизни в самой структуре, а не в ссылке на параметр функции:
async fn tx_work(trans: &tokio_postgres::Transaction<'_>)
Это использует анонимное время жизни, но вы также можете явно указать параметр времени жизни:
async fn tx_work<'a>(trans: &tokio_postgres::Transaction<'a>)
Обычно эти времена жизни связывают с другими существующими временами жизни, например, если у вас уже было явное время жизни где-то еще, и это имеет смысл сделать это, вы можете передать его как параметр напрямую.
Это потому, что tokio_postgres::Transaction
не полностью определяет тип больше, чем Vec
(по сравнению с Vec<u8>
), т.е. спецификаторы времени жизни являются частью имени типа, поэтому вам потребуется tokio_postgres::Transaction<'some_lifetime>
, но, очевидно, вы также можете использовать анонимное время жизни '_
.
Более конкретно, здесь параметр времени жизни Transaction
относится на время жизни ссылок, содержащихся в структуре Transaction
, тогда как время жизни ссылки на структуру Transaction
(например, вы ini
Если это все еще сбивает с толку, я рекомендую вам прочитать прекрасную главу о жизнях из книги. Это неотъемлемая часть парадигмы программирования на Rust.