58 lines
1.9 KiB
Swift
58 lines
1.9 KiB
Swift
|
//
|
||
|
// Request.swift
|
||
|
// Pachyderm
|
||
|
//
|
||
|
// Created by Shadowfacts on 9/8/18.
|
||
|
// Copyright © 2018 Shadowfacts. All rights reserved.
|
||
|
//
|
||
|
|
||
|
import Foundation
|
||
|
|
||
|
struct Request<ResultType: Decodable> {
|
||
|
let method: Method
|
||
|
let path: String
|
||
|
let body: Body
|
||
|
var queryParameters: [Parameter]
|
||
|
|
||
|
init(method: Method, path: String, body: Body = .empty, queryParameters: [Parameter] = []) {
|
||
|
self.method = method
|
||
|
self.path = path
|
||
|
self.body = body
|
||
|
self.queryParameters = queryParameters
|
||
|
}
|
||
|
}
|
||
|
|
||
|
extension Request {
|
||
|
var range: RequestRange {
|
||
|
get {
|
||
|
let max = queryParameters.first { $0.name == "max_id" }
|
||
|
let since = queryParameters.first { $0.name == "since_id" }
|
||
|
let count = queryParameters.first { $0.name == "count" }
|
||
|
if let max = max, let count = count {
|
||
|
return .before(id: max.value!, count: Int(count.value!)!)
|
||
|
} else if let since = since, let count = count {
|
||
|
return .after(id: since.value!, count: Int(count.value!)!)
|
||
|
} else if let count = count {
|
||
|
return .count(Int(count.value!)!)
|
||
|
} else {
|
||
|
return .default
|
||
|
}
|
||
|
}
|
||
|
set {
|
||
|
let rangeParams = newValue.queryParameters
|
||
|
let max = rangeParams.first { $0.name == "max_id" }
|
||
|
let since = rangeParams.first { $0.name == "since_id" }
|
||
|
let count = rangeParams.first { $0.name == "count" }
|
||
|
if let max = max, let i = queryParameters.firstIndex(where: { $0.name == "max_id" }) {
|
||
|
queryParameters[i] = max
|
||
|
}
|
||
|
if let since = since, let i = queryParameters.firstIndex(where: { $0.name == "since_id" }) {
|
||
|
queryParameters[i] = since
|
||
|
}
|
||
|
if let count = count, let i = queryParameters.firstIndex(where: { $0.name == "count" }) {
|
||
|
queryParameters[i] = count
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|