First version

This commit is contained in:
Christoph Hagen
2022-08-16 10:39:05 +02:00
parent 104c5151b4
commit 14b935249f
44 changed files with 2891 additions and 8 deletions

View File

@@ -0,0 +1,12 @@
import Foundation
import Metal
extension Optional {
func unwrapped<T>(_ closure: (Wrapped) -> T) -> T? {
if case let .some(value) = self {
return closure(value)
}
return nil
}
}

View File

@@ -0,0 +1,39 @@
import Foundation
extension String {
var nonEmpty: String? {
self.isEmpty ? nil : self
}
var trimmed: String {
trimmingCharacters(in: .whitespacesAndNewlines)
}
func indented(by indentation: String) -> String {
components(separatedBy: "\n").joined(separator: "\n" + indentation)
}
var withoutEmptyLines: String {
components(separatedBy: "\n")
.filter { !$0.trimmed.isEmpty }
.joined(separator: "\n")
}
func dropAfterLast(_ separator: String) -> String {
components(separatedBy: separator).dropLast().joined(separator: separator)
}
func dropBeforeFirst(_ separator: String) -> String {
components(separatedBy: separator).dropFirst().joined(separator: separator)
}
func lastComponentAfter(_ separator: String) -> String {
components(separatedBy: separator).last!
}
func insert(_ content: String, beforeLast separator: String) -> String {
let parts = components(separatedBy: separator)
return parts.dropLast().joined(separator: separator) + content + separator + parts.last!
}
}