Skip to content

Instantly share code, notes, and snippets.

@satishbabariya
Last active July 8, 2019 06:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save satishbabariya/138629a7c2fcd597608833b3e09fd7b2 to your computer and use it in GitHub Desktop.
Save satishbabariya/138629a7c2fcd597608833b3e09fd7b2 to your computer and use it in GitHub Desktop.
import Resty
struct Todo: Codable {
let id: Int
let title: String
let completed: Bool
}
enum FakeAPI: Resty {
case todos
// other endpoints
}
extension FakeAPI {
var host: String {
return "https://jsonplaceholder.typicode.com/"
}
var path: String {
return ""
}
var endpoint: String {
switch self {
case .todos:
return "todos"
}
}
var method: HTTPMethod {
switch self {
case .todos:
return .get
}
}
var parameters: [String: Any]? {
return nil
}
var headers: [String: String]? {
return nil
}
}
enum MyService {
case zen
case showUser(id: Int)
case createUser(firstName: String, lastName: String)
case updateUser(id: Int, firstName: String, lastName: String)
case showAccounts
}
// MARK: - Resty Protocol Implementation
extension MyService: Resty {
var host: String {
return "https://jsonplaceholder.typicode.com/"
}
var path: String {
return ""
}
var endpoint: String {
switch self {
case .zen:
return "/zen"
case .showUser(let id), .updateUser(let id, _, _):
return "/users/\(id)"
case .createUser(_, _):
return "/users"
case .showAccounts:
return "/accounts"
}
}
var method: HTTPMethod {
switch self {
case .zen, .showUser, .showAccounts:
return .get
case .createUser, .updateUser:
return .post
}
}
var parameters: [String: Any]? {
return nil
}
var headers: [String: String]? {
return ["Content-type": "application/json"]
}
}
FakeAPI.todos.request(type: [Todo].self) { result in
switch result {
case let .success(todos):
// Array of [Todo]
case let .failure(error):
// error
}
}
MyService.zen.request(type: [Todo].self) { result in
switch result {
case let .success(todos):
// Array of [Todo]
case let .failure(error):
// error
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment