OSDN Git Service

shared instanceを持つようにした
[kcd/KCD.git] / KCD / APIResponse.swift
1 //
2 //  APIResponse.swift
3 //  KCD
4 //
5 //  Created by Hori,Masaki on 2017/01/20.
6 //  Copyright © 2017年 Hori,Masaki. All rights reserved.
7 //
8
9 import Cocoa
10 import SwiftyJSON
11
12 extension JSON {
13     
14     func value(for keyPath: String) -> JSON {
15         
16         return self[keyPath.components(separatedBy: ".")]
17     }
18     
19     var last: JSON {
20         
21         let index = self.count - 1
22         
23         return self[index]
24     }
25 }
26
27 private func splitJSON(_ data: Data) -> String? {
28     
29     let prefix = "svdata="
30     
31     guard let string = data.utf8String,
32         let range = string.range(of: prefix) else {
33             
34             Logger.shared.log("data is wrong")
35             
36             return nil
37     }
38     
39     return String(string[range.upperBound...])
40 }
41
42 struct APIResponse {
43     
44     let api: API
45     let parameter: Parameter
46     let json: JSON
47     let date: Date
48     
49     var success: Bool {
50         
51         if let r = json["api_result"].int { return r == 1 }
52         
53         return false
54     }
55     
56     init(api: API, parameter: Parameter, json: JSON) {
57         
58         self.api = api
59         self.parameter = parameter
60         self.json = json
61         self.date = Date()
62     }
63     
64     init?(request: URLRequest, data: Data) {
65         
66         date = Date()
67         
68         guard let josn = splitJSON(data) else {
69             
70             Logger.shared.log("Can not parse JSON")
71             
72             return nil
73         }
74         
75         self.json = JSON(parseJSON: josn)
76         
77         guard let parameter = Parameter(request) else {
78             
79             Logger.shared.log("Can not parse Parameter")
80             
81             return nil
82         }
83         
84         self.parameter = parameter
85         
86         guard let api = request.url?.path else {
87             
88             Logger.shared.log("URLRequest is wrong")
89             
90             return nil
91         }
92         
93         self.api = API(endpointPath: api)
94     }
95 }