< 返回版块

liberwang1013 发表于 2021-11-29 18:07

Tags:features

使用websocket库的过程中发现tungstenite-rs这个库对tls的支持有两个features, 一个是native-tls, 另一个是__rustls-tls, 为啥rustls要加个 __的前缀.

评论区

写评论
苦瓜小仔 2021-11-29 21:41

在 tungstenite 的 Cargo.toml

[dependencies.rustls]
optional = true
version = "0.20.0"

可知:rustls 是 tungstenite 的一个可选依赖,所以是 tungstenite 的一个 feature name。

[features]
__rustls-tls = ["rustls", "webpki"]

传达的意图是:rustls crate 和 webpki crate 两个 crate 对 tungstenite 而言是不容分开的,且用 __rustls-tls 这个 feature name 来描述这种绑定关系,从而引入依赖于两个 crates 的功能。即以下内容:

[features]
__rustls-tls = ["rustls", "webpki"]
rustls-tls-native-roots = ["__rustls-tls", "rustls-native-certs"]
rustls-tls-webpki-roots = ["__rustls-tls", "webpki-roots"]

等价于:

[features]
rustls-tls-native-roots = ["rustls", "webpki", "rustls-native-certs"]
rustls-tls-webpki-roots = ["rustls", "webpki", "webpki-roots"]

好了,可以回答你的问题了:为啥 rustls-tls 要加个 __ 前缀?

就像你给变量取名一样,你可以定义任意 feature 名,比如

[features]
rustls-webpki = ["rustls", "webpki"] # 写得很清楚,需要两个依赖
rustls-tls = ["rustls", "webpki"] # 去掉下划线

甚至你可以这样做

[dependencies.rustls]
optional = true
version = "0.20.0"
package = "__rustls" # 重命名依赖名

[features]
rustls = ["__rustls", "webpki"] # 让某个依赖名当作 feature name

Just a name!

__ 传达出的意图是:tungstenite 的作者觉得 __rustls-tls 仅仅用作中间产物,没打算让用户使用,因为用户可以这样引入

[dependencies.tungstenite]
default-features = false
features = ["rustls", "webpki"] # 而不是 features = ["__rustls-tls"],当然这也是合法引入
version = "*"
1 共 1 条评论, 1 页