¿Cómo almacenar objetos de conexión y declaración rusqlite en la misma estructura en Rust? [duplicar]

Esta pregunta ya tiene una respuesta aquí:

¿Por qué no puedo almacenar un valor y una referencia a ese valor en la misma estructura? 2 respuestas

Estoy trabajando en mi primer programa Rust y me he encontrado con la semántica de propiedad de Rust. He declarado unstruct que encapsulará una conexión de base de datos SQLite para que mantenga unConnection miembro. Por razones de rendimiento, también quiero mantener una declaración preparada, representada por elStatement tipo. Aquí hay una versión simplificada de mi código:

extern crate rusqlite; // 0.14.0

use rusqlite::{Connection, Statement};

pub struct Foo<'a> {
    conn: Connection,
    statement: Statement<'a>,
}

impl<'a> Foo<'a> {
    pub fn new() -> Foo<'a> {
        let conn = Connection::open(&":memory:").unwrap();
        let statement = conn
            .prepare("INSERT INTO Foo(name, hash) VALUES($1, $2)")
            .unwrap();
        Foo { conn, statement }
    }
}

Estoy tratando de transferir la propiedad deconn variable a la persona que llama almacenándola en un miembro deFoo, pero cuando intento compilar este código falla:

error[E0597]: `conn` does not live long enough
  --> src/main.rs:13:25
   |
13 |         let statement = conn
   |                         ^^^^ borrowed value does not live long enough
...
17 |     }
   |     - borrowed value only lives until here
   |
note: borrowed value must be valid for the lifetime 'a as defined on the impl at 10:6...
  --> src/main.rs:10:6
   |
10 | impl<'a> Foo<'a> {
   |      ^^

Por alguna razón, elrusqlite::Connection type no toma un parámetro de por vida, por lo que no puedo vincular explícitamente su vida útil a la delStatement ejemplo.

¿Qué me estoy perdiendo? Este tipo de encapsulación es un patrón muy común, estoy seguro de que me falta algo.

Respuestas a la pregunta(1)

Su respuesta a la pregunta