|  | -- | 
|  | -- 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. | 
|  | -- | 
|  |  | 
|  | require 'Thrift' | 
|  |  | 
|  | TProtocolException = TException:new { | 
|  | UNKNOWN          = 0, | 
|  | INVALID_DATA     = 1, | 
|  | NEGATIVE_SIZE    = 2, | 
|  | SIZE_LIMIT       = 3, | 
|  | BAD_VERSION      = 4, | 
|  | INVALID_PROTOCOL = 5, | 
|  | DEPTH_LIMIT      = 6, | 
|  | errorCode        = 0, | 
|  | __type = 'TProtocolException' | 
|  | } | 
|  | function TProtocolException:__errorCodeToString() | 
|  | if self.errorCode == self.INVALID_DATA then | 
|  | return 'Invalid data' | 
|  | elseif self.errorCode == self.NEGATIVE_SIZE then | 
|  | return 'Negative size' | 
|  | elseif self.errorCode == self.SIZE_LIMIT then | 
|  | return 'Size limit' | 
|  | elseif self.errorCode == self.BAD_VERSION then | 
|  | return 'Bad version' | 
|  | elseif self.errorCode == self.INVALID_PROTOCOL then | 
|  | return 'Invalid protocol' | 
|  | elseif self.errorCode == self.DEPTH_LIMIT then | 
|  | return 'Exceeded size limit' | 
|  | else | 
|  | return 'Default (unknown)' | 
|  | end | 
|  | end | 
|  |  | 
|  | TProtocolBase = __TObject:new{ | 
|  | __type = 'TProtocolBase', | 
|  | trans | 
|  | } | 
|  |  | 
|  | function TProtocolBase:new(obj) | 
|  | if ttype(obj) ~= 'table' then | 
|  | error(ttype(self) .. 'must be initialized with a table') | 
|  | end | 
|  |  | 
|  | -- Ensure a transport is provided | 
|  | if not obj.trans then | 
|  | error('You must provide ' .. ttype(self) .. ' with a trans') | 
|  | end | 
|  |  | 
|  | return __TObject.new(self, obj) | 
|  | end | 
|  |  | 
|  | function TProtocolBase:writeMessageBegin(name, ttype, seqid) end | 
|  | function TProtocolBase:writeMessageEnd() end | 
|  | function TProtocolBase:writeStructBegin(name) end | 
|  | function TProtocolBase:writeStructEnd() end | 
|  | function TProtocolBase:writeFieldBegin(name, ttype, id) end | 
|  | function TProtocolBase:writeFieldEnd() end | 
|  | function TProtocolBase:writeFieldStop() end | 
|  | function TProtocolBase:writeMapBegin(ktype, vtype, size) end | 
|  | function TProtocolBase:writeMapEnd() end | 
|  | function TProtocolBase:writeListBegin(ttype, size) end | 
|  | function TProtocolBase:writeListEnd() end | 
|  | function TProtocolBase:writeSetBegin(ttype, size) end | 
|  | function TProtocolBase:writeSetEnd() end | 
|  | function TProtocolBase:writeBool(bool) end | 
|  | function TProtocolBase:writeByte(byte) end | 
|  | function TProtocolBase:writeI16(i16) end | 
|  | function TProtocolBase:writeI32(i32) end | 
|  | function TProtocolBase:writeI64(i64) end | 
|  | function TProtocolBase:writeDouble(dub) end | 
|  | function TProtocolBase:writeString(str) end | 
|  | function TProtocolBase:readMessageBegin() end | 
|  | function TProtocolBase:readMessageEnd() end | 
|  | function TProtocolBase:readStructBegin() end | 
|  | function TProtocolBase:readStructEnd() end | 
|  | function TProtocolBase:readFieldBegin() end | 
|  | function TProtocolBase:readFieldEnd() end | 
|  | function TProtocolBase:readMapBegin() end | 
|  | function TProtocolBase:readMapEnd() end | 
|  | function TProtocolBase:readListBegin() end | 
|  | function TProtocolBase:readListEnd() end | 
|  | function TProtocolBase:readSetBegin() end | 
|  | function TProtocolBase:readSetEnd() end | 
|  | function TProtocolBase:readBool() end | 
|  | function TProtocolBase:readByte() end | 
|  | function TProtocolBase:readI16() end | 
|  | function TProtocolBase:readI32() end | 
|  | function TProtocolBase:readI64() end | 
|  | function TProtocolBase:readDouble() end | 
|  | function TProtocolBase:readString() end | 
|  |  | 
|  | function TProtocolBase:skip(ttype) | 
|  | if type == TType.STOP then | 
|  | return | 
|  | elseif ttype == TType.BOOL then | 
|  | self:readBool() | 
|  | elseif ttype == TType.BYTE then | 
|  | self:readByte() | 
|  | elseif ttype == TType.I16 then | 
|  | self:readI16() | 
|  | elseif ttype == TType.I32 then | 
|  | self:readI32() | 
|  | elseif ttype == TType.I64 then | 
|  | self:readI64() | 
|  | elseif ttype == TType.DOUBLE then | 
|  | self:readDouble() | 
|  | elseif ttype == TType.STRING then | 
|  | self:readString() | 
|  | elseif ttype == TType.STRUCT then | 
|  | local name = self:readStructBegin() | 
|  | while true do | 
|  | local name, ttype, id = self:readFieldBegin() | 
|  | if ttype == TType.STOP then | 
|  | break | 
|  | end | 
|  | self:skip(ttype) | 
|  | self:readFieldEnd() | 
|  | end | 
|  | self:readStructEnd() | 
|  | elseif ttype == TType.MAP then | 
|  | local kttype, vttype, size = self:readMapBegin() | 
|  | for i = 1, size, 1 do | 
|  | self:skip(kttype) | 
|  | self:skip(vttype) | 
|  | end | 
|  | self:readMapEnd() | 
|  | elseif ttype == TType.SET then | 
|  | local ettype, size = self:readSetBegin() | 
|  | for i = 1, size, 1 do | 
|  | self:skip(ettype) | 
|  | end | 
|  | self:readSetEnd() | 
|  | elseif ttype == TType.LIST then | 
|  | local ettype, size = self:readListBegin() | 
|  | for i = 1, size, 1 do | 
|  | self:skip(ettype) | 
|  | end | 
|  | self:readListEnd() | 
|  | end | 
|  | end | 
|  |  | 
|  | TProtocolFactory = __TObject:new{ | 
|  | __type = 'TProtocolFactory', | 
|  | } | 
|  | function TProtocolFactory:getProtocol(trans) end |