blob: 3fdfd41b070314f6e12aab14a5c3456f22728271 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import Foundation
public protocol TSerializable : Hashable {
static var thriftType : TType { get }
init()
static func readValueFromProtocol(proto: TProtocol) throws -> Self
static func writeValue(value: Self, toProtocol proto: TProtocol) throws
}
infix operator ?== {}
public func ?==<T: TSerializable>(lhs: T?, rhs: T?) -> Bool {
if let l = lhs, r = rhs {
return l == r
}
return lhs == rhs
}
public func ?==<T: TSerializable>(lhs: T, rhs: T) -> Bool {
return lhs == rhs
}
extension Bool : TSerializable {
public static let thriftType = TType.BOOL
public static func readValueFromProtocol(proto: TProtocol) throws -> Bool {
var value : ObjCBool = false
try proto.readBool(&value)
return value.boolValue
}
public static func writeValue(value: Bool, toProtocol proto: TProtocol) throws {
try proto.writeBool(value)
}
}
extension Int8 : TSerializable {
public static let thriftType = TType.BYTE
public static func readValueFromProtocol(proto: TProtocol) throws -> Int8 {
var value = UInt8()
try proto.readByte(&value)
return Int8(value)
}
public static func writeValue(value: Int8, toProtocol proto: TProtocol) throws {
try proto.writeByte(UInt8(value))
}
}
extension Int16 : TSerializable {
public static let thriftType = TType.I16
public static func readValueFromProtocol(proto: TProtocol) throws -> Int16 {
var value = Int16()
try proto.readI16(&value)
return value
}
public static func writeValue(value: Int16, toProtocol proto: TProtocol) throws {
try proto.writeI16(value)
}
}
extension Int : TSerializable {
public static let thriftType = TType.I32
public static func readValueFromProtocol(proto: TProtocol) throws -> Int {
var value = Int32()
try proto.readI32(&value)
return Int(value)
}
public static func writeValue(value: Int, toProtocol proto: TProtocol) throws {
try proto.writeI32(Int32(value))
}
}
extension Int32 : TSerializable {
public static let thriftType = TType.I32
public static func readValueFromProtocol(proto: TProtocol) throws -> Int32 {
var value = Int32()
try proto.readI32(&value)
return value
}
public static func writeValue(value: Int32, toProtocol proto: TProtocol) throws {
try proto.writeI32(value)
}
}
extension Int64 : TSerializable {
public static let thriftType = TType.I64
public static func readValueFromProtocol(proto: TProtocol) throws -> Int64 {
var value = Int64()
try proto.readI64(&value)
return value
}
public static func writeValue(value: Int64, toProtocol proto: TProtocol) throws {
try proto.writeI64(value)
}
}
extension Double : TSerializable {
public static let thriftType = TType.DOUBLE
public static func readValueFromProtocol(proto: TProtocol) throws -> Double {
var value = Double()
try proto.readDouble(&value)
return value
}
public static func writeValue(value: Double, toProtocol proto: TProtocol) throws {
try proto.writeDouble(value)
}
}
extension String : TSerializable {
public static let thriftType = TType.STRING
public static func readValueFromProtocol(proto: TProtocol) throws -> String {
var value : NSString?
try proto.readString(&value)
return value as! String
}
public static func writeValue(value: String, toProtocol proto: TProtocol) throws {
try proto.writeString(value)
}
}