* Make `MustacheSequence` public * `MustacheSequence` require conformance to `Sequence` * remove protocol requirements * `MustacheContext` revert to `internal`
53 lines
1.9 KiB
Swift
53 lines
1.9 KiB
Swift
//===----------------------------------------------------------------------===//
|
|
//
|
|
// 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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
/// Protocol for objects that can be rendered as a sequence in Mustache
|
|
public protocol MustacheSequence: Sequence {}
|
|
|
|
extension MustacheSequence {
|
|
/// Render section using template
|
|
func renderSection(with template: MustacheTemplate, context: MustacheContext) -> String {
|
|
var string = ""
|
|
var sequenceContext = MustacheSequenceContext(first: true)
|
|
|
|
var iterator = makeIterator()
|
|
guard var currentObject = iterator.next() else { return "" }
|
|
|
|
while let object = iterator.next() {
|
|
string += template.render(context: context.withSequence(currentObject, sequenceContext: sequenceContext))
|
|
currentObject = object
|
|
sequenceContext.first = false
|
|
sequenceContext.index += 1
|
|
}
|
|
|
|
sequenceContext.last = true
|
|
string += template.render(context: context.withSequence(currentObject, sequenceContext: sequenceContext))
|
|
|
|
return string
|
|
}
|
|
|
|
/// Render inverted section using template
|
|
func renderInvertedSection(with template: MustacheTemplate, context: MustacheContext) -> String {
|
|
var iterator = makeIterator()
|
|
if iterator.next() == nil {
|
|
return template.render(context: context.withObject(self))
|
|
}
|
|
return ""
|
|
}
|
|
}
|
|
|
|
extension Array: MustacheSequence {}
|
|
extension Set: MustacheSequence {}
|
|
extension ReversedCollection: MustacheSequence {}
|