Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I specify features for a sub-dependency in Cargo?

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?

like image 877
Cameron Taggart Avatar asked Jan 30 '20 21:01

Cameron Taggart


1 Answers

I agree with you, having support for sub-dependencies features would be great.

It's not ideal but if you add your sub-dependency as a dependency the feature is going to work.

[dependencies]
...
surf = "2.1.0" # which depends on http-client, which depends on isahc
...

[dependencies.isahc]
features = ["static-ssl"]

If you don't specify a version you'll get a deprecation warning, but at least you won't have to keep track of the sub-dependency version manually:

warning: dependency (isahc) specified without providing a local path, Git repository, or version to use. This will be considered an error in future versions
like image 98
framp Avatar answered Oct 22 '22 05:10

framp