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

This closes #3012
diff --git a/lib/lua/TJsonProtocol.lua b/lib/lua/TJsonProtocol.lua
index db08eec..cec8e26 100644
--- a/lib/lua/TJsonProtocol.lua
+++ b/lib/lua/TJsonProtocol.lua
@@ -18,8 +18,9 @@
 --
 
 require 'TProtocol'
-require 'libluabpack'
-require 'libluabitwise'
+local libluabpack = require 'libluabpack'
+local libluabitwise = require 'libluabitwise'
+local liblualongnumber = require 'liblualongnumber'
 
 TJSONProtocol = __TObject.new(TProtocolBase, {
   __type = 'TJSONProtocol',
@@ -42,6 +43,7 @@
 TTypeToString[TType.LIST]   = "lst"
 TTypeToString[TType.SET]    = "set"
 TTypeToString[TType.MAP]    = "map"
+TTypeToString[TType.UUID]   = "uid"
 
 StringToTType = {
   tf  = TType.BOOL,
@@ -54,7 +56,8 @@
   rec = TType.STRUCT,
   map = TType.MAP,
   set = TType.SET,
-  lst = TType.LIST
+  lst = TType.LIST,
+  uid = TType.UUID,
 }
 
 JSONNode = {
@@ -402,13 +405,17 @@
 end
 
 function TJSONProtocol:writeDouble(dub)
-  self:writeJSONDouble(string.format("%.16f", dub))
+  self:writeJSONDouble(string.format("%.20f", dub))
 end
 
 function TJSONProtocol:writeString(str)
   self:writeJSONString(str)
 end
 
+function TJSONProtocol:writeUuid(uuid)
+  self:writeJSONString(uuid:getString())
+end
+
 function TJSONProtocol:writeBinary(str)
   -- Should be utf-8
   self:writeJSONBase64(str)
@@ -706,6 +713,10 @@
   return self:readJSONString()
 end
 
+function TJSONProtocol:readUuid()
+  return TUUIDfromString(self:readJSONString())
+end
+
 function TJSONProtocol:readBinary()
   return self:readJSONBase64()
 end