wing328 06686d65fa [Lua] Add new Lua client generator (#6252)
* 1st commit of lua generator

* add petstore sample

* various fixes based on feedback

* better return handling

* check status code 1st letter

* add support for query parameters, auth, body param

* more fixes based on daurnimator feedback

* more fixes based on daurnimator feedback

* fix a few more issues found by luac -p

* use lower case for http header key name

* more fixes based on feedback

* update lua sample

* skip auto-generated readme, doc, test files

* use tab instead of 2-space

* fix container return type

* fix cast method call

* fix cast function call
2017-08-11 01:41:29 +08:00

424 lines
12 KiB
Lua

--[[
Swagger Petstore
This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key `special-key` to test the authorization filters.
OpenAPI spec version: 1.0.0
Contact: apiteam@swagger.io
Generated by: https://github.com/swagger-api/swagger-codegen.git
]]
--package petstore
local http_request = require "http.request"
local http_util = require "http.util"
local dkjson = require "dkjson"
local basexx = require "basexx"
-- model import
local petstore_pet_api = require "petstore.api.pet_api"
local petstore= {}
local petstore_mt = {
__name = "pet_api";
__index = petstore;
}
local function new_pet_api(host, basePath, schemes)
local schemes_map = {}
for _,v in ipairs(schemes) do
schemes_map[v] = v
end
local default_scheme = schemes_map.https or schemes_map.http
return setmetatable({
host = host;
basePath = basePath or "http://petstore.swagger.io/v2";
schemes = schemes_map;
default_scheme = default_scheme;
http_username = nil;
http_password = nil;
api_key = {};
access_token = nil;
}, petstore_mt)
end
function pet_api:add_pet(body)
local req = http_request.new_from_uri({
scheme = self.default_scheme;
host = self.host;
path = string.format("%s/pet",
self.basePath);
})
-- set HTTP verb
req.headers:upsert(":method", "POST")
-- TODO: create a function to select proper accept
-- ref: https://github.com/swagger-api/swagger-codegen/pull/6252#issuecomment-321199879
--local var_content_type = { "application/json", "application/xml" }
req.headers:upsert("accept", "application/json")
-- TODO: create a function to select proper content-type
-- ref: https://github.com/swagger-api/swagger-codegen/pull/6252#issuecomment-321199879
--local var_accept = { "application/xml", "application/json" }
req.headers:upsert("content-type", "application/xml")
req:set_body(dkjson.encode(body))
-- oAuth
req.headers:upsert("authorization", "Bearer " .. self.access_token)
-- make the HTTP call
local headers, stream, errno = req:go()
if not headers then
return nil, stream, errno
end
local http_status = headers:get(":status")
if http_status:sub(1,1) == "2" then
return nil, headers
else
local body, err, errno2 = stream:get_body_as_string()
if not body then
return nil, err, errno2
end
stream:shutdown()
-- return the error message (http body)
return nil, http_status, body
end
end
function pet_api:delete_pet(pet_id, api_key)
local req = http_request.new_from_uri({
scheme = self.default_scheme;
host = self.host;
path = string.format("%s/pet/%s",
self.basePath, pet_id);
})
-- set HTTP verb
req.headers:upsert(":method", "DELETE")
-- TODO: create a function to select proper content-type
-- ref: https://github.com/swagger-api/swagger-codegen/pull/6252#issuecomment-321199879
--local var_accept = { "application/xml", "application/json" }
req.headers:upsert("content-type", "application/xml")
req.headers:upsert("api_key", api_key)
-- oAuth
req.headers:upsert("authorization", "Bearer " .. self.access_token)
-- make the HTTP call
local headers, stream, errno = req:go()
if not headers then
return nil, stream, errno
end
local http_status = headers:get(":status")
if http_status:sub(1,1) == "2" then
return nil, headers
else
local body, err, errno2 = stream:get_body_as_string()
if not body then
return nil, err, errno2
end
stream:shutdown()
-- return the error message (http body)
return nil, http_status, body
end
end
function pet_api:find_pets_by_status(status)
local req = http_request.new_from_uri({
scheme = self.default_scheme;
host = self.host;
path = string.format("%s/pet/findByStatus?status=%s",
self.basePath, http_util.encodeURIComponent(status));
})
-- set HTTP verb
req.headers:upsert(":method", "GET")
-- TODO: create a function to select proper content-type
-- ref: https://github.com/swagger-api/swagger-codegen/pull/6252#issuecomment-321199879
--local var_accept = { "application/xml", "application/json" }
req.headers:upsert("content-type", "application/xml")
-- oAuth
req.headers:upsert("authorization", "Bearer " .. self.access_token)
-- make the HTTP call
local headers, stream, errno = req:go()
if not headers then
return nil, stream, errno
end
local http_status = headers:get(":status")
if http_status:sub(1,1) == "2" then
local body, err, errno2 = stream:get_body_as_string()
-- exception when getting the HTTP body
if not body then
return nil, err, errno2
end
stream:shutdown()
local result, _, err3 = dkjson.decode(body)
-- exception when decoding the HTTP body
if result == nil then
return nil, err3
end
for _, ob in ipairs(result) do
cast_pet(ob)
end
return result, headers
else
local body, err, errno2 = stream:get_body_as_string()
if not body then
return nil, err, errno2
end
stream:shutdown()
-- return the error message (http body)
return nil, http_status, body
end
end
function pet_api:find_pets_by_tags(tags)
local req = http_request.new_from_uri({
scheme = self.default_scheme;
host = self.host;
path = string.format("%s/pet/findByTags?tags=%s",
self.basePath, http_util.encodeURIComponent(tags));
})
-- set HTTP verb
req.headers:upsert(":method", "GET")
-- TODO: create a function to select proper content-type
-- ref: https://github.com/swagger-api/swagger-codegen/pull/6252#issuecomment-321199879
--local var_accept = { "application/xml", "application/json" }
req.headers:upsert("content-type", "application/xml")
-- oAuth
req.headers:upsert("authorization", "Bearer " .. self.access_token)
-- make the HTTP call
local headers, stream, errno = req:go()
if not headers then
return nil, stream, errno
end
local http_status = headers:get(":status")
if http_status:sub(1,1) == "2" then
local body, err, errno2 = stream:get_body_as_string()
-- exception when getting the HTTP body
if not body then
return nil, err, errno2
end
stream:shutdown()
local result, _, err3 = dkjson.decode(body)
-- exception when decoding the HTTP body
if result == nil then
return nil, err3
end
for _, ob in ipairs(result) do
cast_pet(ob)
end
return result, headers
else
local body, err, errno2 = stream:get_body_as_string()
if not body then
return nil, err, errno2
end
stream:shutdown()
-- return the error message (http body)
return nil, http_status, body
end
end
function pet_api:get_pet_by_id(pet_id)
local req = http_request.new_from_uri({
scheme = self.default_scheme;
host = self.host;
path = string.format("%s/pet/%s",
self.basePath, pet_id);
})
-- set HTTP verb
req.headers:upsert(":method", "GET")
-- TODO: create a function to select proper content-type
-- ref: https://github.com/swagger-api/swagger-codegen/pull/6252#issuecomment-321199879
--local var_accept = { "application/xml", "application/json" }
req.headers:upsert("content-type", "application/xml")
-- api key in headers 'api_key'
req.headers:upsert("api_key", api_key['api_key'])
-- make the HTTP call
local headers, stream, errno = req:go()
if not headers then
return nil, stream, errno
end
local http_status = headers:get(":status")
if http_status:sub(1,1) == "2" then
local body, err, errno2 = stream:get_body_as_string()
-- exception when getting the HTTP body
if not body then
return nil, err, errno2
end
stream:shutdown()
local result, _, err3 = dkjson.decode(body)
-- exception when decoding the HTTP body
if result == nil then
return nil, err3
end
return cast_pet(result), headers
else
local body, err, errno2 = stream:get_body_as_string()
if not body then
return nil, err, errno2
end
stream:shutdown()
-- return the error message (http body)
return nil, http_status, body
end
end
function pet_api:update_pet(body)
local req = http_request.new_from_uri({
scheme = self.default_scheme;
host = self.host;
path = string.format("%s/pet",
self.basePath);
})
-- set HTTP verb
req.headers:upsert(":method", "PUT")
-- TODO: create a function to select proper accept
-- ref: https://github.com/swagger-api/swagger-codegen/pull/6252#issuecomment-321199879
--local var_content_type = { "application/json", "application/xml" }
req.headers:upsert("accept", "application/json")
-- TODO: create a function to select proper content-type
-- ref: https://github.com/swagger-api/swagger-codegen/pull/6252#issuecomment-321199879
--local var_accept = { "application/xml", "application/json" }
req.headers:upsert("content-type", "application/xml")
req:set_body(dkjson.encode(body))
-- oAuth
req.headers:upsert("authorization", "Bearer " .. self.access_token)
-- make the HTTP call
local headers, stream, errno = req:go()
if not headers then
return nil, stream, errno
end
local http_status = headers:get(":status")
if http_status:sub(1,1) == "2" then
return nil, headers
else
local body, err, errno2 = stream:get_body_as_string()
if not body then
return nil, err, errno2
end
stream:shutdown()
-- return the error message (http body)
return nil, http_status, body
end
end
function pet_api:update_pet_with_form(pet_id, name, status)
local req = http_request.new_from_uri({
scheme = self.default_scheme;
host = self.host;
path = string.format("%s/pet/%s",
self.basePath, pet_id);
})
-- set HTTP verb
req.headers:upsert(":method", "POST")
-- TODO: create a function to select proper accept
-- ref: https://github.com/swagger-api/swagger-codegen/pull/6252#issuecomment-321199879
--local var_content_type = { "application/x-www-form-urlencoded" }
req.headers:upsert("accept", "application/x-www-form-urlencoded")
-- TODO: create a function to select proper content-type
-- ref: https://github.com/swagger-api/swagger-codegen/pull/6252#issuecomment-321199879
--local var_accept = { "application/xml", "application/json" }
req.headers:upsert("content-type", "application/xml")
req:set_body(http_util.dict_to_query({
["name"] = name;
["status"] = status;
}))
-- oAuth
req.headers:upsert("authorization", "Bearer " .. self.access_token)
-- make the HTTP call
local headers, stream, errno = req:go()
if not headers then
return nil, stream, errno
end
local http_status = headers:get(":status")
if http_status:sub(1,1) == "2" then
return nil, headers
else
local body, err, errno2 = stream:get_body_as_string()
if not body then
return nil, err, errno2
end
stream:shutdown()
-- return the error message (http body)
return nil, http_status, body
end
end
function pet_api:upload_file(pet_id, additional_metadata, file)
local req = http_request.new_from_uri({
scheme = self.default_scheme;
host = self.host;
path = string.format("%s/pet/%s/uploadImage",
self.basePath, pet_id);
})
-- set HTTP verb
req.headers:upsert(":method", "POST")
-- TODO: create a function to select proper accept
-- ref: https://github.com/swagger-api/swagger-codegen/pull/6252#issuecomment-321199879
--local var_content_type = { "multipart/form-data" }
req.headers:upsert("accept", "multipart/form-data")
-- TODO: create a function to select proper content-type
-- ref: https://github.com/swagger-api/swagger-codegen/pull/6252#issuecomment-321199879
--local var_accept = { "application/json" }
req.headers:upsert("content-type", "application/json")
req:set_body(http_util.dict_to_query({
["additionalMetadata"] = additional_metadata;
["file"] = file;
}))
-- oAuth
req.headers:upsert("authorization", "Bearer " .. self.access_token)
-- make the HTTP call
local headers, stream, errno = req:go()
if not headers then
return nil, stream, errno
end
local http_status = headers:get(":status")
if http_status:sub(1,1) == "2" then
local body, err, errno2 = stream:get_body_as_string()
-- exception when getting the HTTP body
if not body then
return nil, err, errno2
end
stream:shutdown()
local result, _, err3 = dkjson.decode(body)
-- exception when decoding the HTTP body
if result == nil then
return nil, err3
end
return cast_api_response(result), headers
else
local body, err, errno2 = stream:get_body_as_string()
if not body then
return nil, err, errno2
end
stream:shutdown()
-- return the error message (http body)
return nil, http_status, body
end
end