选择性模型库



我怎么能让依赖于功能的板条箱使用另一个版本的相同板条箱,比如下面的

[features]
serde_1 = ["dep_serde_1"]
serde_1_0_133 = ["dep_serde_1_0_133"]
[dependencies]
dep_serde_1 = { package = "serde", version = "1.0.0", optional = true}
dep_serde_1_0_133 = { package = "serde", version = "1.0.133", optional = true}

我的问题是编译器强迫我使用

use dep_serde_1::*;

除了这个

use serde::*;

我一次只启用其中一个,在使用cfg(feature = serde_1)的代码中,我将选择必须编译的代码

很抱歉我的英语不好

[编辑]

例如,驱动这个问题的主要思想如果我的模型使用activ-0.10,而另一个使用lib的机箱使用activ-0.12,则会生成编译器错误

我不太清楚你想要什么。如果您希望在使用语句中机箱的名称为serde,您可以将其重命名回:

#[cfg(feature = "dep_serde_1")]
extern crate dep_serde_1 as serde;
#[cfg(feature = "dep_serde_1_0_133")]
extern crate dep_serde_1_0_133 as serde;
// Now you can
use serde::*;

[编辑:]以上介绍了您对serde的使用,但serde_derive有自己的想法。当你定义像这样的结构时

#[derive(Serialize)]
struct Asdf { /* … */ }

serde生成的代码大致如下:

const _: () = {
extern crate serde as _serde;
#[automatically_derived]
impl _serde::Serialize for Asdf { /* …

即,它忽略serde板条箱的重命名并尝试使用其原始名称的板条箱。

您可以使用crate容器属性覆盖此行为:

#[derive(Serialize)]
#[serde(crate = "serde")]
struct Asdf { /* … */ }

这将使生成的代码使用来自外部命名空间的序列号:

const _: () = {
use serde as _serde;
#[automatically_derived]
impl serde::Serialize for Asdf {

注意,互斥功能不是一个好主意。如果可以的话,最好将其中一个设为默认值,另一个覆盖它

我也不确定你的货物依赖关系是否真的在做你想让他们做的事。货物不允许两次依赖一个板条箱,如果我强迫dep_serde_1=1.0.0,货物会抱怨有冲突。

相关内容

  • 没有找到相关文章

最新更新