capacity_builder

Crates.iocapacity_builder
lib.rscapacity_builder
version
sourcesrc
created_at2024-12-09 05:56:02.420993
updated_at2024-12-10 03:19:54.67829
descriptionBuilders where the code to calculate the capacity is the same as the code to write what's being built.
homepage
repositoryhttps://github.com/dsherret/capacity_builder
max_upload_size
id1476975
Cargo.toml error:TOML parse error at line 17, column 1 | 17 | autolib = false | ^^^^^^^ unknown field `autolib`, expected one of `name`, `version`, `edition`, `authors`, `description`, `readme`, `license`, `repository`, `homepage`, `documentation`, `build`, `resolver`, `links`, `default-run`, `default_dash_run`, `rust-version`, `rust_dash_version`, `rust_version`, `license-file`, `license_dash_file`, `license_file`, `licenseFile`, `license_capital_file`, `forced-target`, `forced_dash_target`, `autobins`, `autotests`, `autoexamples`, `autobenches`, `publish`, `metadata`, `keywords`, `categories`, `exclude`, `include`
size0
David Sherret (dsherret)

documentation

README

capacity_builder

Builders where the code to calculate the capacity is the same as the code to write what's being built.

Overview

Sometimes you have some complex code that would be a bit of a pain to calculate the capacity of or could risk easily getting out of sync with the implementation. This crate makes keeping it in sync easier because it's the same code.

use capacity_builder::StringBuilder;

let text = StringBuilder::build(|builder| {
  for (i, import_module) in import_modules.iter().enumerate() {
    builder.append("// ");
    builder.append(i);
    builder.append(" import\n");
    builder.append("import \"");
    builder.append(import_module);
    builder.append("\";\n");
  }
})?;

Behind the scenes it runs the closure once to compute the capacity and a second time to write the string.

Features

  1. The builder prevents adding owned data—only references.
    • This helps to prevent accidentally allocating data multiple times in the closure.
  2. Errors when capacity cannot be reserved.
  3. For the string builder, types other than references can be provided.
    • Numbers get written with the itoa crate.

Tips

  • Do any necessary allocations before running the closure.
  • Measure before and after using this crate to ensure you're not slower.
Commit count: 9

cargo fmt