首页 > 解决方案 > Cargo 工作空间中具有不同功能的多个版本的本地依赖项 (Rust)

问题描述

我有一个包含 3 个包的工作区,这些包依赖于第四个包,也在工作区中。我们称它们为 A、B、C 和 D 是它们都依赖的包。

包 D 具有条件编译功能,如果传递了“async-traits”,它将为 tokio 编译一组特征,如果为 async-std 的“async-std-traits”,如果两者都没有,则基于std::io::{Read, Write}常规阻塞编译特征IO。然后它会做一个全面的 impl 来为实现这些其他特征的任何类型提供一些默认功能。这些功能标志旨在相互排斥。

单独我可以很好地构建所有这些板条箱。但是,当我尝试在工作区中构建它们或运行它们时clippy --all,它们无法构建一个错误,即“不满足特征绑定”

https://github.com/leshow/tokio-i3ipc/blob/master/i3ipc-types/src/lib.rs#L95

#[cfg(all(feature = "async-traits", not(feature = "async-std-traits")))]
impl<T: AsyncRead + AsyncWrite> I3Protocol for T {}

#[cfg(all(feature = "async-std-traits", not(feature = "async-traits")))]
impl<T: AsyncStdRead + AsyncStdWrite> I3Protocol for T {}

impl<T: io::Read + io::Write + I3Protocol> I3IPC for T {}

#[cfg(all(not(feature = "async-traits"), not(feature = "async-std-traits")))]
impl<T: io::Read + io::Write> I3Protocol for T {}

这些是在工作空间中似乎发生冲突的实现。

我究竟做错了什么?

标签: rustrust-cargo

解决方案


推荐阅读