rust - 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 {}
这些是在工作空间中似乎发生冲突的实现。
我究竟做错了什么?
解决方案
推荐阅读
- python-3.x - 代码显示在系统上正常工作时未在服务器上定义“sql_connection”
- asciidoc - 如何使用 Asciidoctor 获得文字块的行号?
- python - ModuleNotFoundError:没有名为“src”的模块。从没有 sys.path 的另一个目录导入模块并从现有目录执行它们
- javascript - 我在 CytoscapeComponent 中编写的 console.log 的工作次数与我单击 cy 屏幕时单击屏幕上的按钮的次数一样多
- python - 如何模拟在模拟对象上调用的函数,以返回特定值
- php - PHP循环槽文件夹并删除旧文件/空文件夹
- electron - 节点通知程序在生产中不工作 | 我做错了什么?
- reactjs - 我们可以在 React 应用程序中覆盖 webpack DefinePlugin 的变量吗
- node.js - Runtime.HandlerNotFound aws lambda node.js
- css - 如何使用滚动捕捉 CSS 控制/更改动画的速度?