Skip to content

Commit

Permalink
2.17.0
Browse files Browse the repository at this point in the history
  • Loading branch information
dankinsoid committed Jun 10, 2023
1 parent 9c5cf01 commit 7f7d20a
Show file tree
Hide file tree
Showing 35 changed files with 2,342 additions and 879 deletions.
4 changes: 2 additions & 2 deletions Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,15 @@ let package = Package(
.library(name: "SwiftOpenAPI", targets: ["SwiftOpenAPI"]),
],
dependencies: [
.package(url: "https://github.com/pointfreeco/swift-custom-dump.git", from: "0.10.3")
.package(url: "https://github.com/pointfreeco/swift-custom-dump.git", from: "0.10.3"),
],
targets: [
.target(name: "SwiftOpenAPI", dependencies: []),
.testTarget(
name: "SwiftOpenAPITests",
dependencies: [
"SwiftOpenAPI",
.product(name: "CustomDump", package: "swift-custom-dump")
.product(name: "CustomDump", package: "swift-custom-dump"),
],
exclude: ["Mocks/"]
),
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ import PackageDescription
let package = Package(
name: "SomeProject",
dependencies: [
.package(url: "https://github.com/dankinsoid/SwiftOpenAPI.git", from: "2.16.7")
.package(url: "https://github.com/dankinsoid/SwiftOpenAPI.git", from: "2.17.0")
],
targets: [
.target(name: "SomeProject", dependencies: ["SwiftOpenAPI"])
Expand Down
106 changes: 106 additions & 0 deletions Sources/SwiftOpenAPI/Common/AnyRange.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
import Foundation

/// Range expression that supports all range operators
public struct AnyRange<Bound: Comparable>: RangeExpression {

public let lowerBound: Bound?
public let upperBound: Bound?
public let include: Set<RangeEdge>

public init(lowerBound: Bound?, upperBound: Bound?, include: Set<RangeEdge>) {
self.lowerBound = lowerBound.map { lowerBound in
upperBound.map { min(lowerBound, $0) } ?? lowerBound
}
self.upperBound = upperBound.map { upperBound in
lowerBound.map { min(upperBound, $0) } ?? upperBound
}
self.include = include
}

public subscript(_ edge: RangeEdge) -> Bound? {
switch edge {
case .lower: return lowerBound
case .upper: return upperBound
}
}

public func relative<C: Collection>(to collection: C) -> Range<Bound> where Bound == C.Index {
switch (lowerBound, upperBound, include.contains(.lower), include.contains(.upper)) {
case (.some(let lower), let .some(upper), true, true):
return (lower ... upper).relative(to: collection)
case (.some(let lower), let .some(upper), false, true):
return upLowerBound((lower ... upper).relative(to: collection), in: collection)
case (.some(let lower), let .some(upper), true, false):
return (lower ..< upper).relative(to: collection)
case (.some(let lower), let .some(upper), false, false):
return upLowerBound((lower ..< upper).relative(to: collection), in: collection)
case (.some(let lower), .none, true, _):
return (lower...).relative(to: collection)
case (.some(let lower), .none, false, _):
return upLowerBound((lower...).relative(to: collection), in: collection)
case (.none, let .some(upper), _, true):
return (...upper).relative(to: collection)
case (.none, let .some(upper), _, false):
return (..<upper).relative(to: collection)
case (.none, .none, _, _):
return collection.startIndex ..< collection.endIndex
}
}

public func contains(_ element: Bound) -> Bool {
let isUpper: Bool
if let lowerBound {
isUpper = include.contains(.lower) ? element >= lowerBound : element > lowerBound
} else {
isUpper = true
}
let isLower: Bool
if let upperBound {
isLower = include.contains(.upper) ? element <= upperBound : element < upperBound
} else {
isLower = true
}
return isLower && isUpper
}

public static var any: AnyRange {
AnyRange(lowerBound: nil, upperBound: nil, include: [])
}

private func upLowerBound<C: Collection>(_ range: Range<Bound>, in collection: C) -> Range<Bound> where Bound == C.Index {
guard range.upperBound > range.lowerBound else {
return range
}
return collection.index(after: range.lowerBound) ..< range.upperBound
}
}

@_disfavoredOverload
public func ... <Bound: Comparable>(_ lhs: Bound, _ rhs: Bound) -> AnyRange<Bound> {
AnyRange(lowerBound: lhs, upperBound: rhs, include: [.lower, .upper])
}

@_disfavoredOverload
public func ..< <Bound: Comparable>(_ lhs: Bound, _ rhs: Bound) -> AnyRange<Bound> {
AnyRange(lowerBound: lhs, upperBound: rhs, include: [.lower])
}

@_disfavoredOverload
public postfix func ... <Bound: Comparable>(_ lhs: Bound) -> AnyRange<Bound> {
AnyRange(lowerBound: lhs, upperBound: nil, include: [.lower])
}

@_disfavoredOverload
public prefix func ..< <Bound: Comparable>(_ rhs: Bound) -> AnyRange<Bound> {
AnyRange(lowerBound: nil, upperBound: rhs, include: [])
}

@_disfavoredOverload
public prefix func ... <Bound: Comparable>(_ rhs: Bound) -> AnyRange<Bound> {
AnyRange(lowerBound: nil, upperBound: rhs, include: [.upper])
}

public enum RangeEdge: Hashable {

case lower, upper
}
8 changes: 8 additions & 0 deletions Sources/SwiftOpenAPI/Common/Bool++.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import Foundation

extension Bool {

var nilIfFalse: Bool? {
self ? self : nil
}
}
10 changes: 5 additions & 5 deletions Sources/SwiftOpenAPI/Common/Collection++.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,16 @@ extension Collection {
}
}

extension Dictionary {
extension OrderedDictionary {

func mapKeys<T>(_ map: (Key) -> T) -> [T: Value] {
[T: Value](self.map { (map($0.key), $0.value) }) { _, new in
func mapKeys<T>(_ map: (Key) -> T) -> OrderedDictionary<T, Value> {
OrderedDictionary<T, Value>(self.map { (map($0.key), $0.value) }) { _, new in
new
}
}

func mapKeys<T, V>(_ map: (Key) -> T, values: (Value) -> V) -> [T: V] {
[T: V](self.map { (map($0.key), values($0.value)) }) { _, new in
func mapKeys<T, V>(_ map: (Key) -> T, values: (Value) -> V) -> OrderedDictionary<T, V> {
OrderedDictionary<T, V>(self.map { (map($0.key), values($0.value)) }) { _, new in
new
}
}
Expand Down
8 changes: 8 additions & 0 deletions Sources/SwiftOpenAPI/Common/File.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import Foundation

extension Decimal {

var double: Double {
(self as NSDecimalNumber).doubleValue
}
}

0 comments on commit 7f7d20a

Please sign in to comment.