OSDN Git Service

a80ab3ee8507bf52af04d7e8423484d99b6977d3
[kcd/KCD.git] / KCD / DeckMapper.swift
1 //
2 //  DeckMapper.swift
3 //  KCD
4 //
5 //  Created by Hori,Masaki on 2017/02/23.
6 //  Copyright © 2017年 Hori,Masaki. All rights reserved.
7 //
8
9 import Cocoa
10
11 fileprivate enum DeckAPI: String {
12     
13     case getMemberDeck = "/kcsapi/api_get_member/deck"
14     case port = "/kcsapi/api_port/port"
15     case getMemberShip2 = "/kcsapi/api_get_member/ship2"
16     case getMemberShip3 = "/kcsapi/api_get_member/ship3"
17     case getMemberShipDeck = "/kcsapi/api_get_member/ship_deck"
18     case getMemberDeckPort = "/kcsapi/api_get_member/deck_port"
19     case henseiPresetSelect = "/kcsapi/api_req_hensei/preset_select"
20     case kaisouPowerUp = "/kcsapi/api_req_kaisou/powerup"
21 }
22
23 fileprivate func dataKeys(_ apiResponse: APIResponse) -> [String] {
24     
25     guard let deckApi = DeckAPI(rawValue: apiResponse.api)
26         else { return ["api_data"] }
27     
28     switch deckApi {
29     case .port: return ["api_data", "api_deck_port"]
30         
31     case .getMemberShip2: return ["api_data_deck"]
32         
33     case .getMemberShip3: return ["api_data", "api_deck_data"]
34         
35     case .getMemberShipDeck: return ["api_data", "api_deck_data"]
36         
37     case .kaisouPowerUp: return ["api_data", "api_deck"]
38         
39     default: return ["api_data"]
40     }
41 }
42
43 final class DeckMapper: JSONMapper {
44     
45     typealias ObjectType = Deck
46     
47     let apiResponse: APIResponse
48     let configuration: MappingConfiguration<Deck>
49     
50     required init(_ apiResponse: APIResponse) {
51         
52         self.apiResponse = apiResponse
53         self.configuration = MappingConfiguration(entity: Deck.entity,
54                                                   dataKeys: dataKeys(apiResponse),
55                                                   editorStore: ServerDataStore.oneTimeEditor())
56     }
57 }