es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo se traduce al español “rust dyn trait variable new with different generic types?”

Soy bastante nuevo en Rust. Intentando crear una conexión de base de datos con diesel-rs.

Aquí está parte de mi código:

use diesel::Connecction;
use diesel::mysql::MysqlConnection;
use diesel::sqlite::SqliteConnection;

let engine = "mysql";
let mysql_url = "mysql://username:password@localhost:3306/test";
let sqlite_url = "sqlite://sqlite.db";
let connection: Box<dyn connection=""> = if engine == "mysql" {
  Box::new(MysqlConnection::establish(mysql_url).unwrap())
} else {
  Box::new(SqliteConnection::establish(sqlite_url).unwrap())
}

Aquí está el error del compilador:

error[E0191]: se debe especificar el valor de los tipos asociados <code>Backend</code> (del trait <code>Connection</code>), <code>TransactionManager</code> (del trait <code>Connection</code>)
  --> src/quant/common/persistence/database.rs:11:25
   |
11 |     connection: Box<dyn connection="">,
   |                         ^^^^^^^^^^ help: especifica los tipos asociados: <code>Connection</code>

¿Es posible crear una conexión diferente al iniciar el programa con diferentes parámetros?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible crear diferentes conexiones con diferentes parámetros al inicio del programa modificando el código proporcionado. El error del compilador indica que los tipos asociados Backend y TransactionManager deben especificarse para la Connection.

    Para solucionar el error y crear múltiples conexiones, puedes especificar los tipos asociados para cada implementación de conexión de la siguiente manera:

    use diesel::Connection;
    use diesel::mysql::MysqlConnection;
    use diesel::sqlite::SqliteConnection;
    
    fn main() {
        let engine = "mysql";
        let mysql_url = "mysql://username:password@localhost:3306/test";
        let sqlite_url = "sqlite://sqlite.db";
    
        let connection: Box<dyn></dyn><backend =="" diesel::mysql::mysql,="" transactionmanager="diesel::mysql::MysqlTransactionManager">> = if engine == "mysql" {
            Box::new(MysqlConnection::establish(mysql_url).unwrap())
        } else {
            Box::new(SqliteConnection::establish(sqlite_url).unwrap())
        };
    
        // Utiliza la variable `connection` para interactuar con la base de datos
    }
    

    Este código especifica los tipos asociados tanto para las implementaciones de MysqlConnection como SqliteConnectio de la trait Connection. Utiliza una declaración condicional para elegir entre crear una MysqlConnection o una SqliteConnection según el valor de engine.

    Nota: Asegúrate de incluir la crate diesel en tu archivo Cargo.toml e importar los módulos necesarios al inicio de tu archivo.

Comments are closed.