28 releases
Uses new Rust 2024
| new 0.3.16 | Dec 11, 2025 |
|---|---|
| 0.3.15 | Dec 11, 2025 |
| 0.3.9 | Nov 30, 2025 |
| 0.2.12 | Nov 27, 2025 |
#234 in Build Utils
Used in lmrc-cli
34KB
609 lines
lmrc-toml-writer
Type-safe TOML generation for Cargo.toml files.
Overview
This library provides builder APIs for generating valid Cargo.toml files programmatically, avoiding error-prone string concatenation. It supports both workspace and package manifests with full type safety.
Features
- Type-safe builders - Generate TOML without string templates
- Workspace support - Full workspace manifest generation
- Package support - Full package manifest generation
- Workspace inheritance - Proper
workspace = truesyntax - Validated output - Generates syntactically correct TOML
Installation
[dependencies]
lmrc-toml-writer = "0.1.0"
Usage
Workspace Cargo.toml
use lmrc_toml_writer::WorkspaceToml;
let toml = WorkspaceToml::new()
.resolver("2")
.members(vec!["apps/api", "apps/web", "infra/pipeline"])
.workspace_version("0.1.0")
.workspace_edition("2021")
.workspace_authors(vec!["Team Name"])
.workspace_license("MIT OR Apache-2.0")
.workspace_repository("https://github.com/example/repo")
.dependency("tokio", r#"{ version = "1.0", features = ["full"] }"#)
.dependency("serde", r#"{ version = "1.0", features = ["derive"] }"#)
.dependency("thiserror", "2.0")
.build();
println!("{}", toml);
Output:
[workspace]
resolver = "2"
members = [
"apps/api",
"apps/web",
"infra/pipeline",
]
[workspace.package]
version = "0.1.0"
edition = "2021"
authors = ["Team Name"]
license = "MIT OR Apache-2.0"
repository = "https://github.com/example/repo"
[workspace.dependencies]
tokio = { version = "1.0", features = ["full"] }
serde = { version = "1.0", features = ["derive"] }
thiserror = "2.0"
Package Cargo.toml
use lmrc_toml_writer::PackageToml;
let toml = PackageToml::new("my-app")
.workspace_version()
.workspace_edition()
.workspace_authors()
.workspace_license()
.description("My awesome application")
.keywords(vec!["cli", "tool"])
.bin("my-app", "src/main.rs")
.workspace_dependency("tokio")
.workspace_dependency("serde")
.dependency("clap", r#"{ version = "4.5", features = ["derive"] }"#)
.dependency("reqwest", "0.11")
.build();
println!("{}", toml);
Output:
[package]
name = "my-app"
version.workspace = true
edition.workspace = true
authors.workspace = true
license.workspace = true
description = "My awesome application"
keywords = ["cli", "tool"]
[[bin]]
name = "my-app"
path = "src/main.rs"
[dependencies]
tokio = { workspace = true }
serde = { workspace = true }
clap = { version = "4.5", features = ["derive"] }
reqwest = "0.11"
API Reference
WorkspaceToml
Builder for workspace manifest files.
Methods:
resolver(version)- Set resolver versionmembers(vec)/member(path)- Add workspace membersexclude(vec)- Exclude paths from workspaceworkspace_version(version)- Set workspace versionworkspace_edition(edition)- Set workspace editionworkspace_authors(vec)/workspace_author(author)- Set authorsworkspace_license(license)- Set licenseworkspace_repository(url)- Set repository URLdependency(name, spec)- Add workspace dependencydependencies(iter)- Add multiple dependenciesbuild()- Generate TOML string
PackageToml
Builder for package manifest files.
Methods:
version(version)/workspace_version()- Set or inherit versionedition(edition)/workspace_edition()- Set or inherit editionauthors(vec)/workspace_authors()- Set or inherit authorslicense(license)/workspace_license()- Set or inherit licenserepository(url)/workspace_repository()- Set or inherit repositorydescription(desc)- Set descriptionkeywords(vec)/keyword(kw)- Add keywordscategories(vec)/category(cat)- Add categoriesbin(name, path)- Add binary targetdependency(name, version)- Add regular dependencydependency_inline(name, spec)- Add dependency with inline tableworkspace_dependency(name)- Add workspace dependencyworkspace_dependency_with_version(name, version)- Add workspace dependency with version overridedev_dependency(name, version)- Add dev dependencybuild()- Generate TOML string
Use Cases
This library is particularly useful for:
- Code generators - Generate Cargo.toml files for scaffolded projects
- Build tools - Programmatically create manifest files
- Project templates - Generate customized Cargo.toml based on configuration
- Workspace management - Dynamically manage workspace members
License
MIT OR Apache-2.0
Dependencies
~0.7–1.3MB
~30K SLoC