diff --git a/Sources/HummingbirdMustache/Lambda.swift b/Sources/HummingbirdMustache/Lambda.swift
new file mode 100644
index 0000000..e3dee97
--- /dev/null
+++ b/Sources/HummingbirdMustache/Lambda.swift
@@ -0,0 +1,2 @@
+
+public typealias HBMustacheLambda = (Any, HBMustacheTemplate, HBMustacheLibrary?) -> String
diff --git a/Sources/HummingbirdMustache/Template+Render.swift b/Sources/HummingbirdMustache/Template+Render.swift
index a7ccc85..a20d9c8 100644
--- a/Sources/HummingbirdMustache/Template+Render.swift
+++ b/Sources/HummingbirdMustache/Template+Render.swift
@@ -41,6 +41,8 @@ extension HBMustacheTemplate {
return array.renderSection(with: template, library: library)
case let bool as Bool:
return bool ? template.render(parent, library: library) : ""
+ case let lambda as HBMustacheLambda:
+ return lambda(parent, template, library)
case .some(let value):
return template.render(value, library: library)
case .none:
diff --git a/Tests/HummingbirdMustacheTests/TemplateRendererTests.swift b/Tests/HummingbirdMustacheTests/TemplateRendererTests.swift
index 187fcad..35283f4 100644
--- a/Tests/HummingbirdMustacheTests/TemplateRendererTests.swift
+++ b/Tests/HummingbirdMustacheTests/TemplateRendererTests.swift
@@ -153,6 +153,19 @@ final class TemplateRendererTests: XCTestCase {
""")
}
+ func testMustacheManualExample5() throws {
+ let template = try HBMustacheTemplate(string: """
+ {{#wrapped}}{{name}} is awesome.{{/wrapped}}
+ """)
+ func wrapped(object: Any, template: HBMustacheTemplate, library: HBMustacheLibrary?) -> String {
+ return "\(template.render(object, library: library))"
+ }
+ let object: [String: Any] = ["name": "Willy", "wrapped": wrapped]
+ XCTAssertEqual(template.render(object), """
+ Willy is awesome.
+ """)
+ }
+
func testMustacheManualExample6() throws {
let template = try HBMustacheTemplate(string: """
{{#person?}}