Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- final class NetworkUsers: URLRepresentable {
- let apiVersion: APIVersion
- let network: String
- init(apiVersion: APIVersion, network: String) {
- self.apiVersion = apiVersion
- self.network = network
- }
- func makeURL() throws -> URL {
- return try apiVersion.makeURL(forPath: "/networks/\(network)/users")
- }
- }
- enum APIVersion {
- case v1, v2, v3
- func makeURL(forPath path: String) throws -> URL {
- let endpoint: APIEndpoint
- switch self {
- case .v1:
- endpoint = .v1(path)
- case .v2:
- endpoint = .v2(path)
- case .v3:
- endpoint = .v3(path)
- }
- return try endpoint.makeURL()
- }
- }
- @dynamicMemberLookup
- struct NetworkRoutes {
- let apiVersion: APIVersion
- let network: String
- var users: NetworkUsers {
- return NetworkUsers(apiVersion: apiVersion, network: network)
- }
- init(apiVersion: APIVersion, network: String) {
- self.apiVersion = apiVersion
- self.network = network
- }
- subscript<Route>(dynamicMember keyPath: KeyPath<Self, Route>) -> Route {
- return self[keyPath: keyPath]
- }
- }
- struct AllNetworkRoutes {
- let apiVersion: APIVersion
- subscript(id: String) -> NetworkRoutes {
- NetworkRoutes(apiVersion: apiVersion, network: id)
- }
- init(apiVersion: APIVersion) {
- self.apiVersion = apiVersion
- }
- }
- struct V2 {
- let networks = AllNetworkRoutes(apiVersion: .v2)
- init() {}
- }
- @dynamicMemberLookup
- struct APIRoutes {
- subscript<Route>(dynamicMember keyPath: KeyPath<Self, Route>) -> Route {
- return self[keyPath: keyPath]
- }
- let v2 = V2()
- init() {}
- }
- let routes = APIRoutes()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement