铁锈动态特性变量与不同的通用类型新?

2022-05-25 00:00:00 rust mysql traits generics rust-diesel

我对铁锈还是个新手。正在尝试使用DIESEL-RS创建数据库连接。

以下是我的部分代码:

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())
}

以下是编译器错误:

error[E0191]: the value of the associated types `Backend` (from trait `Connection`), `TransactionManager` (from trait `Connection`) must be specified
  --> src/quant/common/persistence/database.rs:11:25
   |
11 |     connection: Box<dyn Connection>,
   |                         ^^^^^^^^^^ help: specify the associated types: `Connection<Backend = Type, TransactionManager = Type>`

当程序使用不同的参数启动时,是否可以创建不同的连接?


解决方案

不支持此用例。See this issue。如果您设法使用Connection实现这一点,您将不得不包装事务和查询,然后很可能包装一些生成的table!类型,最后陷入困境。

相关文章