Bubble/Threaded/Data/SearchResults.swift

54 lines
1.6 KiB
Swift

//Made by Lumaa
import Foundation
public struct SearchResults: Decodable {
enum CodingKeys: String, CodingKey {
case accounts, statuses, hashtags
}
public let accounts: [Account]
public var relationships: [Relationship] = []
public let statuses: [Status]
public let hashtags: [Tag]
public var isEmpty: Bool {
accounts.isEmpty && statuses.isEmpty && hashtags.isEmpty
}
}
extension SearchResults: Sendable {}
public enum Search: Endpoint {
case search(query: String, type: String?, offset: Int?, following: Bool?)
case accountsSearch(query: String, type: String?, offset: Int?, following: Bool?)
public func path() -> String {
switch self {
case .search:
"search"
case .accountsSearch:
"accounts/search"
}
}
public func queryItems() -> [URLQueryItem]? {
switch self {
case let .search(query, type, offset, following),
let .accountsSearch(query, type, offset, following):
var params: [URLQueryItem] = [.init(name: "q", value: query)]
if let type {
params.append(.init(name: "type", value: type))
}
if let offset {
params.append(.init(name: "offset", value: String(offset)))
}
if let following {
params.append(.init(name: "following", value: following ? "true" : "false"))
}
params.append(.init(name: "resolve", value: "true"))
return params
}
}
}