forked from loafle/openapi-generator-original
samples/client/petstore/lua: Add lua sample (#6244)
* samples/client/petstore/lua: Add basic lua GET request * samples/client/petstore/lua: Add classes
This commit is contained in:
parent
53f9ae277b
commit
5d14f3f733
1
samples/client/petstore/lua/README.md
Normal file
1
samples/client/petstore/lua/README.md
Normal file
@ -0,0 +1 @@
|
||||
https://github.com/swagger-api/swagger-codegen/issues/4794#issuecomment-320245838
|
12
samples/client/petstore/lua/main.lua
Normal file
12
samples/client/petstore/lua/main.lua
Normal file
@ -0,0 +1,12 @@
|
||||
local petstore_client = require "petstore_client"
|
||||
local petstore_client_pet = require "petstore_client.pet"
|
||||
|
||||
local my_pet_http_api = petstore_client.new("petstore.swagger.io", "/v2", {"http"})
|
||||
|
||||
local my_pet = assert(my_pet_http_api:getPetById(4))
|
||||
for k,v in pairs(my_pet) do
|
||||
print(k,v)
|
||||
end
|
||||
|
||||
local my_new_pet = petstore_client_pet.new("Mr. Barks")
|
||||
assert(my_pet_http_api:addPet(my_new_pet))
|
118
samples/client/petstore/lua/petstore_client/init.lua
Normal file
118
samples/client/petstore/lua/petstore_client/init.lua
Normal file
@ -0,0 +1,118 @@
|
||||
local http_request = require "http.request"
|
||||
local http_util = require "http.util"
|
||||
local dkjson = require "dkjson"
|
||||
|
||||
local petstore_client_pet = require "petstore_client.pet"
|
||||
|
||||
-- API class
|
||||
local pet_http_api = {}
|
||||
local pet_http_api_mt = {
|
||||
__name = "pet-http-api";
|
||||
__index = pet_http_api;
|
||||
}
|
||||
|
||||
local function new_pet_http_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;
|
||||
schemes = schemes_map;
|
||||
default_scheme = default_scheme;
|
||||
}, pet_http_api_mt)
|
||||
end
|
||||
|
||||
function pet_http_api:getPetById(petId)
|
||||
local req = http_request.new_from_uri({
|
||||
scheme = self.default_scheme;
|
||||
host = self.host;
|
||||
path = string.format("%s/pet/%d", self.basePath, petId);
|
||||
})
|
||||
req.headers:upsert("accept", "application/json")
|
||||
local headers, stream, errno = req:go()
|
||||
if not headers then
|
||||
return nil, stream, errno
|
||||
end
|
||||
local http_status = headers:get(":status")
|
||||
if http_status == "200" then
|
||||
local body, err, errno2 = stream:get_body_as_string()
|
||||
if not body then
|
||||
return nil, err, errno2
|
||||
end
|
||||
stream:shutdown()
|
||||
local result, _, err3 = dkjson.decode(body)
|
||||
if result == nil then
|
||||
return nil, err3
|
||||
end
|
||||
return petstore_client_pet.cast(result)
|
||||
elseif http_status == "400" then
|
||||
stream:shutdown()
|
||||
return nil, "Invalid ID supplied"
|
||||
elseif http_status == "404" then
|
||||
stream:shutdown()
|
||||
return nil, "Pet not found"
|
||||
else
|
||||
stream:shutdown()
|
||||
return nil, "Unexpected response status code"
|
||||
end
|
||||
end
|
||||
|
||||
function pet_http_api:updatePetWithForm(petId, name, status)
|
||||
local req = http_request.new_from_uri({
|
||||
scheme = self.default_scheme;
|
||||
host = self.host;
|
||||
path = string.format("%s/pet/%d", self.basePath, petId);
|
||||
})
|
||||
req.headers:upsert(":method", "POST")
|
||||
req.headers:upsert("content-type", "application/x-www-form-urlencoded")
|
||||
req:set_body(http_util.dict_to_query({
|
||||
name = name;
|
||||
status = status;
|
||||
}))
|
||||
req.headers:upsert("accept", "application/json")
|
||||
local headers, stream, errno = req:go()
|
||||
if not headers then
|
||||
return nil, stream, errno
|
||||
end
|
||||
local http_status = headers:get(":status")
|
||||
if http_status == "405" then
|
||||
stream:shutdown()
|
||||
return nil, "Invalid input"
|
||||
else
|
||||
-- TODO: this should handle 200... but it's not in the spec?
|
||||
stream:shutdown()
|
||||
return nil, "Unexpected response status code"
|
||||
end
|
||||
end
|
||||
|
||||
function pet_http_api:addPet(pet)
|
||||
local req = http_request.new_from_uri({
|
||||
scheme = self.default_scheme;
|
||||
host = self.host;
|
||||
path = string.format("%s/pet", self.basePath);
|
||||
})
|
||||
req.headers:upsert(":method", "POST")
|
||||
req.headers:upsert("content-type", "application/json")
|
||||
req:set_body(dkjson.encode(pet))
|
||||
req.headers:upsert("accept", "application/json")
|
||||
local headers, stream, errno = req:go()
|
||||
if not headers then
|
||||
return nil, stream, errno
|
||||
end
|
||||
local http_status = headers:get(":status")
|
||||
if http_status == "405" then
|
||||
stream:shutdown()
|
||||
return nil, "Invalid input"
|
||||
else
|
||||
-- TODO: this should handle 200... but it's not in the spec?
|
||||
stream:shutdown()
|
||||
return nil, "Unexpected response status code"
|
||||
end
|
||||
end
|
||||
|
||||
return {
|
||||
new = new_pet_http_api;
|
||||
}
|
23
samples/client/petstore/lua/petstore_client/pet.lua
Normal file
23
samples/client/petstore/lua/petstore_client/pet.lua
Normal file
@ -0,0 +1,23 @@
|
||||
-- Pet class
|
||||
local pet = {}
|
||||
local pet_mt = {
|
||||
__name = "pet";
|
||||
__index = pet;
|
||||
}
|
||||
|
||||
local function cast_pet(t)
|
||||
return setmetatable(t, pet_mt)
|
||||
end
|
||||
|
||||
local function new_pet(name)
|
||||
return cast_pet({
|
||||
name = name;
|
||||
photoUrls = {};
|
||||
tags = {};
|
||||
})
|
||||
end
|
||||
|
||||
return {
|
||||
cast = cast_pet;
|
||||
new = new_pet;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user