rust - 用本地版本替换 crate 依赖项时出现问题

标签 rust

所以我尝试使用 bincode 按照这些 instructions 序列化一个结构,我能够让它发挥作用。

但是后来我想用 IpAddr 序列化一个结构体枚举。自 IpAddr没有实现Encodable需要特质,我从 git 下载了 rustc_serialize 箱子并为 IpAddr 实现了可编码。我。然后我改变了我的Cargo.toml文件至:

[dependencies]
# rustc-serialize = "0.3"
byteorder = "0.3"
bincode = "0.4"

[dependencies.rustc-serialize]
path = "src/rustc-serialize-master"

但是现在,我使用的结构中的相同代码无法编译 rustc_serialize::serialize::Encodable即使我有 #[derive(RustcEncodable)] 也没有为我的结构实现在结构之上。

即使我删除了添加到 rustc_serialize 本地版本中的代码,我仍然收到该错误。

我认为这可能是由于 bincode 和本地 rustc_serialize 交互方式搞砸了,但我不确定。

最佳答案

请查看Cargo documentation on overriding dependencies :

To specify overrides, create a .cargo/config file in some ancestor of your project's directory (common places to put it is in the root of your code directory or in your home directory).

Inside that file, put this:

paths = ["/path/to/project/rand"]

再深入一点,您可能会遇到 issue 22750 - 两个不同版本的 crate 交互会导致无用的错误消息。当您将 rustc-serialize 添加到依赖项时,您并不是替换旧版本,而是添加一个新版本。

总的来说,这是一个很好的功能。如果我的项目依赖于 crate A 和 B,并且它们都依赖于 crate Z 但版本不同,Rust 可以很好地处理这个问题。当他们从这些 crate 中重新导出元素时,问题就出现了。

关于rust - 用本地版本替换 crate 依赖项时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32791086/

相关文章:

rust - 如果返回类型是通用的,我可以返回 &str 输入的切片吗?

pattern-matching - Rust 匹配数字条件

rust - 你如何在 Rust 中设置、清除和切换单个位?

rust - 在没有转变的情况下为拥有的奶牛重用向量堆空间?

rust - 如何正确使用 std::arch::_mm_loadu_si128/_mm_storeu_si128

rust - “静态作为函数约束”是什么意思?

rust - 我如何从 Rust 调用原始地址?

generics - 如何让 Rust 函数接受任何 float 类型作为参数

multithreading - Future::spawn() 有点没用?我怎样才能多线程呢?

rust - Rust 中的 Chain Vector 和 IntoIterator 元素