From 71c8861600d5cfa491750e4245cd5a6867288e12 Mon Sep 17 00:00:00 2001 From: Justin Mazzocchi <2831158+jzzocc@users.noreply.github.com> Date: Sun, 30 Aug 2020 18:40:58 -0700 Subject: [PATCH] Modularize HTTP code --- Development Assets/DevelopmentModels.swift | 1 + Development Assets/HTTPStubs.swift | 4 +-- .../MastodonTarget+Stubbing.swift | 2 +- Development Assets/StubbingURLProtocol.swift | 16 ++++++----- HTTP/.gitignore | 5 ++++ HTTP/Package.swift | 27 +++++++++++++++++++ .../Sources/HTTP/Client.swift | 16 +++++------ .../Sources/HTTP/Target.swift | 10 ++++--- HTTP/Tests/HTTPTests/HTTPTests.swift | 10 +++++++ Mastodon/Package.swift | 4 +-- .../Mastodon API => API}/APIClient.swift | 5 ++-- .../Mastodon API => API}/APIDecoder.swift | 0 .../Mastodon API => API}/APIEncoder.swift | 0 .../Target.swift => API/APITarget.swift} | 5 ++-- .../Mastodon API => API}/Endpoint.swift | 1 + .../Endpoints/AccessTokenEndpoint.swift | 1 + .../Endpoints/AccountEndpoint.swift | 1 + .../Endpoints/AppAuthorizationEndpoint.swift | 1 + .../Endpoints/ContextEndpoint.swift | 1 + .../Endpoints/DeletionEndpoint.swift | 1 + .../Endpoints/FilterEndpoint.swift | 1 + .../Endpoints/FiltersEndpoint.swift | 1 + .../Endpoints/InstanceEndpoint.swift | 1 + .../Endpoints/ListEndpoint.swift | 1 + .../Endpoints/ListsEndpoint.swift | 1 + .../Endpoints/Paged.swift | 1 + .../Endpoints/PreferencesEndpoint.swift | 1 + .../Endpoints/PushSubscriptionEndpoint.swift | 1 + .../Endpoints/StatusEndpoint.swift | 1 + .../Endpoints/TimelinesEndpoint.swift | 1 + Metatext.xcodeproj/project.pbxproj | 2 ++ Model/AppEnvironment.swift | 1 + Services/AuthenticationService.swift | 4 +-- .../AddIdentityViewModelTests.swift | 1 + 34 files changed, 101 insertions(+), 28 deletions(-) create mode 100644 HTTP/.gitignore create mode 100644 HTTP/Package.swift rename Mastodon/Sources/Mastodon/Networking/HTTPClient.swift => HTTP/Sources/HTTP/Client.swift (79%) rename Mastodon/Sources/Mastodon/Networking/HTTPTarget.swift => HTTP/Sources/HTTP/Target.swift (83%) create mode 100644 HTTP/Tests/HTTPTests/HTTPTests.swift rename Mastodon/Sources/Mastodon/{Networking/Mastodon API => API}/APIClient.swift (84%) rename Mastodon/Sources/Mastodon/{Networking/Mastodon API => API}/APIDecoder.swift (100%) rename Mastodon/Sources/Mastodon/{Networking/Mastodon API => API}/APIEncoder.swift (100%) rename Mastodon/Sources/Mastodon/{Networking/Mastodon API/Target.swift => API/APITarget.swift} (91%) rename Mastodon/Sources/Mastodon/{Networking/Mastodon API => API}/Endpoint.swift (98%) rename Mastodon/Sources/Mastodon/{Networking/Mastodon API => API}/Endpoints/AccessTokenEndpoint.swift (98%) rename Mastodon/Sources/Mastodon/{Networking/Mastodon API => API}/Endpoints/AccountEndpoint.swift (97%) rename Mastodon/Sources/Mastodon/{Networking/Mastodon API => API}/Endpoints/AppAuthorizationEndpoint.swift (98%) rename Mastodon/Sources/Mastodon/{Networking/Mastodon API => API}/Endpoints/ContextEndpoint.swift (97%) rename Mastodon/Sources/Mastodon/{Networking/Mastodon API => API}/Endpoints/DeletionEndpoint.swift (99%) rename Mastodon/Sources/Mastodon/{Networking/Mastodon API => API}/Endpoints/FilterEndpoint.swift (99%) rename Mastodon/Sources/Mastodon/{Networking/Mastodon API => API}/Endpoints/FiltersEndpoint.swift (97%) rename Mastodon/Sources/Mastodon/{Networking/Mastodon API => API}/Endpoints/InstanceEndpoint.swift (97%) rename Mastodon/Sources/Mastodon/{Networking/Mastodon API => API}/Endpoints/ListEndpoint.swift (98%) rename Mastodon/Sources/Mastodon/{Networking/Mastodon API => API}/Endpoints/ListsEndpoint.swift (96%) rename Mastodon/Sources/Mastodon/{Networking/Mastodon API => API}/Endpoints/Paged.swift (99%) rename Mastodon/Sources/Mastodon/{Networking/Mastodon API => API}/Endpoints/PreferencesEndpoint.swift (97%) rename Mastodon/Sources/Mastodon/{Networking/Mastodon API => API}/Endpoints/PushSubscriptionEndpoint.swift (99%) rename Mastodon/Sources/Mastodon/{Networking/Mastodon API => API}/Endpoints/StatusEndpoint.swift (98%) rename Mastodon/Sources/Mastodon/{Networking/Mastodon API => API}/Endpoints/TimelinesEndpoint.swift (98%) diff --git a/Development Assets/DevelopmentModels.swift b/Development Assets/DevelopmentModels.swift index 3afbf9c..3433b67 100644 --- a/Development Assets/DevelopmentModels.swift +++ b/Development Assets/DevelopmentModels.swift @@ -2,6 +2,7 @@ import Foundation import Combine +import HTTP import Mastodon // swiftlint:disable force_try diff --git a/Development Assets/HTTPStubs.swift b/Development Assets/HTTPStubs.swift index 6e7d48a..00a31ff 100644 --- a/Development Assets/HTTPStubs.swift +++ b/Development Assets/HTTPStubs.swift @@ -1,12 +1,12 @@ // Copyright © 2020 Metabolist. All rights reserved. import Foundation -import Mastodon +import HTTP struct HTTPStubs { static func stub( request: URLRequest, - target: HTTPTarget? = nil, + target: Target? = nil, userInfo: [String: Any] = [:]) -> HTTPStub? { guard let url = request.url else { return nil diff --git a/Development Assets/Mastodon API Stubs/MastodonTarget+Stubbing.swift b/Development Assets/Mastodon API Stubs/MastodonTarget+Stubbing.swift index e1a48e2..0c857b9 100644 --- a/Development Assets/Mastodon API Stubs/MastodonTarget+Stubbing.swift +++ b/Development Assets/Mastodon API Stubs/MastodonTarget+Stubbing.swift @@ -3,7 +3,7 @@ import Foundation import Mastodon -extension Target: Stubbing { +extension APITarget: Stubbing { func stub(url: URL) -> HTTPStub? { (endpoint as? Stubbing)?.stub(url: url) } diff --git a/Development Assets/StubbingURLProtocol.swift b/Development Assets/StubbingURLProtocol.swift index f32e1e2..e49d12e 100644 --- a/Development Assets/StubbingURLProtocol.swift +++ b/Development Assets/StubbingURLProtocol.swift @@ -1,14 +1,10 @@ // Copyright © 2020 Metabolist. All rights reserved. import Foundation -import Mastodon +import HTTP class StubbingURLProtocol: URLProtocol { - private static var targetsForURLs = [URL: HTTPTarget]() - - class func setTarget(_ target: HTTPTarget, forURL url: URL) { - targetsForURLs[url] = target - } + private static var targetsForURLs = [URL: Target]() override class func canInit(with task: URLSessionTask) -> Bool { true @@ -41,3 +37,11 @@ class StubbingURLProtocol: URLProtocol { override func stopLoading() {} } + +extension StubbingURLProtocol: TargetProcessing { + static func process(target: Target) { + if let url = try? target.asURLRequest().url { + targetsForURLs[url] = target + } + } +} diff --git a/HTTP/.gitignore b/HTTP/.gitignore new file mode 100644 index 0000000..95c4320 --- /dev/null +++ b/HTTP/.gitignore @@ -0,0 +1,5 @@ +.DS_Store +/.build +/Packages +/*.xcodeproj +xcuserdata/ diff --git a/HTTP/Package.swift b/HTTP/Package.swift new file mode 100644 index 0000000..b63650d --- /dev/null +++ b/HTTP/Package.swift @@ -0,0 +1,27 @@ +// swift-tools-version:5.3 + +import PackageDescription + +let package = Package( + name: "HTTP", + platforms: [ + .iOS(.v14), + .macOS(.v11) + ], + products: [ + .library( + name: "HTTP", + targets: ["HTTP"]) + ], + dependencies: [ + .package(url: "https://github.com/Alamofire/Alamofire.git", .upToNextMajor(from: "5.2.2")) + ], + targets: [ + .target( + name: "HTTP", + dependencies: ["Alamofire"]), + .testTarget( + name: "HTTPTests", + dependencies: ["HTTP"]) + ] +) diff --git a/Mastodon/Sources/Mastodon/Networking/HTTPClient.swift b/HTTP/Sources/HTTP/Client.swift similarity index 79% rename from Mastodon/Sources/Mastodon/Networking/HTTPClient.swift rename to HTTP/Sources/HTTP/Client.swift index 2e85b1c..fb96b1b 100644 --- a/Mastodon/Sources/Mastodon/Networking/HTTPClient.swift +++ b/HTTP/Sources/HTTP/Client.swift @@ -6,7 +6,7 @@ import Alamofire public typealias Session = Alamofire.Session -public class HTTPClient { +open class Client { private let session: Session private let decoder: DataDecoder @@ -15,7 +15,7 @@ public class HTTPClient { self.decoder = decoder } - public func request(_ target: T) -> AnyPublisher { + open func request(_ target: T) -> AnyPublisher { requestPublisher(target).value().mapError { $0 as Error }.eraseToAnyPublisher() } @@ -42,13 +42,13 @@ public class HTTPClient { } } -private extension HTTPClient { +private extension Client { func requestPublisher(_ target: T) -> DataResponsePublisher { -// #if DEBUG -// if let url = try? target.asURLRequest().url { -// StubbingURLProtocol.setTarget(target, forURL: url) -// } -// #endif + if let protocolClasses = session.sessionConfiguration.protocolClasses { + for protocolClass in protocolClasses { + (protocolClass as? TargetProcessing.Type)?.process(target: target) + } + } return session.request(target) .validate() diff --git a/Mastodon/Sources/Mastodon/Networking/HTTPTarget.swift b/HTTP/Sources/HTTP/Target.swift similarity index 83% rename from Mastodon/Sources/Mastodon/Networking/HTTPTarget.swift rename to HTTP/Sources/HTTP/Target.swift index 2cfde03..1a335c9 100644 --- a/Mastodon/Sources/Mastodon/Networking/HTTPTarget.swift +++ b/HTTP/Sources/HTTP/Target.swift @@ -9,7 +9,7 @@ public typealias ParameterEncoding = Alamofire.ParameterEncoding public typealias URLEncoding = Alamofire.URLEncoding public typealias JSONEncoding = Alamofire.JSONEncoding -public protocol HTTPTarget: URLRequestConvertible { +public protocol Target: URLRequestConvertible { var baseURL: URL { get } var pathComponents: [String] { get } var method: HTTPMethod { get } @@ -18,7 +18,7 @@ public protocol HTTPTarget: URLRequestConvertible { var headers: HTTPHeaders? { get } } -public extension HTTPTarget { +public extension Target { func asURLRequest() throws -> URLRequest { var url = baseURL @@ -30,6 +30,10 @@ public extension HTTPTarget { } } -public protocol DecodableTarget: HTTPTarget { +public protocol DecodableTarget: Target { associatedtype ResultType: Decodable } + +public protocol TargetProcessing { + static func process(target: Target) +} diff --git a/HTTP/Tests/HTTPTests/HTTPTests.swift b/HTTP/Tests/HTTPTests/HTTPTests.swift new file mode 100644 index 0000000..6049cda --- /dev/null +++ b/HTTP/Tests/HTTPTests/HTTPTests.swift @@ -0,0 +1,10 @@ +import XCTest +@testable import HTTP + +final class HTTPTests: XCTestCase { + func testExample() { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct + // results. + } +} diff --git a/Mastodon/Package.swift b/Mastodon/Package.swift index ff35174..abd26b6 100644 --- a/Mastodon/Package.swift +++ b/Mastodon/Package.swift @@ -14,12 +14,12 @@ let package = Package( targets: ["Mastodon"]) ], dependencies: [ - .package(url: "https://github.com/Alamofire/Alamofire.git", .upToNextMajor(from: "5.2.2")) + .package(path: "HTTP") ], targets: [ .target( name: "Mastodon", - dependencies: ["Alamofire"]), + dependencies: ["HTTP"]), .testTarget( name: "MastodonTests", dependencies: ["Mastodon"]) diff --git a/Mastodon/Sources/Mastodon/Networking/Mastodon API/APIClient.swift b/Mastodon/Sources/Mastodon/API/APIClient.swift similarity index 84% rename from Mastodon/Sources/Mastodon/Networking/Mastodon API/APIClient.swift rename to Mastodon/Sources/Mastodon/API/APIClient.swift index 68882b9..6cc3276 100644 --- a/Mastodon/Sources/Mastodon/Networking/Mastodon API/APIClient.swift +++ b/Mastodon/Sources/Mastodon/API/APIClient.swift @@ -2,8 +2,9 @@ import Foundation import Combine +import HTTP -public final class APIClient: HTTPClient { +public final class APIClient: Client { public var instanceURL: URL? public var accessToken: String? @@ -23,7 +24,7 @@ extension APIClient { } return super.request( - Target(baseURL: instanceURL, endpoint: endpoint, accessToken: accessToken), + APITarget(baseURL: instanceURL, endpoint: endpoint, accessToken: accessToken), decodeErrorsAs: APIError.self) } } diff --git a/Mastodon/Sources/Mastodon/Networking/Mastodon API/APIDecoder.swift b/Mastodon/Sources/Mastodon/API/APIDecoder.swift similarity index 100% rename from Mastodon/Sources/Mastodon/Networking/Mastodon API/APIDecoder.swift rename to Mastodon/Sources/Mastodon/API/APIDecoder.swift diff --git a/Mastodon/Sources/Mastodon/Networking/Mastodon API/APIEncoder.swift b/Mastodon/Sources/Mastodon/API/APIEncoder.swift similarity index 100% rename from Mastodon/Sources/Mastodon/Networking/Mastodon API/APIEncoder.swift rename to Mastodon/Sources/Mastodon/API/APIEncoder.swift diff --git a/Mastodon/Sources/Mastodon/Networking/Mastodon API/Target.swift b/Mastodon/Sources/Mastodon/API/APITarget.swift similarity index 91% rename from Mastodon/Sources/Mastodon/Networking/Mastodon API/Target.swift rename to Mastodon/Sources/Mastodon/API/APITarget.swift index 1a90785..839cc46 100644 --- a/Mastodon/Sources/Mastodon/Networking/Mastodon API/Target.swift +++ b/Mastodon/Sources/Mastodon/API/APITarget.swift @@ -1,8 +1,9 @@ // Copyright © 2020 Metabolist. All rights reserved. import Foundation +import HTTP -public struct Target { +public struct APITarget { public let baseURL: URL public let endpoint: E public let accessToken: String? @@ -14,7 +15,7 @@ public struct Target { } } -extension Target: DecodableTarget { +extension APITarget: DecodableTarget { public typealias ResultType = E.ResultType public var pathComponents: [String] { endpoint.pathComponents } diff --git a/Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoint.swift b/Mastodon/Sources/Mastodon/API/Endpoint.swift similarity index 98% rename from Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoint.swift rename to Mastodon/Sources/Mastodon/API/Endpoint.swift index 65a8815..44052b7 100644 --- a/Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoint.swift +++ b/Mastodon/Sources/Mastodon/API/Endpoint.swift @@ -1,6 +1,7 @@ // Copyright © 2020 Metabolist. All rights reserved. import Foundation +import HTTP public protocol Endpoint { associatedtype ResultType: Decodable diff --git a/Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoints/AccessTokenEndpoint.swift b/Mastodon/Sources/Mastodon/API/Endpoints/AccessTokenEndpoint.swift similarity index 98% rename from Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoints/AccessTokenEndpoint.swift rename to Mastodon/Sources/Mastodon/API/Endpoints/AccessTokenEndpoint.swift index 6105e39..09b02df 100644 --- a/Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoints/AccessTokenEndpoint.swift +++ b/Mastodon/Sources/Mastodon/API/Endpoints/AccessTokenEndpoint.swift @@ -1,6 +1,7 @@ // Copyright © 2020 Metabolist. All rights reserved. import Foundation +import HTTP public enum AccessTokenEndpoint { case oauthToken( diff --git a/Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoints/AccountEndpoint.swift b/Mastodon/Sources/Mastodon/API/Endpoints/AccountEndpoint.swift similarity index 97% rename from Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoints/AccountEndpoint.swift rename to Mastodon/Sources/Mastodon/API/Endpoints/AccountEndpoint.swift index 9284b9e..5e39071 100644 --- a/Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoints/AccountEndpoint.swift +++ b/Mastodon/Sources/Mastodon/API/Endpoints/AccountEndpoint.swift @@ -1,6 +1,7 @@ // Copyright © 2020 Metabolist. All rights reserved. import Foundation +import HTTP public enum AccountEndpoint { case verifyCredentials diff --git a/Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoints/AppAuthorizationEndpoint.swift b/Mastodon/Sources/Mastodon/API/Endpoints/AppAuthorizationEndpoint.swift similarity index 98% rename from Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoints/AppAuthorizationEndpoint.swift rename to Mastodon/Sources/Mastodon/API/Endpoints/AppAuthorizationEndpoint.swift index 53998e9..92621de 100644 --- a/Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoints/AppAuthorizationEndpoint.swift +++ b/Mastodon/Sources/Mastodon/API/Endpoints/AppAuthorizationEndpoint.swift @@ -1,6 +1,7 @@ // Copyright © 2020 Metabolist. All rights reserved. import Foundation +import HTTP public enum AppAuthorizationEndpoint { case apps(clientName: String, redirectURI: String, scopes: String, website: URL?) diff --git a/Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoints/ContextEndpoint.swift b/Mastodon/Sources/Mastodon/API/Endpoints/ContextEndpoint.swift similarity index 97% rename from Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoints/ContextEndpoint.swift rename to Mastodon/Sources/Mastodon/API/Endpoints/ContextEndpoint.swift index 2a7b9d5..7b96eb1 100644 --- a/Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoints/ContextEndpoint.swift +++ b/Mastodon/Sources/Mastodon/API/Endpoints/ContextEndpoint.swift @@ -1,6 +1,7 @@ // Copyright © 2020 Metabolist. All rights reserved. import Foundation +import HTTP public enum ContextEndpoint { case context(id: String) diff --git a/Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoints/DeletionEndpoint.swift b/Mastodon/Sources/Mastodon/API/Endpoints/DeletionEndpoint.swift similarity index 99% rename from Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoints/DeletionEndpoint.swift rename to Mastodon/Sources/Mastodon/API/Endpoints/DeletionEndpoint.swift index d0211c9..7b77c31 100644 --- a/Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoints/DeletionEndpoint.swift +++ b/Mastodon/Sources/Mastodon/API/Endpoints/DeletionEndpoint.swift @@ -1,6 +1,7 @@ // Copyright © 2020 Metabolist. All rights reserved. import Foundation +import HTTP public enum DeletionEndpoint { case oauthRevoke(token: String, clientID: String, clientSecret: String) diff --git a/Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoints/FilterEndpoint.swift b/Mastodon/Sources/Mastodon/API/Endpoints/FilterEndpoint.swift similarity index 99% rename from Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoints/FilterEndpoint.swift rename to Mastodon/Sources/Mastodon/API/Endpoints/FilterEndpoint.swift index 3a6f56d..5d96900 100644 --- a/Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoints/FilterEndpoint.swift +++ b/Mastodon/Sources/Mastodon/API/Endpoints/FilterEndpoint.swift @@ -1,6 +1,7 @@ // Copyright © 2020 Metabolist. All rights reserved. import Foundation +import HTTP public enum FilterEndpoint { case create( diff --git a/Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoints/FiltersEndpoint.swift b/Mastodon/Sources/Mastodon/API/Endpoints/FiltersEndpoint.swift similarity index 97% rename from Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoints/FiltersEndpoint.swift rename to Mastodon/Sources/Mastodon/API/Endpoints/FiltersEndpoint.swift index 0ef8d7b..aa46320 100644 --- a/Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoints/FiltersEndpoint.swift +++ b/Mastodon/Sources/Mastodon/API/Endpoints/FiltersEndpoint.swift @@ -1,6 +1,7 @@ // Copyright © 2020 Metabolist. All rights reserved. import Foundation +import HTTP public enum FiltersEndpoint { case filters diff --git a/Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoints/InstanceEndpoint.swift b/Mastodon/Sources/Mastodon/API/Endpoints/InstanceEndpoint.swift similarity index 97% rename from Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoints/InstanceEndpoint.swift rename to Mastodon/Sources/Mastodon/API/Endpoints/InstanceEndpoint.swift index 83b5034..8ebd3c2 100644 --- a/Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoints/InstanceEndpoint.swift +++ b/Mastodon/Sources/Mastodon/API/Endpoints/InstanceEndpoint.swift @@ -1,6 +1,7 @@ // Copyright © 2020 Metabolist. All rights reserved. import Foundation +import HTTP public enum InstanceEndpoint { case instance diff --git a/Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoints/ListEndpoint.swift b/Mastodon/Sources/Mastodon/API/Endpoints/ListEndpoint.swift similarity index 98% rename from Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoints/ListEndpoint.swift rename to Mastodon/Sources/Mastodon/API/Endpoints/ListEndpoint.swift index 74afc5f..793f056 100644 --- a/Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoints/ListEndpoint.swift +++ b/Mastodon/Sources/Mastodon/API/Endpoints/ListEndpoint.swift @@ -1,6 +1,7 @@ // Copyright © 2020 Metabolist. All rights reserved. import Foundation +import HTTP public enum ListEndpoint { case create(title: String) diff --git a/Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoints/ListsEndpoint.swift b/Mastodon/Sources/Mastodon/API/Endpoints/ListsEndpoint.swift similarity index 96% rename from Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoints/ListsEndpoint.swift rename to Mastodon/Sources/Mastodon/API/Endpoints/ListsEndpoint.swift index 4450e1f..f67d578 100644 --- a/Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoints/ListsEndpoint.swift +++ b/Mastodon/Sources/Mastodon/API/Endpoints/ListsEndpoint.swift @@ -1,6 +1,7 @@ // Copyright © 2020 Metabolist. All rights reserved. import Foundation +import HTTP public enum ListsEndpoint { case lists diff --git a/Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoints/Paged.swift b/Mastodon/Sources/Mastodon/API/Endpoints/Paged.swift similarity index 99% rename from Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoints/Paged.swift rename to Mastodon/Sources/Mastodon/API/Endpoints/Paged.swift index 0f39a26..9824c97 100644 --- a/Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoints/Paged.swift +++ b/Mastodon/Sources/Mastodon/API/Endpoints/Paged.swift @@ -1,6 +1,7 @@ // Copyright © 2020 Metabolist. All rights reserved. import Foundation +import HTTP public struct Paged { public let endpoint: T diff --git a/Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoints/PreferencesEndpoint.swift b/Mastodon/Sources/Mastodon/API/Endpoints/PreferencesEndpoint.swift similarity index 97% rename from Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoints/PreferencesEndpoint.swift rename to Mastodon/Sources/Mastodon/API/Endpoints/PreferencesEndpoint.swift index a715887..11d45f3 100644 --- a/Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoints/PreferencesEndpoint.swift +++ b/Mastodon/Sources/Mastodon/API/Endpoints/PreferencesEndpoint.swift @@ -1,6 +1,7 @@ // Copyright © 2020 Metabolist. All rights reserved. import Foundation +import HTTP public enum PreferencesEndpoint { case preferences diff --git a/Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoints/PushSubscriptionEndpoint.swift b/Mastodon/Sources/Mastodon/API/Endpoints/PushSubscriptionEndpoint.swift similarity index 99% rename from Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoints/PushSubscriptionEndpoint.swift rename to Mastodon/Sources/Mastodon/API/Endpoints/PushSubscriptionEndpoint.swift index 314c52d..950e487 100644 --- a/Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoints/PushSubscriptionEndpoint.swift +++ b/Mastodon/Sources/Mastodon/API/Endpoints/PushSubscriptionEndpoint.swift @@ -1,6 +1,7 @@ // Copyright © 2020 Metabolist. All rights reserved. import Foundation +import HTTP public enum PushSubscriptionEndpoint { case create( diff --git a/Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoints/StatusEndpoint.swift b/Mastodon/Sources/Mastodon/API/Endpoints/StatusEndpoint.swift similarity index 98% rename from Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoints/StatusEndpoint.swift rename to Mastodon/Sources/Mastodon/API/Endpoints/StatusEndpoint.swift index ffd47e7..09a2478 100644 --- a/Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoints/StatusEndpoint.swift +++ b/Mastodon/Sources/Mastodon/API/Endpoints/StatusEndpoint.swift @@ -1,6 +1,7 @@ // Copyright © 2020 Metabolist. All rights reserved. import Foundation +import HTTP public enum StatusEndpoint { case status(id: String) diff --git a/Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoints/TimelinesEndpoint.swift b/Mastodon/Sources/Mastodon/API/Endpoints/TimelinesEndpoint.swift similarity index 98% rename from Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoints/TimelinesEndpoint.swift rename to Mastodon/Sources/Mastodon/API/Endpoints/TimelinesEndpoint.swift index 6cad9b4..3d6a3b2 100644 --- a/Mastodon/Sources/Mastodon/Networking/Mastodon API/Endpoints/TimelinesEndpoint.swift +++ b/Mastodon/Sources/Mastodon/API/Endpoints/TimelinesEndpoint.swift @@ -1,6 +1,7 @@ // Copyright © 2020 Metabolist. All rights reserved. import Foundation +import HTTP public enum TimelinesEndpoint { case `public`(local: Bool) diff --git a/Metatext.xcodeproj/project.pbxproj b/Metatext.xcodeproj/project.pbxproj index 521ab96..eb65e2b 100644 --- a/Metatext.xcodeproj/project.pbxproj +++ b/Metatext.xcodeproj/project.pbxproj @@ -164,6 +164,7 @@ D0BEB20624FA1121001B0F04 /* FiltersViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FiltersViewModel.swift; sourceTree = ""; }; D0BEB21024FA2A90001B0F04 /* EditFilterView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditFilterView.swift; sourceTree = ""; }; D0BEB21224FA2C0A001B0F04 /* EditFilterViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditFilterViewModel.swift; sourceTree = ""; }; + D0BFDAF524FC7C5300C86618 /* HTTP */ = {isa = PBXFileReference; lastKnownFileType = folder; path = HTTP; sourceTree = ""; }; D0C7D41E24F76169001EBDBB /* Metatext.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Metatext.entitlements; sourceTree = ""; }; D0C7D41F24F76169001EBDBB /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; D0C7D42224F76169001EBDBB /* IdentitiesView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IdentitiesView.swift; sourceTree = ""; }; @@ -292,6 +293,7 @@ D0ED1BB224CE3A1600B4899C /* Development Assets */, D0C7D46824F76169001EBDBB /* Extensions */, D0666A7924C7745A00F3F04B /* Frameworks */, + D0BFDAF524FC7C5300C86618 /* HTTP */, D0C7D45624F76169001EBDBB /* Localizations */, D0E0F1E424FC49FC002C04BF /* Mastodon */, D0C7D43824F76169001EBDBB /* Model */, diff --git a/Model/AppEnvironment.swift b/Model/AppEnvironment.swift index 384b301..8fed092 100644 --- a/Model/AppEnvironment.swift +++ b/Model/AppEnvironment.swift @@ -1,6 +1,7 @@ // Copyright © 2020 Metabolist. All rights reserved. import Foundation +import HTTP import Mastodon struct AppEnvironment { diff --git a/Services/AuthenticationService.swift b/Services/AuthenticationService.swift index 0d58bcc..33f1f45 100644 --- a/Services/AuthenticationService.swift +++ b/Services/AuthenticationService.swift @@ -22,7 +22,7 @@ extension AuthenticationService { redirectURI: OAuth.callbackURL.absoluteString, scopes: OAuth.scopes, website: OAuth.website) - let target = Target(baseURL: instanceURL, endpoint: endpoint, accessToken: nil) + let target = APITarget(baseURL: instanceURL, endpoint: endpoint, accessToken: nil) return networkClient.request(target) } @@ -63,7 +63,7 @@ extension AuthenticationService { grantType: OAuth.grantType, scopes: OAuth.scopes, redirectURI: OAuth.callbackURL.absoluteString) - let target = Target(baseURL: instanceURL, endpoint: endpoint, accessToken: nil) + let target = APITarget(baseURL: instanceURL, endpoint: endpoint, accessToken: nil) return networkClient.request(target) } diff --git a/Tests/View Models/AddIdentityViewModelTests.swift b/Tests/View Models/AddIdentityViewModelTests.swift index 2371c56..f70ced4 100644 --- a/Tests/View Models/AddIdentityViewModelTests.swift +++ b/Tests/View Models/AddIdentityViewModelTests.swift @@ -3,6 +3,7 @@ import XCTest import Combine import CombineExpectations +import HTTP import Mastodon @testable import Metatext