0001    import Vaquita
0002    
0003    class JSONParser
Application.swift:33
        use(middleware: JSONParser())
: Middleware { 0004 0005 func handle(request: Request, response: Response, next: () -> ()) { 0006 0007 defer { next() } 0008 0009 guard let contentTypeHeader = request.headers["content-type"] else { 0010 return 0011 } 0012 0013 let contentTypeTokens = contentTypeHeader.split(";").map { $0.trim() } 0014 guard let contentType = contentTypeTokens.first where 0015 contentType == "application/json" else { return } 0016 0017 do { 0018 0019 let jsonString = try request.body.toString() 0020 let json = parseJsonString(jsonString) 0021 0022 for (key, value) in json { 0023 request.data[key] = value 0024 } 0025 } catch { 0026 0027 } 0028 } 0029 0030 0031 func boolValue
BodyParser.swift:211
            return boolValue(string: string)
(string string: String) -> Bool { 0032 return string == "true" 0033 } 0034 0035 func isBoolValue
BodyParser.swift:210
        } else if isBoolValue(string: string) {
(string string: String) -> Bool { 0036 return string == "true" || string == "false" 0037 } 0038 0039 func isDoubleValue
BodyParser.swift:212
        } else if isDoubleValue(string: string) {
(string string: String) -> Bool { 0040 return string.containsString(".") 0041 } 0042 0043 func isStringValue
BodyParser.swift:207
        if isStringValue(string: string) {
(string string: String) -> Bool { 0044 return (string.hasPrefix("'") && string.hasSuffix("'")) || (string.hasPrefix("\"") && string.hasSuffix("\"")) 0045 } 0046 0047 func cleanString
BodyParser.swift:115
                    key = cleanString(buffer.trim())
BodyParser.swift:208
            let value = cleanString(string)
(string: String) -> String { 0048 if (string.hasPrefix("'") && string.hasSuffix("'")) || (string.hasPrefix("\"") && string.hasSuffix("\"")) { 0049 var value = string 0050 value.removeAtIndex(value.startIndex) 0051 value.removeAtIndex(value.endIndex.predecessor()) 0052 return value 0053 } else { 0054 return string 0055 } 0056 } 0057 0058 func splitIntoKeyValues
BodyParser.swift:148
        let pairs = splitIntoKeyValues(string)
(string: String) -> [(key: String?, value: String?)] { 0059 0060 var pairs = [(key: String?, value: String?)]() 0061 0062 var string = string 0063 if string.hasPrefix("{") { 0064 string.removeAtIndex(string.startIndex) 0065 } 0066 0067 if string.hasSuffix("}") { 0068 string.removeAtIndex(string.endIndex.predecessor()) 0069 } 0070 0071 let characters = string.characters 0072 0073 var key: String? = nil 0074 0075 var inString = false 0076 var inObject = false 0077 var objectLevel = 0 0078 var arrayLevel = 0 0079 0080 var buffer = "" 0081 0082 var escapeCharacter = false 0083 0084 for c in characters { 0085 0086 if c == "{" { 0087 0088 inObject = true 0089 0090 objectLevel += 1 0091 } 0092 0093 if c == "}" { 0094 0095 objectLevel -= 1 0096 0097 inObject = objectLevel != 0 0098 } 0099 0100 if c == "[" { 0101 arrayLevel += 1 0102 } 0103 0104 if c == "]" { 0105 arrayLevel -= 1 0106 } 0107 0108 0109 if c == "\"" || c == "'" && !escapeCharacter { 0110 inString = !inString 0111 } 0112 0113 if c == ":" && !inString && key == nil && !inObject && arrayLevel == 0 { 0114 if key == nil { 0115 key = cleanString(buffer.trim()) 0116 } 0117 buffer = "" 0118 } else if c == "," && !inString && !inObject && arrayLevel == 0 { 0119 pairs.append((key: key, value: buffer.trim())) 0120 buffer = "" 0121 key = nil 0122 } else { 0123 buffer.append(c) 0124 } 0125 0126 if escapeCharacter { 0127 escapeCharacter = false 0128 } 0129 0130 if c == "\\" { 0131 escapeCharacter = true 0132 } 0133 } 0134 0135 if let key = key { 0136 pairs.append((key: key, value: buffer.trim())) 0137 } 0138 0139 0140 0141 return pairs 0142 0143 } 0144 0145 func parseJsonString
BodyParser.swift:157
                    json[key] = parseJsonString(value)
BodyParser.swift:186
                value = parseJsonString(component)
(string: String) -> [String: Any] { 0146 var json = [String: Any]() 0147 0148 let pairs = splitIntoKeyValues(string) 0149 0150 for pair in pairs { 0151 if let key = pair.key, value = pair.value { 0152 if let value = valueForProperty(value) { 0153 json[key] = value 0154 } else if let value = arrayForString(value) { 0155 json[key] = value 0156 } else { 0157 json[key] = parseJsonString(value) 0158 } 0159 } 0160 } 0161 0162 return json 0163 } 0164 0165 func arrayForString
BodyParser.swift:154
                } else if let value = arrayForString(value) {
(string: String) -> [Any]? { 0166 0167 var string = string 0168 0169 if !string.hasPrefix("[") { 0170 return nil 0171 } else { 0172 string.removeAtIndex(string.startIndex) 0173 } 0174 0175 if string.hasSuffix("]") { 0176 string.removeAtIndex(string.endIndex.predecessor()) 0177 } 0178 0179 var array = [Any]() 0180 let components = string.componentsSeparatedByString(",") 0181 0182 for component in components { 0183 let component = component.trim() 0184 let value: Any? 0185 if component.hasPrefix("{") { 0186 value = parseJsonString(component) 0187 } else { 0188 value = valueForProperty(component) 0189 } 0190 0191 if let value = value { 0192 array.append(value) 0193 } 0194 } 0195 return array 0196 } 0197 0198 func valueForProperty
BodyParser.swift:152
                if let value = valueForProperty(value) {
BodyParser.swift:188
                value = valueForProperty(component)
(string: String) -> Any? { 0199 if string.hasPrefix("{") { 0200 return nil 0201 } 0202 0203 if string.hasPrefix("[") { 0204 return nil 0205 } 0206 0207 if isStringValue(string: string) { 0208 let value = cleanString(string) 0209 return value 0210 } else if isBoolValue(string: string) { 0211 return boolValue(string: string) 0212 } else if isDoubleValue(string: string) { 0213 return Double(string) 0214 } else if let value = Int(string) { 0215 return value 0216 } 0217 0218 return nil 0219 } 0220 0221 0222 } 0223