         return try getNumber().intValue
     }
     
+    public func getInt64() throws -> Int64 {
+        return try getNumber().int64Value
+    }
+    
     public func getString() throws -> String {
         guard let value = source as? String else {
             throw JAYSONError.FailedToGetString(source, self)

extension JAYSON {

    public func get<T>(_ s: (JAYSON) throws -> T) rethrows -> T {
        return try s(self)
    }
    
    public func get<T>(with decoder: Decoder<T>) throws -> T {
        return try decoder.decode(self)
    }
}


    case FailedToGetNumber(Any, JAYSON)
    case FailedToGetArray(Any, JAYSON)
    case InvalidJSONObject
    case DecodeError(Any, JAYSON, Error)
}

public struct JAYSON: CustomDebugStringConvertible {
