Tusker/Packages/Pachyderm/Sources/Pachyderm/Request/Request.swift

53 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 endpoint: Endpoint
let body: Body
var queryParameters: [Parameter]
init(method: Method, path: Endpoint, body: Body = EmptyBody(), queryParameters: [Parameter] = []) {
self.method = method
self.endpoint = 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)
}
}
}
}
}