所以我试图在这些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相互作用的方式搞砸了,但我不确定。
答案 0 :(得分:4)
请查看Cargo documentation on overriding dependencies:
要指定覆盖,请在项目目录的某个祖先中创建一个
.cargo/config
文件(将它放在代码目录的根目录或主目录中的常用位置)。在该文件中,输入:
paths = ["/path/to/project/rand"]
更深入,您可能会遇到issue 22750 - 两个不同版本的crate交互会导致无用的错误消息。当您向dependencies
添加rustc-serialize时,您不是替换旧版本,而是添加一个新版本。
一般来说,这是一个很好的功能。如果我的项目依赖于板条箱A和B并且它们都依赖于板条箱Z但是具有不同的版本,Rust可以处理它就好了。当他们从这些板条箱中重新出口物品时就会出现问题。