因为前向兼容性考虑(防止在类型的 trait 使用处添加另一个 trait 实现导致库中断),以及可能会使编译变得更加困难,所以我发现禁止孤儿 trait 实现是有理由的。但我想知道 Rust 社区认为哪种解决方法最理想:
(以防这不够背景信息:我正在尝试使用 rusqlite 和 chrono 的 DateTime
。所以我想要为 DateTime<UTC>
实现 rusqlite 的 FromSql
和 ToSql
traits,但显然这并不像我想象的那么容易——我目前刚开始接触 Rust。)
- 分支 rusqlite 并实现 trait。(我觉得这不是最好的做法,因为也许只是我需要 trait 实现,所以我可能不得不保持自己的分支更新。而且我无法实现这些 traits,因为存在一些复杂的泛型问题,我还没有完全理解。)
- 实现自己的
DateTime
结构体(这可能是最好的解决方法,但我觉得这只是一些不必要的工作复制)。 - 以某种方式“复制”
DateTime<UTC>
trait 并给它一个别名,并为我的别名类型实现FromSql
和ToSql
traits(然而,我认为这也不是简单的,当我尝试时,它仍然被视为外部类型,所以我无法让它起作用)。
我希望有人能向我解释如何最好地解决这个问题,根据我的纯面向对象编程经验,我只想能够继承 DateTime
并实现接口,但是(出于有效的原因),这不是 Rust 的做法...