我如何使用一个库来共享模型,而这个库应该在一个带Rust的二进制文件中直接扩展?
我希望能够为我正在构建的服务共享代码库中的数据结构(模型)。 我目前已将名为我如何使用一个库来共享模型,而这个库应该在一个带Rust的二进制文件中直接扩展?,rust,rust-diesel,Rust,Rust Diesel,我希望能够为我正在构建的服务共享代码库中的数据结构(模型)。 我目前已将名为域的库和名为日志服务的二进制文件中的代码拆分 在域库中,我定义了一个包含日志信息的结构,如下所示 pub struct Log { pub id: u32, pub message: String, } 在log\u服务二进制文件中,我想使用diesel作为数据库ORM,并使用域库中定义的此结构作为表。diesel文档说明,为了将此结构用作数据库表,您需要派生某些特性(例如,Queryable),并可能
域
的库和名为日志服务
的二进制文件中的代码拆分
在域
库中,我定义了一个包含日志信息的结构,如下所示
pub struct Log {
pub id: u32,
pub message: String,
}
在log\u服务
二进制文件中,我想使用diesel作为数据库ORM,并使用域
库中定义的此结构作为表。diesel文档说明,为了将此结构用作数据库表,您需要派生某些特性(例如,Queryable
),并可能应用其他属性
但是,Rust不允许从另一个板条箱中扩展此结构,并且由于Rust中不存在继承,因此通常可以选择使用组合来包装域
日志。但是因为diesel使用结构直接映射到表,所以不可能使用组合来公开字段,因为它们应该是结构的顶层
我最好不要在两个板条箱中复制粘贴此结构。
我一直在考虑使用宏从单个源代码在两个代码库中生成这些结构,这仍然允许在二进制代码中扩展日志
解决这个问题的最佳方法是什么 不。如果你必须保持项目的当前结构,这是不容易做到的
俄罗斯国家:
。。。每个trait实现必须满足以下任一条件:
T=C
|&C
|&mutc
|盒子
简单地说,trait或struct必须位于板条箱的本地,以便您实现它
因此,您最简单的选择是为
域
板条箱本身中的日志
结构派生。为什么需要在域
中定义它,而不是日志服务
,在哪里可以直接导出所需内容?@LotB我需要在多个服务之间共享这些结构,而无需复制粘贴它们的定义,因为它们将相互利用。
T = C
| &C
| &mut C
| Box<C>