5 // Created by Hori,Masaki on 2017/12/08.
6 // Copyright © 2017年 Hori,Masaki. All rights reserved.
12 enum Endpoint: String {
14 case start2 = "/kcsapi/api_start2"
15 case requireInfo = "/kcsapi/api_get_member/require_info"
16 case mapInfo = "/kcsapi/api_get_member/mapinfo"
19 case port = "/kcsapi/api_port/port"
22 case ndock = "/kcsapi/api_get_member/ndock"
23 case kdock = "/kcsapi/api_get_member/kdock"
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"
31 case material = "/kcsapi/api_get_member/material"
32 case basic = "/kcsapi/api_get_member/basic"
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"
40 case createShip = "/kcsapi/api_req_kousyou/createship"
41 case getShip = "/kcsapi/api_req_kousyou/getship"
42 case destroyShip = "/kcsapi/api_req_kousyou/destroyship"
44 case powerup = "/kcsapi/api_req_kaisou/powerup"
46 case itemLock = "/kcsapi/api_req_kaisou/lock"
49 case slotItem = "/kcsapi/api_get_member/slot_item"
51 case exchangeIndex = "/kcsapi/api_req_kaisou/slot_exchange_index"
52 case slotDeprive = "/kcsapi/api_req_kaisou/slot_deprive"
54 case createItem = "/kcsapi/api_req_kousyou/createitem"
55 case destroyItem2 = "/kcsapi/api_req_kousyou/destroyitem2"
57 case remodelSlot = "/kcsapi/api_req_kousyou/remodel_slot"
60 case henseiCombined = "/kcsapi/api_req_hensei/combined"
61 case change = "/kcsapi/api_req_hensei/change"
64 case startNyukyo = "/kcsapi/api_req_nyukyo/start"
65 case speedChange = "/kcsapi/api_req_nyukyo/speedchange"
68 case charge = "/kcsapi/api_req_hokyu/charge"
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"
77 case battle = "/kcsapi/api_req_sortie/battle"
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"
86 case combinedEachNightToDay = "/kcsapi/api_req_combined_battle/ec_night_to_day"
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"
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"
98 case battleResult = "/kcsapi/api_req_sortie/battleresult"
99 case combinedBattleResult = "/kcsapi/api_req_combined_battle/battleresult"
102 case goback = "/kcsapi/api_req_combined_battle/goback_port"
103 case gobakAlone = "/kcsapi/api_req_sortie/goback_port"
106 case start = "/kcsapi/api_req_map/start"
107 case next = "/kcsapi/api_req_map/next"
110 case questList = "/kcsapi/api_get_member/questlist"
111 case clearItemGet = "/kcsapi/api_req_quest/clearitemget"
114 case unknown = "UNKNOWN_API_STRING"
134 private func apiType(of endpoint: Endpoint) -> APIType {
142 case .deck, .deckPort, .presetSelect:
147 .combinedBattle, .combinedAirBattle, .combinedBattleWater,
148 .combinedEcBattle, .combinedEachBattle, .combinedEachBattleWater,
149 .combinedEachNightToDay,
150 .airBattle, .ldAirBattle, .combinedLdAirBattle,
151 .midnightBattle, .midnightSpMidnight,
152 .combinedMidnightBattle, .combinedEcMidnightBattle, .combinedSpMidnight:
156 case .battleResult, .combinedBattleResult:
160 case .goback, .gobakAlone:
177 let endpoint: Endpoint
181 return apiType(of: endpoint)
184 private var endpointString: String {
188 case .unknown: return rawEndpointString ?? "Not Recorded"
190 default: return endpoint.rawValue
195 private var rawEndpointString: String?
197 init(endpointPath rawValue: String) {
199 endpoint = Endpoint(rawValue: rawValue) ?? .unknown
201 if endpoint == .unknown {
203 rawEndpointString = rawValue
207 func includs(in rawValues: Set<String>) -> Bool {
209 return rawValues.contains(endpointString)
212 func isRanking() -> Bool {
214 return endpointString.hasPrefix("/kcsapi/api_req_ranking/")
218 extension API: CustomStringConvertible {
220 var description: String {
222 return "API: \(endpointString)"
226 extension API: CustomDebugStringConvertible {
228 var debugDescription: String {
230 return endpointString