55 lines
1.6 KiB
Swift
55 lines
1.6 KiB
Swift
//
|
|
// Request.swift
|
|
// Pachyderm
|
|
//
|
|
// Created by Shadowfacts on 9/8/18.
|
|
// Copyright © 2018 Shadowfacts. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
public struct Request<ResultType: Decodable> {
|
|
let method: Method
|
|
let baseURL: URL?
|
|
let path: String
|
|
let body: Body
|
|
var queryParameters: [Parameter]
|
|
|
|
init(method: Method, baseURL: URL? = nil, path: String, body: Body = .empty, queryParameters: [Parameter] = []) {
|
|
self.method = method
|
|
self.baseURL = baseURL
|
|
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
|
|
for param in rangeParams {
|
|
if let i = queryParameters.firstIndex(where: { $0.name == param.name }) {
|
|
queryParameters[i] = param
|
|
} else {
|
|
queryParameters.append(param)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|