包含可选依赖的依赖
Include dependency of optional dependency
在 Rust Cargo 中,如何根据包含的另一个依赖项来包含依赖项的可选功能?
具体来说,我想提供一个“serde”功能,它可以启用 serde 支持。我能做的是 [1]
[dependencies]
serde = { version = "1.0", optional = true }
Rust 自动将这种依赖导出为一个特性(据我所知)。
但是,我使用其他依赖项,它们也提供“serde”功能:
[dependencies]
otherpackage = { version = "1.0", features = ["serde"] }
serde = { version = "1.0", optional = true }
现在,“otherpackage”的 serde 特性只有在为这个包激活了“serde”特性时才应该包含在内。但是cargo不让我做
[features]
serde = [ "serde", "otherpackage/serde" ]
[dependencies]
otherpackage = { version = "1.0" }
serde = { version = "1.0", optional = true }
我知道这是由于“serde”功能和“serde”依赖项之间的名称冲突,我认为这也作为一项功能导出。所以,本质上现在有两个“serde”功能,这显然是行不通的。
如何在不重命名“serde”包的情况下仍然提供“serde”功能来解决这个问题?理想情况下,我只想禁用自动导出 serde 依赖项作为功能,或者能够指定“serde”包的功能依赖项。
How can I solve this with still offering a "serde" feature and without renaming the "serde" package?
Cargo 当前正在运行 namespaced features,它允许您拥有名为 serde
的功能和名为 serde
的依赖项而不会发生冲突。这还不是一个稳定的功能。
目前,唯一稳定的方法是重命名“serde”依赖项。但是,这不需要破坏其他任何东西;如“Advanced Cargo [features] Usage”中所述,您可以重命名并重命名返回。 像这样设置您的Cargo.toml:
[features]
serde = [ "serde_cr", "otherpackage/serde" ]
[dependencies]
otherpackage = { version = "1.0" }
serde_cr = { package = "serde", version = "1.0", optional = true }
这将使 crate 名称 serde_cr
对您的代码可见。然后在 lib.rs
:
中使用明确的 extern crate
重命名它
extern crate serde_cr as serde;
在 Rust Cargo 中,如何根据包含的另一个依赖项来包含依赖项的可选功能?
具体来说,我想提供一个“serde”功能,它可以启用 serde 支持。我能做的是 [1]
[dependencies]
serde = { version = "1.0", optional = true }
Rust 自动将这种依赖导出为一个特性(据我所知)。 但是,我使用其他依赖项,它们也提供“serde”功能:
[dependencies]
otherpackage = { version = "1.0", features = ["serde"] }
serde = { version = "1.0", optional = true }
现在,“otherpackage”的 serde 特性只有在为这个包激活了“serde”特性时才应该包含在内。但是cargo不让我做
[features]
serde = [ "serde", "otherpackage/serde" ]
[dependencies]
otherpackage = { version = "1.0" }
serde = { version = "1.0", optional = true }
我知道这是由于“serde”功能和“serde”依赖项之间的名称冲突,我认为这也作为一项功能导出。所以,本质上现在有两个“serde”功能,这显然是行不通的。
如何在不重命名“serde”包的情况下仍然提供“serde”功能来解决这个问题?理想情况下,我只想禁用自动导出 serde 依赖项作为功能,或者能够指定“serde”包的功能依赖项。
How can I solve this with still offering a "serde" feature and without renaming the "serde" package?
Cargo 当前正在运行 namespaced features,它允许您拥有名为 serde
的功能和名为 serde
的依赖项而不会发生冲突。这还不是一个稳定的功能。
目前,唯一稳定的方法是重命名“serde”依赖项。但是,这不需要破坏其他任何东西;如“Advanced Cargo [features] Usage”中所述,您可以重命名并重命名返回。 像这样设置您的Cargo.toml:
[features]
serde = [ "serde_cr", "otherpackage/serde" ]
[dependencies]
otherpackage = { version = "1.0" }
serde_cr = { package = "serde", version = "1.0", optional = true }
这将使 crate 名称 serde_cr
对您的代码可见。然后在 lib.rs
:
extern crate
重命名它
extern crate serde_cr as serde;