Docxide Template - Type safe MS Word templates for Rust.
docxide-template is a Rust crate for working with .docx / MS Word templates. It reads .docx template files, finds {placeholder} patterns in document text, and generates type-safe Rust structs with those placeholders as fields. The generated structs include a save() method that produces a new .docx with placeholders replaced by field values and a to_bytes() for outputting the raw bytes.
Usage
Place your .docx templates in a folder (e.g. path/to/templates/), using {PlaceholderName} for variables.
Then invoke the macro:
use generate_templates;
generate_templates!;
Placeholders are converted to snake_case struct fields automatically:
| Placeholder in template | Struct field |
|---|---|
{FirstName} |
first_name |
{last_name} |
last_name |
{middle-name} |
middle_name |
{companyName} |
company_name |
{USER_COUNTRY} |
user_country |
{first name} |
first_name |
{ ZipCode } |
zip_code |
{ZIPCODE} |
zipcode |
Note: all upper- or lower-caps without a separator (like
ZIPCODE) can't be split into words — useZIP_CODEor another format if you want it to becomezip_code.
Polymorphism
All generated structs implement the DocxTemplate trait, which lets you write functions that accept any template type. This is useful for batch processing, pipelines, or anywhere you don't want to care about which specific template you're working with:
use ;
use Path;
generate_templates!;
The trait provides to_bytes(), save(), replacements(), and template_path(), so generic code has full access to both output generation and introspection. See the batch export example.
Embedded templates
By default, generate_templates! reads template files from disk at runtime. If you want a fully self-contained binary with no runtime file dependencies, enable the embed feature:
With embed enabled, template bytes are baked into the binary at compile time via include_bytes!. The same generate_templates! macro is used.
Examples
See the examples/ directory for details.
Save to file — fill a template and write it to disk:
To bytes — fill a template and get the .docx as Vec<u8> in memory, useful for piping into other processing steps:
Embedded — template bytes baked into the binary, no runtime file access needed:
Batch export — process different template types uniformly via dyn DocxTemplate:
How it works
- The proc macro scans the given directory for
.docxfiles at compile time - Each file becomes a struct named after the filename (PascalCase)
{placeholder}patterns become struct fields (snake_case)save()opens the original template, replaces all placeholders in the XML, and writes a new.docx
License
MIT