THRIFT-4386 Add Lua 5.3/5.4 support
Clint: lua
Patch: Thomas Bruggink
This closes #3012
diff --git a/lib/lua/TCompactProtocol.lua b/lib/lua/TCompactProtocol.lua
index 8ec7b3a..f01c56f 100644
--- a/lib/lua/TCompactProtocol.lua
+++ b/lib/lua/TCompactProtocol.lua
@@ -18,9 +18,9 @@
--
require 'TProtocol'
-require 'libluabpack'
-require 'libluabitwise'
-require 'liblualongnumber'
+local libluabpack = require 'libluabpack'
+local libluabitwise = require 'libluabitwise'
+local liblualongnumber = require 'liblualongnumber'
TCompactProtocol = __TObject.new(TProtocolBase, {
__type = 'TCompactProtocol',
@@ -61,7 +61,8 @@
COMPACT_LIST = 0x09,
COMPACT_SET = 0x0A,
COMPACT_MAP = 0x0B,
- COMPACT_STRUCT = 0x0C
+ COMPACT_STRUCT = 0x0C,
+ COMPACT_UUID = 0x0D,
}
TTypeToCompactType = {}
@@ -77,21 +78,23 @@
TTypeToCompactType[TType.SET] = TCompactType.COMPACT_SET
TTypeToCompactType[TType.MAP] = TCompactType.COMPACT_MAP
TTypeToCompactType[TType.STRUCT] = TCompactType.COMPACT_STRUCT
+TTypeToCompactType[TType.UUID] = TCompactType.COMPACT_UUID
CompactTypeToTType = {}
-CompactTypeToTType[TType.STOP] = TType.STOP
-CompactTypeToTType[TCompactType.COMPACT_BOOLEAN_TRUE] = TType.BOOL
+CompactTypeToTType[TType.STOP] = TType.STOP
+CompactTypeToTType[TCompactType.COMPACT_BOOLEAN_TRUE] = TType.BOOL
CompactTypeToTType[TCompactType.COMPACT_BOOLEAN_FALSE] = TType.BOOL
-CompactTypeToTType[TCompactType.COMPACT_BYTE] = TType.BYTE
-CompactTypeToTType[TCompactType.COMPACT_I16] = TType.I16
-CompactTypeToTType[TCompactType.COMPACT_I32] = TType.I32
-CompactTypeToTType[TCompactType.COMPACT_I64] = TType.I64
-CompactTypeToTType[TCompactType.COMPACT_DOUBLE] = TType.DOUBLE
-CompactTypeToTType[TCompactType.COMPACT_BINARY] = TType.STRING
-CompactTypeToTType[TCompactType.COMPACT_LIST] = TType.LIST
-CompactTypeToTType[TCompactType.COMPACT_SET] = TType.SET
-CompactTypeToTType[TCompactType.COMPACT_MAP] = TType.MAP
-CompactTypeToTType[TCompactType.COMPACT_STRUCT] = TType.STRUCT
+CompactTypeToTType[TCompactType.COMPACT_BYTE] = TType.BYTE
+CompactTypeToTType[TCompactType.COMPACT_I16] = TType.I16
+CompactTypeToTType[TCompactType.COMPACT_I32] = TType.I32
+CompactTypeToTType[TCompactType.COMPACT_I64] = TType.I64
+CompactTypeToTType[TCompactType.COMPACT_DOUBLE] = TType.DOUBLE
+CompactTypeToTType[TCompactType.COMPACT_BINARY] = TType.STRING
+CompactTypeToTType[TCompactType.COMPACT_LIST] = TType.LIST
+CompactTypeToTType[TCompactType.COMPACT_SET] = TType.SET
+CompactTypeToTType[TCompactType.COMPACT_MAP] = TType.MAP
+CompactTypeToTType[TCompactType.COMPACT_STRUCT] = TType.STRUCT
+CompactTypeToTType[TCompactType.COMPACT_UUID] = TType.UUID
function TCompactProtocol:resetLastField()
self.lastField = {}
@@ -197,6 +200,11 @@
self:writeVarint32(libluabpack.i32ToZigzag(i32))
end
+function TCompactProtocol:writeUI32(i32)
+ local buff = libluabpack.bpack('I', i32)
+ self.trans:write(buff)
+end
+
function TCompactProtocol:writeI64(i64)
self:writeVarint64(libluabpack.i64ToZigzag(i64))
end
@@ -211,6 +219,13 @@
self:writeBinary(str)
end
+function TCompactProtocol:writeUuid(uuid)
+ self:writeUI32(uuid.two)
+ self:writeUI32(uuid.three)
+ self:writeUI32(uuid.zero)
+ self:writeUI32(uuid.one)
+end
+
function TCompactProtocol:writeBinary(str)
-- Should be utf-8
self:writeVarint32(string.len(str))
@@ -385,6 +400,12 @@
return value
end
+function TCompactProtocol:readUI32()
+ local buff = self.trans:readAll(4)
+ local val = libluabpack.bunpack('I', buff)
+ return val
+end
+
function TCompactProtocol:readI64()
local value = self:readVarint64()
return value
@@ -400,6 +421,19 @@
return self:readBinary()
end
+function TCompactProtocol:readUuid()
+ local a = self:readUI32()
+ local b = self:readUI32()
+ local c = self:readUI32()
+ local d = self:readUI32()
+ return TUUID:new {
+ zero = c,
+ one = d,
+ two = a,
+ three = b
+ }
+end
+
function TCompactProtocol:readBinary()
local size = self:readVarint32()
if size <= 0 then