metatext/MastodonAPI/Sources/MastodonAPI/Endpoints/ResultsEndpoint.swift

104 lines
2.6 KiB
Swift
Raw Normal View History

2020-09-26 06:37:30 +00:00
// Copyright © 2020 Metabolist. All rights reserved.
import Foundation
import HTTP
import Mastodon
public enum ResultsEndpoint {
2021-01-23 03:48:33 +00:00
case search(Search)
}
public extension ResultsEndpoint {
struct Search {
public let query: String
public let type: SearchType?
public let excludeUnreviewed: Bool
public let resolve: Bool
public let limit: Int?
public let offset: Int?
public let following: Bool
public init(query: String,
type: SearchType? = nil,
excludeUnreviewed: Bool = false,
2021-05-10 05:10:14 +00:00
resolve: Bool = true,
2021-01-23 03:48:33 +00:00
limit: Int? = nil,
offset: Int? = nil,
following: Bool = false) {
self.query = query
self.type = type
self.excludeUnreviewed = excludeUnreviewed
self.resolve = resolve
self.limit = limit
self.offset = offset
self.following = following
}
}
}
public extension ResultsEndpoint.Search {
enum SearchType: String {
case accounts
case hashtags
case statuses
}
2020-09-26 06:37:30 +00:00
}
extension ResultsEndpoint: Endpoint {
public typealias ResultType = Results
public var APIVersion: String {
switch self {
case .search:
return "v2"
}
}
public var pathComponentsInContext: [String] {
switch self {
case .search:
return ["search"]
}
}
public var method: HTTPMethod {
switch self {
case .search:
return .get
}
}
2020-10-27 03:01:12 +00:00
public var queryParameters: [URLQueryItem] {
2020-09-26 06:37:30 +00:00
switch self {
2021-01-23 03:48:33 +00:00
case let .search(search):
var params = [URLQueryItem(name: "q", value: search.query)]
if let type = search.type {
params.append(.init(name: "type", value: type.rawValue))
}
if search.excludeUnreviewed {
params.append(.init(name: "exclude_unreviewed", value: "true"))
}
2020-09-26 06:37:30 +00:00
2021-01-23 03:48:33 +00:00
if search.resolve {
2020-10-27 03:01:12 +00:00
params.append(.init(name: "resolve", value: "true"))
2020-09-26 06:37:30 +00:00
}
2021-01-23 03:48:33 +00:00
if let limit = search.limit {
params.append(.init(name: "limit", value: String(limit)))
}
if let offset = search.offset {
params.append(.init(name: "offset", value: String(offset)))
}
if search.following {
params.append(.init(name: "following", value: "true"))
}
2020-09-26 06:37:30 +00:00
return params
}
}
}