Crate cargo_manifest

source ·
Expand description

§cargo-manifest

serde definitions to read and write Cargo.toml files.

§Description

This Rust crate contains various structs and enums to represent the contents of a Cargo.toml file. These definitions can be used with serde and the toml crate to read and write Cargo.toml manifest files.

This crate also to some degree supports post-processing of the data to emulate Cargo’s workspace inheritance and autobins features. This is used for example by crates.io to extract whether a crate contains a library or executable binaries.

[!NOTE] The cargo team regularly adds new features to the Cargo.toml file definition. This crate aims to keep up-to-date with these changes. You should keep this crate up-to-date to correctly parse all fields in modern Cargo.toml files.

§Installation

cargo add cargo-manifest

§Usage

use cargo_manifest::Manifest;

let manifest = Manifest::from_path("Cargo.toml").unwrap();

see docs.rs for more information.

§Users

§Alternatives

This crate is a fork of the cargo_toml project. There are only some minor differences between these projects at this point, you will need to evaluate which one fits your needs better.

There is also cargo-util-schemas now, which is maintained by the cargo team themselves. This crate was extracted from the cargo codebase and is used inside the cargo binary itself. It is kept up-to-date with the latest changes to the Cargo.toml file format, but is currently lacking some of the post-processing features that cargo-manifest provides.

§License

This project is licensed under either of

at your option.

Structs§

  • A AbstractFilesystem implementation that reads from the actual filesystem within the given root path.
  • When a dependency is defined as { workspace = true }, and workspace data hasn’t been applied yet.
  • The top-level Cargo.toml structure
  • You can replace Metadata type with your own to parse into something more useful than a generic toml Value
  • Cargo uses the term “target” for both “target platform” and “build target” (the thing to build), which makes it ambigous. Here Cargo’s bin/lib target is renamed to product.
  • The workspace.package table is where you define keys that can be inherited by members of a workspace. These keys can be inherited by defining them in the member package with {key}.workspace = true.

Enums§

Traits§

Type Aliases§