57 lines
1.7 KiB
Swift
57 lines
1.7 KiB
Swift
// Copyright © 2020 Metabolist. All rights reserved.
|
|
|
|
import Foundation
|
|
import HTTP
|
|
import Mastodon
|
|
|
|
public enum StatusesEndpoint {
|
|
case timelinesPublic(local: Bool)
|
|
case timelinesTag(String)
|
|
case timelinesHome
|
|
case timelinesList(id: List.Id)
|
|
case accountsStatuses(id: Account.Id, excludeReplies: Bool, onlyMedia: Bool, pinned: Bool)
|
|
}
|
|
|
|
extension StatusesEndpoint: Endpoint {
|
|
public typealias ResultType = [Status]
|
|
|
|
public var context: [String] {
|
|
switch self {
|
|
case .timelinesPublic, .timelinesTag, .timelinesHome, .timelinesList:
|
|
return defaultContext + ["timelines"]
|
|
case .accountsStatuses:
|
|
return defaultContext + ["accounts"]
|
|
}
|
|
}
|
|
|
|
public var pathComponentsInContext: [String] {
|
|
switch self {
|
|
case .timelinesPublic:
|
|
return ["public"]
|
|
case let .timelinesTag(tag):
|
|
return ["tag", tag]
|
|
case .timelinesHome:
|
|
return ["home"]
|
|
case let .timelinesList(id):
|
|
return ["list", id]
|
|
case let .accountsStatuses(id, _, _, _):
|
|
return [id, "statuses"]
|
|
}
|
|
}
|
|
|
|
public var queryParameters: [URLQueryItem] {
|
|
switch self {
|
|
case let .timelinesPublic(local):
|
|
return [URLQueryItem(name: "local", value: String(local))]
|
|
case let .accountsStatuses(_, excludeReplies, onlyMedia, pinned):
|
|
return [URLQueryItem(name: "exclude_replies", value: String(excludeReplies)),
|
|
URLQueryItem(name: "only_media", value: String(onlyMedia)),
|
|
URLQueryItem(name: "pinned", value: String(pinned))]
|
|
default:
|
|
return []
|
|
}
|
|
}
|
|
|
|
public var method: HTTPMethod { .get }
|
|
}
|