THRIFT-1681: Add Lua Support Patch: Dave Watson

Github Pull Request: This closes #92
diff --git a/lib/lua/TTransport.lua b/lib/lua/TTransport.lua
new file mode 100644
index 0000000..01c7e59
--- /dev/null
+++ b/lib/lua/TTransport.lua
@@ -0,0 +1,93 @@
+--
+-- 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'
+
+TTransportException = TException:new {
+  UNKNOWN             = 0,
+  NOT_OPEN            = 1,
+  ALREADY_OPEN        = 2,
+  TIMED_OUT           = 3,
+  END_OF_FILE         = 4,
+  INVALID_FRAME_SIZE  = 5,
+  INVALID_TRANSFORM   = 6,
+  INVALID_CLIENT_TYPE = 7,
+  errorCode        = 0,
+  __type = 'TTransportException'
+}
+
+function TTransportException:__errorCodeToString()
+  if self.errorCode == self.NOT_OPEN then
+    return 'Transport not open'
+  elseif self.errorCode == self.ALREADY_OPEN then
+    return 'Transport already open'
+  elseif self.errorCode == self.TIMED_OUT then
+    return 'Transport timed out'
+  elseif self.errorCode == self.END_OF_FILE then
+    return 'End of file'
+  elseif self.errorCode == self.INVALID_FRAME_SIZE then
+    return 'Invalid frame size'
+  elseif self.errorCode == self.INVALID_TRANSFORM then
+    return 'Invalid transform'
+  elseif self.errorCode == self.INVALID_CLIENT_TYPE then
+    return 'Invalid client type'
+  else
+    return 'Default (unknown)'
+  end
+end
+
+TTransportBase = __TObject:new{
+  __type = 'TTransportBase'
+}
+
+function TTransportBase:isOpen() end
+function TTransportBase:open() end
+function TTransportBase:close() end
+function TTransportBase:read(len) end
+function TTransportBase:readAll(len)
+  local buf, have, chunk = '', 0
+  while have < len do
+    chunk = self:read(len - have)
+    have = have + string.len(chunk)
+    buf = buf .. chunk
+
+    if string.len(chunk) == 0 then
+      terror(TTransportException:new{
+        errorCode = TTransportException.END_OF_FILE
+      })
+    end
+  end
+  return buf
+end
+function TTransportBase:write(buf) end
+function TTransportBase:flush() end
+
+TServerTransportBase = __TObject:new{
+  __type = 'TServerTransportBase'
+}
+function TServerTransportBase:listen() end
+function TServerTransportBase:accept() end
+function TServerTransportBase:close() end
+
+TTransportFactoryBase = __TObject:new{
+  __type = 'TTransportFactoryBase'
+}
+function TTransportFactoryBase:getTransport(trans)
+  return trans
+end