THRIFT-4386 Add Lua 5.3/5.4 support
Clint: lua
Patch: Thomas Bruggink

This closes #3012
diff --git a/lib/lua/TBinaryProtocol.lua b/lib/lua/TBinaryProtocol.lua
index 4b8e98a..9eacc4a 100644
--- a/lib/lua/TBinaryProtocol.lua
+++ b/lib/lua/TBinaryProtocol.lua
@@ -18,8 +18,8 @@
 --
 
 require 'TProtocol'
-require 'libluabpack'
-require 'libluabitwise'
+local libluabpack = require 'libluabpack'
+local libluabitwise = require 'libluabitwise'
 
 TBinaryProtocol = __TObject.new(TProtocolBase, {
   __type = 'TBinaryProtocol',
@@ -111,6 +111,11 @@
   self.trans:write(buff)
 end
 
+function TBinaryProtocol:writeUI32(i32)
+  local buff = libluabpack.bpack('I', i32)
+  self.trans:write(buff)
+end
+
 function TBinaryProtocol:writeI64(i64)
   local buff = libluabpack.bpack('l', i64)
   self.trans:write(buff)
@@ -127,6 +132,13 @@
   self.trans:write(str)
 end
 
+function TBinaryProtocol:writeUuid(uuid)
+  self:writeUI32(uuid.two)
+  self:writeUI32(uuid.three)
+  self:writeUI32(uuid.zero)
+  self:writeUI32(uuid.one)
+end
+
 function TBinaryProtocol:readMessageBegin()
   local sz, ttype, name, seqid = self:readI32()
   if sz < 0 then
@@ -226,6 +238,12 @@
   return val
 end
 
+function TBinaryProtocol:readUI32()
+  local buff = self.trans:readAll(4)
+  local val = libluabpack.bunpack('I', buff)
+  return val
+end
+
 function TBinaryProtocol:readI64()
   local buff = self.trans:readAll(8)
   local val = libluabpack.bunpack('l', buff)
@@ -244,6 +262,19 @@
   return str
 end
 
+function TBinaryProtocol: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
+
 TBinaryProtocolFactory = TProtocolFactory:new{
   __type = 'TBinaryProtocolFactory',
   strictRead = false