feat: rendering library v1 (#15778)

The goal will be to replace askama
This commit is contained in:
jif-oai
2026-03-25 16:07:04 +00:00
committed by GitHub
parent 504aeb0e09
commit f190a95a4f
6 changed files with 510 additions and 1 deletions

View File

@@ -0,0 +1,41 @@
# codex-utils-template
Small, strict string templating for prompt and text assets.
Supported syntax:
- `{{ name }}` placeholder interpolation
- `{{{{` for a literal `{{`
- `}}}}` for a literal `}}`
The library is intentionally strict:
- parsing fails on malformed placeholders
- rendering fails on missing values
- rendering fails on duplicate values
- rendering fails on extra values not used by the template
## Example
```rust
use codex_utils_template::Template;
use codex_utils_template::render;
let template = Template::parse(
"Hello, {{ name }}.\nLiteral braces: {{{{ and }}}}.\nMode: {{ mode }}",
)?;
let rendered = template.render([
("name", "Codex"),
("mode", "strict"),
])?;
assert_eq!(
rendered,
"Hello, Codex.\nLiteral braces: {{ and }}.\nMode: strict"
);
let one_shot = render("Hi {{ who }}!", [("who", "there")])?;
assert_eq!(one_shot, "Hi there!");
# Ok::<(), Box<dyn std::error::Error>>(())
```