Files
swiftpm-stencil/Sources/Filters.swift
2016-11-28 19:24:27 +00:00

64 lines
1.2 KiB
Swift

func toString(_ value: Any?) -> String? {
if let value = value as? String {
return value
} else if let value = value as? CustomStringConvertible {
return value.description
}
return nil
}
func capitalise(_ value: Any?) -> Any? {
if let value = toString(value) {
return value.capitalized
}
return value
}
func uppercase(_ value: Any?) -> Any? {
if let value = toString(value) {
return value.uppercased()
}
return value
}
func lowercase(_ value: Any?) -> Any? {
if let value = toString(value) {
return value.lowercased()
}
return value
}
func defaultFilter(value: Any?, arguments: [Any?]) -> Any? {
if let value = value {
return value
}
for argument in arguments {
if let argument = argument {
return argument
}
}
return nil
}
func joinFilter(value: Any?, arguments: [Any?]) throws -> Any? {
guard arguments.count == 1 else {
throw TemplateSyntaxError("'join' filter takes a single argument")
}
guard let separator = arguments.first as? String else {
throw TemplateSyntaxError("'join' filter takes a separator as string")
}
if let value = value as? [String] {
return value.joined(separator: separator)
}
return nil
}