//===----------------------------------------------------------------------===// // // This source file is part of the Hummingbird server framework project // // Copyright (c) 2021-2021 the Hummingbird authors // Licensed under Apache License v2.0 // // See LICENSE.txt for license information // See hummingbird/CONTRIBUTORS.txt for the list of Hummingbird authors // // SPDX-License-Identifier: Apache-2.0 // //===----------------------------------------------------------------------===// /// Lambda function. Can add this to object being rendered to filter contents of objects. /// /// See http://mustache.github.io/mustache.5.html for more details on /// mustache lambdas. /// e.g /// ``` /// struct Object { /// let name: String /// let wrapped: MustacheLambda /// } /// let willy = Object(name: "Willy", wrapped: .init({ string in /// return "\(string)" /// })) /// let mustache = "{{#wrapped}}{{name}} is awesome.{{/wrapped}}" /// let template = try MustacheTemplate(string: mustache) /// let output = template.render(willy) /// print(output) // Willy is awesome /// ``` /// public struct MustacheLambda { /// lambda callback public typealias Callback = (String) -> Any? let callback: Callback /// Initialize `MustacheLambda` /// - Parameter cb: function to be called by lambda public init(_ cb: @escaping Callback) { self.callback = cb } /// Initialize `MustacheLambda` /// - Parameter cb: function to be called by lambda public init(_ cb: @escaping () -> Any?) { self.callback = { _ in cb() } } internal func callAsFunction(_ s: String) -> Any? { self.callback(s) } }