#cargo-toml #codegen #builder #cargo

build lmrc-toml-writer

Type-safe TOML generation for Cargo.toml files

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

MIT/Apache

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 = true syntax
  • 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 version
  • members(vec) / member(path) - Add workspace members
  • exclude(vec) - Exclude paths from workspace
  • workspace_version(version) - Set workspace version
  • workspace_edition(edition) - Set workspace edition
  • workspace_authors(vec) / workspace_author(author) - Set authors
  • workspace_license(license) - Set license
  • workspace_repository(url) - Set repository URL
  • dependency(name, spec) - Add workspace dependency
  • dependencies(iter) - Add multiple dependencies
  • build() - Generate TOML string

PackageToml

Builder for package manifest files.

Methods:

  • version(version) / workspace_version() - Set or inherit version
  • edition(edition) / workspace_edition() - Set or inherit edition
  • authors(vec) / workspace_authors() - Set or inherit authors
  • license(license) / workspace_license() - Set or inherit license
  • repository(url) / workspace_repository() - Set or inherit repository
  • description(desc) - Set description
  • keywords(vec) / keyword(kw) - Add keywords
  • categories(vec) / category(cat) - Add categories
  • bin(name, path) - Add binary target
  • dependency(name, version) - Add regular dependency
  • dependency_inline(name, spec) - Add dependency with inline table
  • workspace_dependency(name) - Add workspace dependency
  • workspace_dependency_with_version(name, version) - Add workspace dependency with version override
  • dev_dependency(name, version) - Add dev dependency
  • build() - 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