使用本地版本替换crates依赖项时出现问题

时间:2015-09-25 21:44:57

标签: rust

所以我试图在这些instructions之后使用bincode序列化一个结构,我能够让它工作。

但后来我想用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相互作用的方式搞砸了,但我不确定。

1 个答案:

答案 0 :(得分:4)

请查看Cargo documentation on overriding dependencies

  

要指定覆盖,请在项目目录的某个祖先中创建一个.cargo/config文件(将它放在代码目录的根目录或主目录中的常用位置)。

     

在该文件中,输入:

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

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

一般来说,这是一个很好的功能。如果我的项目依赖于板条箱A和B并且它们都依赖于板条箱Z但是具有不同的版本,Rust可以处理它就好了。当他们从这些板条箱中重新出口物品时就会出现问题。