Dynamic names support (#49)

* Dynamic names support

* Add support for dynamic names in parent tags

* Support all dynamic names spec

* Swift 5.8 compile fix
This commit is contained in:
Adam Fowler
2024-08-28 08:31:06 +01:00
committed by GitHub
parent a010f172c5
commit 01b1f21ed6
5 changed files with 178 additions and 8 deletions

View File

@@ -101,6 +101,28 @@ extension MustacheTemplate {
return template.render(context: context.withPartial(indented: indentation, inheriting: overrides))
}
case .dynamicNamePartial(let name, let indentation, let overrides):
let child = self.getChild(named: name, transforms: [], context: context)
guard let childName = child as? String else {
return ""
}
if var template = context.library?.getTemplate(named: childName) {
#if DEBUG
if context.reloadPartials {
guard let filename = template.filename else {
preconditionFailure("Can only use reload if template was generated from a file")
}
do {
guard let partialTemplate = try MustacheTemplate(filename: filename) else { return "Cannot find template at \(filename)" }
template = partialTemplate
} catch {
return "\(error)"
}
}
#endif
return template.render(context: context.withPartial(indented: indentation, inheriting: overrides))
}
case .contentType(let contentType):
context = context.withContentType(contentType)