OSDN Git Service

staticプロパティをインスタンスプロパティに変更
[kcd/KCD.git] / KCD / API.swift
1 //
2 //  API.swift
3 //  KCD
4 //
5 //  Created by Hori,Masaki on 2017/12/08.
6 //  Copyright © 2017年 Hori,Masaki. All rights reserved.
7 //
8
9
10 import Foundation
11
12 enum Endpoint: String {
13     
14     case start2 = "/kcsapi/api_start2"
15     case requireInfo = "/kcsapi/api_get_member/require_info"
16     case mapInfo = "/kcsapi/api_get_member/mapinfo"
17     
18     // Port
19     case port = "/kcsapi/api_port/port"
20     
21     // Dock
22     case ndock = "/kcsapi/api_get_member/ndock"
23     case kdock = "/kcsapi/api_get_member/kdock"
24     
25     // Deck
26     case deck = "/kcsapi/api_get_member/deck"
27     case deckPort = "/kcsapi/api_get_member/deck_port"
28     case presetSelect = "/kcsapi/api_req_hensei/preset_select"
29     
30     // Supplies
31     case material = "/kcsapi/api_get_member/material"
32     case basic = "/kcsapi/api_get_member/basic"
33     
34     // Ship
35     case ship = "/kcsapi/api_get_member/ship"
36     case ship2 = "/kcsapi/api_get_member/ship2"
37     case ship3 = "/kcsapi/api_get_member/ship3"
38     case shipDeck = "/kcsapi/api_get_member/ship_deck"
39     
40     case createShip = "/kcsapi/api_req_kousyou/createship"
41     case getShip = "/kcsapi/api_req_kousyou/getship"
42     case destroyShip = "/kcsapi/api_req_kousyou/destroyship"
43     
44     case powerup = "/kcsapi/api_req_kaisou/powerup"
45     
46     case itemLock = "/kcsapi/api_req_kaisou/lock"
47     
48     // SlotItem
49     case slotItem = "/kcsapi/api_get_member/slot_item"
50     
51     case exchangeIndex = "/kcsapi/api_req_kaisou/slot_exchange_index"
52     case slotDeprive = "/kcsapi/api_req_kaisou/slot_deprive"
53     
54     case createItem = "/kcsapi/api_req_kousyou/createitem"
55     case destroyItem2 = "/kcsapi/api_req_kousyou/destroyitem2"
56     
57     case remodelSlot = "/kcsapi/api_req_kousyou/remodel_slot"
58     
59     // Hensei
60     case henseiCombined = "/kcsapi/api_req_hensei/combined"
61     case change = "/kcsapi/api_req_hensei/change"
62     
63     // Nyukyo
64     case startNyukyo = "/kcsapi/api_req_nyukyo/start"
65     case speedChange = "/kcsapi/api_req_nyukyo/speedchange"
66     
67     // Charge
68     case charge = "/kcsapi/api_req_hokyu/charge"
69     
70     // Airbase
71     case setPlane = "/kcsapi/api_req_air_corps/set_plane"
72     case setAction = "/kcsapi/api_req_air_corps/set_action"
73     case airCorpsSupply = "/kcsapi/api_req_air_corps/supply"
74     case airCorpsRename = "/kcsapi/api_req_air_corps/change_name"
75     
76     // Battle
77     case battle = "/kcsapi/api_req_sortie/battle"
78     
79     case combinedBattle = "/kcsapi/api_req_combined_battle/battle"
80     case combinedAirBattle = "/kcsapi/api_req_combined_battle/airbattle"
81     case combinedBattleWater = "/kcsapi/api_req_combined_battle/battle_water"
82     case combinedEcBattle = "/kcsapi/api_req_combined_battle/ec_battle"
83     case combinedEachBattle = "/kcsapi/api_req_combined_battle/each_battle"
84     case combinedEachBattleWater = "/kcsapi/api_req_combined_battle/each_battle_water"
85     
86     case combinedEachNightToDay = "/kcsapi/api_req_combined_battle/ec_night_to_day"
87     
88     case airBattle = "/kcsapi/api_req_sortie/airbattle"
89     case ldAirBattle = "/kcsapi/api_req_sortie/ld_airbattle"
90     case combinedLdAirBattle = "/kcsapi/api_req_combined_battle/ld_airbattle"
91     
92     case midnightBattle = "/kcsapi/api_req_battle_midnight/battle"
93     case midnightSpMidnight = "/kcsapi/api_req_battle_midnight/sp_midnight"
94     case combinedEcMidnightBattle = "/kcsapi/api_req_combined_battle/ec_midnight_battle"
95     case combinedMidnightBattle = "/kcsapi/api_req_combined_battle/midnight_battle"
96     case combinedSpMidnight = "/kcsapi/api_req_combined_battle/sp_midnight"
97     
98     case battleResult = "/kcsapi/api_req_sortie/battleresult"
99     case combinedBattleResult = "/kcsapi/api_req_combined_battle/battleresult"
100     
101     // GuardEscape
102     case goback = "/kcsapi/api_req_combined_battle/goback_port"
103     case gobakAlone = "/kcsapi/api_req_sortie/goback_port"
104     
105     // Map
106     case start = "/kcsapi/api_req_map/start"
107     case next = "/kcsapi/api_req_map/next"
108     
109     //Quest
110     case questList = "/kcsapi/api_get_member/questlist"
111     case clearItemGet = "/kcsapi/api_req_quest/clearitemget"
112     
113     // Unknown
114     case unknown = "UNKNOWN_API_STRING"
115 }
116
117 enum APIType {
118     
119     case port
120     
121     case deck
122     
123     case battle
124     
125     case battleResult
126     
127     case guardEscape
128     
129     case map
130     
131     case other
132 }
133
134 private func apiType(of endpoint: Endpoint) -> APIType {
135     
136     switch endpoint {
137         
138     case .port:
139         
140         return .port
141         
142     case .deck, .deckPort, .presetSelect:
143         
144         return .deck
145         
146     case .battle,
147          .combinedBattle, .combinedAirBattle, .combinedBattleWater,
148          .combinedEcBattle, .combinedEachBattle, .combinedEachBattleWater,
149          .combinedEachNightToDay,
150          .airBattle, .ldAirBattle, .combinedLdAirBattle,
151          .midnightBattle, .midnightSpMidnight,
152          .combinedMidnightBattle, .combinedEcMidnightBattle, .combinedSpMidnight:
153         
154         return .battle
155         
156     case .battleResult, .combinedBattleResult:
157         
158         return .battleResult
159         
160     case .goback, .gobakAlone:
161         
162         return .guardEscape
163         
164     case .start, .next:
165         
166         return .map
167         
168     default:
169         
170         return .other
171         
172     }
173 }
174
175 struct API {
176     
177     let endpoint: Endpoint
178     
179     var type: APIType {
180         
181         return apiType(of: endpoint)
182     }
183     
184     private var endpointString: String {
185         
186         switch endpoint {
187             
188         case .unknown: return rawEndpointString ?? "Not Recorded"
189             
190         default: return endpoint.rawValue
191             
192         }
193     }
194     
195     private var rawEndpointString: String?
196     
197     init(endpointPath rawValue: String) {
198         
199         endpoint = Endpoint(rawValue: rawValue) ?? .unknown
200         
201         if endpoint == .unknown {
202             
203             rawEndpointString = rawValue
204         }
205     }
206     
207     func includs(in rawValues: Set<String>) -> Bool {
208         
209         return rawValues.contains(endpointString)
210     }
211     
212     func isRanking() -> Bool {
213         
214         return endpointString.hasPrefix("/kcsapi/api_req_ranking/")
215     }
216 }
217
218 extension API: CustomStringConvertible {
219     
220     var description: String {
221         
222         return "API: \(endpointString)"
223     }
224 }
225
226 extension API: CustomDebugStringConvertible {
227     
228     var debugDescription: String {
229         
230         return endpointString
231     }
232 }