THRIFT-4386 Add Lua 5.3/5.4 support
Clint: lua
Patch: Thomas Bruggink
This closes #3012
diff --git a/lib/lua/Thrift.lua b/lib/lua/Thrift.lua
index 58daa22..b6e3628 100644
--- a/lib/lua/Thrift.lua
+++ b/lib/lua/Thrift.lua
@@ -23,6 +23,9 @@
--setfenv(1, thrift)
package.cpath = package.cpath .. ';bin/?.so' -- TODO FIX
+
+local libluabitwise = require 'libluabitwise'
+
function ttype(obj)
if type(obj) == 'table' and
obj.__type and
@@ -66,8 +69,7 @@
MAP = 13,
SET = 14,
LIST = 15,
- UTF8 = 16,
- UTF16 = 17
+ UUID = 16
}
TMessageType = {
@@ -233,6 +235,35 @@
oprot:writeStructEnd()
end
+TUUID = {
+ zero,
+ one,
+ two,
+ three
+}
+
+TUUID = __TObject:new{
+ __type = 'TUUID'
+}
+
+function TUUIDfromString(str)
+ local iterator = string.gmatch(str, "[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]")
+ return TUUID:new {
+ zero = libluabitwise.buor(libluabitwise.ushiftl(tonumber(iterator(), 16), 16), tonumber(iterator(), 16)),
+ one = libluabitwise.buor(libluabitwise.ushiftl(tonumber(iterator(), 16), 16), tonumber(iterator(), 16)),
+ two = libluabitwise.buor(libluabitwise.ushiftl(tonumber(iterator(), 16), 16), tonumber(iterator(), 16)),
+ three = libluabitwise.buor(libluabitwise.ushiftl(tonumber(iterator(), 16), 16), tonumber(iterator(), 16))
+ }
+end
+
+function TUUID:getString()
+ return string.format("%08x-%04x-%04x-%04x-%04x%08x", self.zero, libluabitwise.ushiftr(self.one, 16), libluabitwise.buand(self.one, 0xFFFF), libluabitwise.ushiftr(self.two, 16), libluabitwise.buand(self.two, 0xFFFF), self.three)
+end
+
+function TUUID:__tostring()
+ return "<TUUID: " .. self:getString() .. ">"
+end
+
-- Basic Client (used in generated lua code)
__TClient = __TObject:new{
__type = '__TClient',