所以我尝试使用 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/