Expand description
§tmpl_resolver
A lightweight template resolution engine with conditional logic support.
§Key Concepts
- Templates: Contain either direct text parts or conditional selectors
- Selectors: Enable branch logic based on parameter values
- Variable Resolution: Recursive resolution with context-aware lookup
§Features
[]
- Minimal configuration for
no_std
use
- Minimal configuration for
- [“std”]
- Enables standard library
- Uses ahash::HashMap for faster lookups
- [“serde”]
- Adds serialization capabilities
- Enables template storage/transmission
- [“bincode”]
- Efficient binary serialization
- [“toml”]
- Enables
ResolverError::{DecodeTomlError, EncodeTomlError}
- Enables
§Examples
§Basic
use tmpl_resolver::{TemplateResolver, error::ResolverResult};
fn main() -> ResolverResult<()> {
let resolver: TemplateResolver = [
("h", "Hello"),
("greeting", "{h} { $name }! Today is {$day}")
]
.try_into()?;
let result = resolver.get_with_context("greeting", &[("name", "Alice"), ("day", "Monday")])?;
assert_eq!(result, "Hello Alice! Today is Monday");
Ok(())
}
§Conditional Logic
use tmpl_resolver::{TemplateResolver, error::ResolverResult};
fn main() -> ResolverResult<()> {
let selector_msg = [(
"message",
r#"$status ->
[success] Operation succeeded!
[error] Error occurred!
*[default] Unknown status: {$status}
"#
)];
let resolver: TemplateResolver = selector_msg.try_into()?;
let success_msg = resolver.get_with_context("message", &[("status", "success")])?;
assert_eq!(success_msg, "Operation succeeded!");
Ok(())
}
§Escape
"{{ a }}"
=>"a"
"{{{a}}}"
=>"a"
"{{{{ a }}}}"
=>"a"
"{{ {a} }}"
=>"{a}"
"{{a}"
=> ❌ nom Error, code: take_until"{{{ {{a}} }}}"
=>"{{a}}"
"{{{ {{ a }} }}}"
=>"{{ a }}"
"{{{ {{a} }}}"
=>"{{a}"
use tmpl_resolver::{error::ResolverResult, TemplateResolver};
fn main() -> ResolverResult<()> {
let resolver: TemplateResolver = [
("h", "Hello { $name }"),
("how_are_you", "How Are You"),
("greeting", "{h}!{{ how_are_you }}? {{ {$name} }}"),
]
.try_into()?;
// dbg!(&resolver);
let ctx = [("name", "Alice")];
let result = resolver.get_with_context("greeting", &ctx)?;
assert_eq!(result, "Hello Alice!how_are_you? {$name}");
Ok(())
}
Re-exports§
pub use error::ResolverError as Error;
pub use error::ResolverResult as Result;
pub use resolver::TemplateResolver;
Modules§
Enums§
- Template
- Core template representation
Type Aliases§
- Context
Map std
- Context
MapBuf std