我希望能够在我正在构建的服务的代码库中共享数据结构(模型)。我目前已将代码拆分为一个名为的库domain
和一个名为log_service
.
在domain
库中,我定义了一个包含 Log 信息的结构,如下所示。
pub struct Log {
pub id: u32,
pub message: String,
}
在log_service
二进制文件中,我想使用柴油作为数据库 ORM,并将domain
库中定义的这个结构用作表。柴油文档指出,为了将此结构用作数据库表,您需要派生某些特征(例如Queryable
)并可能应用其他属性。
然而,Rust 不允许在另一个 crate 中扩展这个结构,并且由于 Rust 中不存在继承,通常可以选择使用组合来包装domain
Log。但是因为diesel 使用struct 直接映射到表,所以不可能使用组合来公开字段,因为它们应该是struct 的顶层。
最好我不想在两个板条箱中复制粘贴这个结构。我一直在考虑使用宏从单一来源在两个代码库中生成这些结构,这仍然允许在二进制文件中扩展日志。
解决这个问题的最佳方法是什么?