I'm working on a CLI app that uses reqwest and self_update. self_update also uses reqwest. I want my app to use rustls and not pull in openssl dependencies. Cargo.toml allows choosing features of dependencies:
[dependencies.reqwest]
version = "0.10"
default-features = false
features = ["rustls-tls", "json", "blocking"]
It would be cool if sub-dependencies worked:
[dependencies.self_update.reqwest]
version = "0.10"
default-features = false
features = ["rustls-tls", "json", "blocking"]
I also looked at replace section, but only something like this works where I branch the code:
"reqwest:0.10.1" = { branch = "rustls", git = "https://github.com/ctaggart/reqwest" }
But what I want is default-features and features supported too:
"reqwest:0.10.1" = { tag="v0.10.1", git = "https://github.com/seanmonstar/reqwest", default-features = false, features = ["rustls-tls", "json", "blocking"] }
How do I configure the features of Reqwest or Tokio or any other highly configurable non-direct dependency using Cargo?
reqwest
in your application with and without that feature. – mcartonself_update
from pulling in the openssl dependency, which is a default feature ofreqwest
? – Cameron Taggartself_update
itself must have a feature do that. Cargo can't know that it's safe to remove a feature from a sub-dependency because your dependencies might actually use that feature. – mcartonrustls
feature toself_update
, but cargo does not support different dependencies based on features. github.com/rust-lang/cargo/issues/5954 I think it would be a weird design to have to bubble up every optional feature to the consuming library. – Cameron Taggart