【问题标题】:rust dyn trait variable new with different generic types?具有不同泛型类型的新生锈 dyn 特征变量?
【发布时间】:2022-01-20 05:19:28
【问题描述】:

我对 Rust 很陌生。正在尝试使用柴油机创建数据库连接。

这是我的部分代码:

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>`

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

【问题讨论】:

  • 根据您想要做什么,您可以创建自己的包装器特征MyConnection,它委托给实现Connection 的类型,但不需要各种关联的类型参数。然后,您可以改为处理 MyConnection 类型的特征对象。
  • 你考虑过枚举吗?

标签: mysql generics rust traits rust-diesel


【解决方案1】:

不支持此用例。 See this issue。如果您设法通过连接做到这一点,您将不得不包装事务和查询,然后可能会包装一些生成的table! 类型,并一直到兔子洞。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-20
    • 2023-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多