cargo-px

Cargo Power eXtensions


Crates.io version Download


Check out the announcement post to learn more about cargo-px and the problems it solves with respect to code generation in Rust projects.

Table of Contents

  1. How to install
  2. How to use
  3. License

How To Install

You can install cargo-px from crates.io with

bash cargo install cargo-px --locked

How to use

It is designed as a cargo proxy: instead of invoking cargo <CMD> <ARGS>, you go for cargo px <CMD> <ARGS>. For example, you go for cargo px build --all-features instead of cargo build --all-features.

cargo px examines your workspace every time you invoke it.
If any of your crates needs to be generated, it will invoke the respective code generators before forwarding the command and its arguments to cargo.

cargo px leverages the metadata section.
In the crate that you want to see generated, you fill in the [package.metadata.px.generate] section as follows:

```toml [package] name = "..." version = "..."

[...]

[package.metadata.px.generate]

The generator is a binary in the current workspace.

It's the only generator type we support at the moment.

generatortype = "cargoworkspace_binary"

The name of the binary.

generator_name = "bp"

The arguments to be passed to the binary.

It can be omitted if there are no arguments.

generator_args = ["--quiet", "--profile", "optimised"] ```

cargo-px will detect the configuration and invoke cargo run --bin bp -- --quiet --profile="optimised" for you.
If there are multiple crates that need to be code-generated, cargo-px will invoke the respective code-generators in an order that takes into account the dependency graph (i.e. dependencies are always code-generated before their dependents).

cargo-px will also set two environment variables for the code generator:

License

Licensed under either of Apache License, Version 2.0 or MIT license at your option. Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.