[英]How can I make two features enabled lead to a conflict in Rust?
我有兩個功能: feature_1
和feature_2
:
[features]
default = ["feature_1"]
feature_1 = []
feature_2 = []
我想讓用戶一次只選擇其中一個,因為同時選擇兩個會導致一些重要代碼的重復以及其他一些原因。 我該怎么做?
從根本上說,你不能。 Cargo 特性是可添加的,特性可以被依賴樹中的任何 crate 啟用。 Cargo 有一個隱含的假設,即啟用附加功能總是有效的。
更重要的是,功能不僅僅是請求,它們是需求。 如果一個板條箱需要feature_1
,而另一個板條箱需要feature_2
,則您有兩個板條箱不可能一起工作。 Cargo(和 Rust 本身)不遺余力地嘗試使這種情況難以創建。
最好的解決方案是更改您的 crate 的編寫方式,以便可以同時啟用這兩個功能。 如果這真的不可能,你能做的最好的事情就是阻止編譯成功。 這可以通過用於檢測不兼容功能並失敗的 crate 的構建腳本來完成,或者通過將非編譯代碼放入僅在啟用不兼容功能時啟用的 crate 中。
對於它的價值,我選擇使用這種方法:
#[cfg(all(feature = "feature_1", feature = "feature_2"))]
compile_error!("Feature 1 and 2 are mutually exclusive and cannot be enabled together");
我希望它能幫助其他人尋找解決同樣問題的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.