0001    //
0002    //  Json.swift
0003    //  JsonSerializer
0004    //
0005    //  Created by Fuji Goro on 2014/09/15.
0006    //  Copyright (c) 2014 Fuji Goro. All rights reserved.
0007    //
0008    
0009    public enum Json
Json.swift:15
    case ArrayValue([Json])
Json.swift:16
    case ObjectValue([String:Json])
Json.swift:32
    public init(_ value: [Json]) {
Json.swift:36
    public init(_ value: [String : Json]) {
Json.swift:42
    public static func from(value: Bool) -> Json {
Json.swift:46
    public static func from(value: Double) -> Json {
Json.swift:50
    public static func from(value: String) -> Json {
Json.swift:54
    public static func from(value: [Json]) -> Json {
Json.swift:54
    public static func from(value: [Json]) -> Json {
Json.swift:58
    public static func from(value: [String : Json]) -> Json {
Json.swift:58
    public static func from(value: [String : Json]) -> Json {
Json.swift:65
extension Json {
Json.swift:66
    public static func deserialize(source: String) throws -> Json {
Json.swift:70
    public static func deserialize(source: [UInt8]) throws -> Json {
Json.swift:74
    public static func deserialize<ByteSequence: CollectionType where ByteSequence.Generator.Element == UInt8>(sequence: ByteSequence) throws -> Json {
Json.swift:79
extension Json {
Json.swift:101
extension Json {
Json.swift:155
    public var arrayValue: [Json]? {
Json.swift:160
    public var objectValue: [String : Json]? {
Json.swift:166
extension Json {
Json.swift:187
extension Json {
Json.swift:197
extension Json {
Json.swift:204
public func ==(lhs: Json, rhs: Json) -> Bool {
Json.swift:204
public func ==(lhs: Json, rhs: Json) -> Bool {
Json.swift:228
extension Json: NilLiteralConvertible {
Json.swift:234
extension Json: BooleanLiteralConvertible {
Json.swift:240
extension Json: IntegerLiteralConvertible {
Json.swift:246
extension Json: FloatLiteralConvertible {
Json.swift:252
extension Json: StringLiteralConvertible {
Json.swift:269
extension Json: ArrayLiteralConvertible {
Json.swift:270
    public init(arrayLiteral elements: Json...) {
Json.swift:275
extension Json: DictionaryLiteralConvertible {
Json.swift:276
    public init(dictionaryLiteral elements: (String, Json)...) {
Json.swift:277
        var object = [String : Json](minimumCapacity: elements.count)
JsonParser.swift:62
    internal func deserialize() throws -> Json {
JsonParser.swift:73
    private func deserializeNextValue() throws -> Json {
JsonParser.swift:81
            return try parseSymbol("null", Json.NullValue)
JsonParser.swift:83
            return try parseSymbol("true", Json.BooleanValue(true))
JsonParser.swift:85
            return try parseSymbol("false", Json.BooleanValue(false))
JsonParser.swift:99
    private func parseSymbol(target: StaticString, @autoclosure _ iftrue:  () -> Json) throws -> Json {
JsonParser.swift:99
    private func parseSymbol(target: StaticString, @autoclosure _ iftrue:  () -> Json) throws -> Json {
JsonParser.swift:107
    private func parseString() throws -> Json {
JsonParser.swift:175
    private func parseNumber() throws -> Json {
JsonParser.swift:237
    private func parseObject() throws -> Json {
JsonParser.swift:244
    private func getObject() throws -> Json {
JsonParser.swift:249
        var object = [String:Json]()
JsonParser.swift:279
    private func parseArray() throws -> Json {
JsonParser.swift:284
        var a = Array<Json>()
JsonSerializer.swift:11
    func serialize(_: Json) -> String
JsonSerializer.swift:18
    internal func serialize(json: Json) -> String {
JsonSerializer.swift:43
    func serializeArray(array: [Json]) -> String {
JsonSerializer.swift:51
    func serializeObject(object: [String : Json]) -> String {
JsonSerializer.swift:72
    override internal func serializeArray(array: [Json]) -> String {
JsonSerializer.swift:90
    override internal func serializeObject(object: [String : Json]) -> String {
: CustomStringConvertible, CustomDebugStringConvertible, Equatable { 0010 0011 case NullValue
Json.swift:103
        guard case .NullValue = self else { return false }
Json.swift:206
    case .NullValue:
Json.swift:230
        self = .NullValue
JsonParser.swift:81
            return try parseSymbol("null", Json.NullValue)
JsonSerializer.swift:20
        case .NullValue:
0012 case BooleanValue
Json.swift:21
        self = .BooleanValue(value)
Json.swift:43
        return .BooleanValue(value)
Json.swift:108
        if case let .BooleanValue(bool) = self {
Json.swift:208
    case .BooleanValue(let lhsValue):
Json.swift:236
        self = .BooleanValue(value)
JsonParser.swift:83
            return try parseSymbol("true", Json.BooleanValue(true))
JsonParser.swift:85
            return try parseSymbol("false", Json.BooleanValue(false))
JsonSerializer.swift:22
        case .BooleanValue(let b):
(Bool) 0013 case NumberValue
Json.swift:25
        self = .NumberValue(value)
Json.swift:47
        return .NumberValue(value)
Json.swift:127
        guard case let .NumberValue(double) = self else {
Json.swift:135
        guard case let .NumberValue(double) = self where double % 1 == 0 else {
Json.swift:214
    case .NumberValue(let lhsValue):
Json.swift:242
        self = .NumberValue(Double(value))
Json.swift:248
        self = .NumberValue(Double(value))
JsonParser.swift:234
        return .NumberValue(sign * (Double(integer) + fraction) * pow(10, Double(exponent)))
JsonSerializer.swift:24
        case .NumberValue(let n):
(Double) 0014 case StringValue
Json.swift:29
        self = .StringValue(value)
Json.swift:51
        return .StringValue(value)
Json.swift:148
        guard case let .StringValue(string) = self else {
Json.swift:211
    case .StringValue(let lhsValue):
Json.swift:257
        self = .StringValue(value)
Json.swift:261
        self = .StringValue(value)
Json.swift:265
        self = .StringValue(value)
JsonParser.swift:146
        return .StringValue(string)
JsonParser.swift:252
            guard case let .StringValue(key) = try deserializeNextValue() else {
JsonSerializer.swift:26
        case .StringValue(let s):
(String) 0015 case ArrayValue
Json.swift:33
        self = .ArrayValue(value)
Json.swift:55
        return .ArrayValue(value)
Json.swift:156
        guard case let .ArrayValue(array) = self else { return nil }
Json.swift:217
    case .ArrayValue(let lhsValue):
Json.swift:271
        self = .ArrayValue(elements)
JsonParser.swift:302
        return .ArrayValue(a)
JsonSerializer.swift:28
        case .ArrayValue(let a):
([Json]) 0016 case ObjectValue
Json.swift:37
        self = .ObjectValue(value)
Json.swift:59
        return .ObjectValue(value)
Json.swift:161
        guard case let .ObjectValue(object) = self else { return nil }
Json.swift:220
    case .ObjectValue(let lhsValue):
Json.swift:281
        self = .ObjectValue(object)
JsonParser.swift:276
        return .ObjectValue(object)
JsonSerializer.swift:30
        case .ObjectValue(let o):
([String:Json]) 0017 0018 // MARK: Initialization 0019 0020 public init(_ value: Bool) { 0021 self = .BooleanValue(value) 0022 } 0023 0024 public init(_ value: Double) { 0025 self = .NumberValue(value) 0026 } 0027 0028 public init(_ value: String) { 0029 self = .StringValue(value) 0030 } 0031 0032 public init(_ value: [Json]) { 0033 self = .ArrayValue(value) 0034 } 0035 0036 public init(_ value: [String : Json]) { 0037 self = .ObjectValue(value) 0038 } 0039 0040 // MARK: From 0041 0042 public static func from(value: Bool) -> Json { 0043 return .BooleanValue(value) 0044 } 0045 0046 public static func from(value: Double) -> Json { 0047 return .NumberValue(value) 0048 } 0049 0050 public static func from(value: String) -> Json { 0051 return .StringValue(value) 0052 } 0053 0054 public static func from(value: [Json]) -> Json { 0055 return .ArrayValue(value) 0056 } 0057 0058 public static func from
Json.swift:182
            self = .from(mutableObject)
(value: [String : Json]) -> Json { 0059 return .ObjectValue(value) 0060 } 0061 } 0062 0063 // MARK: Serialization 0064 0065 extension Json { 0066 public static func deserialize(source: String) throws -> Json { 0067 return try JsonDeserializer(source.utf8).deserialize() 0068 } 0069 0070 public static func deserialize(source: [UInt8]) throws -> Json { 0071 return try JsonDeserializer(source).deserialize() 0072 } 0073 0074 public static func deserialize<ByteSequence: CollectionType where ByteSequence.Generator.Element == UInt8>(sequence: ByteSequence) throws -> Json { 0075 return try JsonDeserializer(sequence).deserialize() 0076 } 0077 } 0078 0079 extension Json { 0080 public enum SerializationStyle
Json.swift:94
    public func serialize(style: SerializationStyle = .Default) -> String {
{ 0081 case Default
Json.swift:86
            case .Default:
Json.swift:94
    public func serialize(style: SerializationStyle = .Default) -> String {
0082 case PrettyPrint
Json.swift:88
            case .PrettyPrint:
0083 0084 private var serializer
Json.swift:95
        return style.serializer.init().serialize(self)
: JsonSerializer.Type { 0085 switch self { 0086 case .Default: 0087 return DefaultJsonSerializer.self 0088 case .PrettyPrint: 0089 return PrettyJsonSerializer.self 0090 } 0091 } 0092 } 0093 0094 public func serialize(style: SerializationStyle = .Default) -> String { 0095 return style.serializer.init().serialize(self) 0096 } 0097 } 0098 0099 // MARK: Convenience 0100 0101 extension Json { 0102 public var isNull
Json.swift:207
        return rhs.isNull
: Bool { 0103 guard case .NullValue = self else { return false } 0104 return true 0105 } 0106 0107 public var boolValue
Json.swift:209
        guard let rhsValue = rhs.boolValue else { return false }
: Bool? { 0108 if case let .BooleanValue(bool) = self { 0109 return bool 0110 } else if let integer = intValue where integer == 1 || integer == 0 { 0111 // When converting from foundation type `[String : AnyObject]`, something that I see as important, 0112 // it's not possible to distinguish between 'bool', 'double', and 'int'. 0113 // Because of this, if we have an integer that is 0 or 1, and a user is requesting a boolean val, 0114 // it's fairly likely this is their desired result. 0115 return integer == 1 0116 } else { 0117 return nil 0118 } 0119 } 0120 0121 public var floatValue: Float? { 0122 guard let double = doubleValue else { return nil } 0123 return Float(double) 0124 } 0125 0126 public var doubleValue
Json.swift:122
        guard let double = doubleValue else { return nil }
Json.swift:215
        guard let rhsValue = rhs.doubleValue else { return false }
: Double? { 0127 guard case let .NumberValue(double) = self else { 0128 return nil 0129 } 0130 0131 return double 0132 } 0133 0134 public var intValue
Json.swift:110
        } else if let integer = intValue where integer == 1 || integer == 0 {
Json.swift:143
        guard let intValue = intValue else { return nil }
: Int? { 0135 guard case let .NumberValue(double) = self where double % 1 == 0 else { 0136 return nil 0137 } 0138 0139 return Int(double) 0140 } 0141 0142 public var uintValue: UInt? { 0143 guard let intValue = intValue else { return nil } 0144 return UInt(intValue) 0145 } 0146 0147 public var stringValue
Json.swift:212
        guard let rhsValue = rhs.stringValue else { return false }
: String? { 0148 guard case let .StringValue(string) = self else { 0149 return nil 0150 } 0151 0152 return string 0153 } 0154 0155 public var arrayValue
Json.swift:169
        guard let array = arrayValue where index < array.count else { return nil }
Json.swift:218
        guard let rhsValue = rhs.arrayValue else { return false }
: [Json]? { 0156 guard case let .ArrayValue(array) = self else { return nil } 0157 return array 0158 } 0159 0160 public var objectValue
Json.swift:175
            guard let dict = objectValue else { return nil }
Json.swift:179
            guard let object = objectValue else { fatalError("Unable to set string subscript on non-object type!") }
Json.swift:221
        guard let rhsValue = rhs.objectValue else { return false }
: [String : Json]? { 0161 guard case let .ObjectValue(object) = self else { return nil } 0162 return object 0163 } 0164 } 0165 0166 extension Json { 0167 public subscript(index: Int) -> Json? { 0168 assert(index >= 0) 0169 guard let array = arrayValue where index < array.count else { return nil } 0170 return array[index] 0171 } 0172 0173 public subscript(key: String) -> Json? { 0174 get { 0175 guard let dict = objectValue else { return nil } 0176 return dict[key] 0177 } 0178 set { 0179 guard let object = objectValue else { fatalError("Unable to set string subscript on non-object type!") } 0180 var mutableObject = object 0181 mutableObject[key] = newValue 0182 self = .from(mutableObject) 0183 } 0184 } 0185 } 0186 0187 extension Json { 0188 public var description: String { 0189 return serialize(DefaultJsonSerializer()) 0190 } 0191 0192 public var debugDescription: String { 0193 return serialize(PrettyJsonSerializer()) 0194 } 0195 } 0196 0197 extension Json { 0198 public func serialize
Json.swift:189
        return serialize(DefaultJsonSerializer())
Json.swift:193
        return serialize(PrettyJsonSerializer())
JsonSerializer.swift:46
            .map { $0.serialize(self) }
JsonSerializer.swift:56
                let serializedVal = val.serialize(self)
JsonSerializer.swift:83
                let serialized = val.serialize(self)
JsonSerializer.swift:102
                let serializedValue = val.serialize(self)
(serializer: JsonSerializer) -> String { 0199 return serializer.serialize(self) 0200 } 0201 } 0202 0203 0204 public func ==(lhs: Json, rhs: Json) -> Bool { 0205 switch lhs { 0206 case .NullValue: 0207 return rhs.isNull 0208 case .BooleanValue(let lhsValue): 0209 guard let rhsValue = rhs.boolValue else { return false } 0210 return lhsValue == rhsValue 0211 case .StringValue(let lhsValue): 0212 guard let rhsValue = rhs.stringValue else { return false } 0213 return lhsValue == rhsValue 0214 case .NumberValue(let lhsValue): 0215 guard let rhsValue = rhs.doubleValue else { return false } 0216 return lhsValue == rhsValue 0217 case .ArrayValue(let lhsValue): 0218 guard let rhsValue = rhs.arrayValue else { return false } 0219 return lhsValue == rhsValue 0220 case .ObjectValue(let lhsValue): 0221 guard let rhsValue = rhs.objectValue else { return false } 0222 return lhsValue == rhsValue 0223 } 0224 } 0225 0226 // MARK: Literal Convertibles 0227 0228 extension Json: NilLiteralConvertible { 0229 public init(nilLiteral value: Void) { 0230 self = .NullValue 0231 } 0232 } 0233 0234 extension Json: BooleanLiteralConvertible { 0235 public init(booleanLiteral value: BooleanLiteralType) { 0236 self = .BooleanValue(value) 0237 } 0238 } 0239 0240 extension Json: IntegerLiteralConvertible { 0241 public init(integerLiteral value: IntegerLiteralType) { 0242 self = .NumberValue(Double(value)) 0243 } 0244 } 0245 0246 extension Json: FloatLiteralConvertible { 0247 public init(floatLiteral value: FloatLiteralType) { 0248 self = .NumberValue(Double(value)) 0249 } 0250 } 0251 0252 extension Json: StringLiteralConvertible { 0253 public typealias UnicodeScalarLiteralType
Json.swift:256
    public init(unicodeScalarLiteral value: UnicodeScalarLiteralType) {
= String 0254 public typealias ExtendedGraphemeClusterLiteralType = String 0255 0256 public init(unicodeScalarLiteral value: UnicodeScalarLiteralType) { 0257 self = .StringValue(value) 0258 } 0259 0260 public init(extendedGraphemeClusterLiteral value: ExtendedGraphemeClusterType) { 0261 self = .StringValue(value) 0262 } 0263 0264 public init(stringLiteral value: StringLiteralType) { 0265 self = .StringValue(value) 0266 } 0267 } 0268 0269 extension Json: ArrayLiteralConvertible { 0270 public init(arrayLiteral elements: Json...) { 0271 self = .ArrayValue(elements) 0272 } 0273 } 0274 0275 extension Json: DictionaryLiteralConvertible { 0276 public init(dictionaryLiteral elements: (String, Json)...) { 0277 var object = [String : Json](minimumCapacity: elements.count) 0278 elements.forEach { key, value in 0279 object[key] = value 0280 } 0281 self = .ObjectValue(object) 0282 } 0283 } 0284