OSDN Git Service

クラス内でしか使わないenumと関数をクラス内に隠蔽した
[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 final class DeckMapper: JSONMapper {
12     
13     typealias ObjectType = Deck
14     
15     let apiResponse: APIResponse
16     let configuration: MappingConfiguration<Deck>
17     
18     required init(_ apiResponse: APIResponse) {
19         
20         self.apiResponse = apiResponse
21         self.configuration = MappingConfiguration(entity: Deck.entity,
22                                                   dataKeys: DeckMapper.dataKeys(apiResponse),
23                                                   editorStore: ServerDataStore.oneTimeEditor())
24     }
25     
26     
27     private enum DeckAPI: String {
28         
29         case getMemberDeck = "/kcsapi/api_get_member/deck"
30         case port = "/kcsapi/api_port/port"
31         case getMemberShip2 = "/kcsapi/api_get_member/ship2"
32         case getMemberShip3 = "/kcsapi/api_get_member/ship3"
33         case getMemberShipDeck = "/kcsapi/api_get_member/ship_deck"
34         case getMemberDeckPort = "/kcsapi/api_get_member/deck_port"
35         case henseiPresetSelect = "/kcsapi/api_req_hensei/preset_select"
36         case kaisouPowerUp = "/kcsapi/api_req_kaisou/powerup"
37     }
38     
39     private class func dataKeys(_ apiResponse: APIResponse) -> [String] {
40         
41         guard let deckApi = DeckAPI(rawValue: apiResponse.api)
42             else { return ["api_data"] }
43         
44         switch deckApi {
45         case .port: return ["api_data", "api_deck_port"]
46             
47         case .getMemberShip2: return ["api_data_deck"]
48             
49         case .getMemberShip3: return ["api_data", "api_deck_data"]
50             
51         case .getMemberShipDeck: return ["api_data", "api_deck_data"]
52             
53         case .kaisouPowerUp: return ["api_data", "api_deck"]
54             
55         case .getMemberDeck, .getMemberDeckPort, .henseiPresetSelect: return ["api_data"]
56         }
57     }
58 }