[Ada] Adding Ada client samples (#6634)

* Add Ada client petstore samples
- Add script to generate Ada client support with swagger-codegen
- Add files to build the Ada sample
- Add main program to use the generated client samples API
  and connect to the server to perform some operations

* Add some description for the samples

* Update the documentation to explain how to build, how to use the generated Ada client code
This commit is contained in:
Stephane Carrez 2017-10-08 06:16:23 +02:00 committed by wing328
parent 7a7dd6d4cd
commit cdc83ffd16
13 changed files with 1564 additions and 0 deletions

35
bin/ada-petstore.sh Executable file
View File

@ -0,0 +1,35 @@
#!/usr/bin/env bash
SCRIPT="$0"
while [ -h "$SCRIPT" ] ; do
ls=`ls -ld "$SCRIPT"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
SCRIPT="$link"
else
SCRIPT=`dirname "$SCRIPT"`/"$link"
fi
done
if [ ! -d "${APP_DIR}" ]; then
APP_DIR=`dirname "$SCRIPT"`/..
APP_DIR=`cd "${APP_DIR}"; pwd`
fi
executable="./modules/swagger-codegen-cli/target/swagger-codegen-cli.jar"
if [ ! -f "$executable" ]
then
mvn clean package
fi
# if you've executed sbt assembly previously it will use that instead.
export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties"
model="modules/swagger-codegen/src/test/resources/2_0/petstore.yaml"
ags="$@ generate --template-dir modules/swagger-codegen/src/main/resources/Ada -l ada"
ags="$ags -i $model -t modules/swagger-codegen/src/main/resources/Ada -o samples/client/petstore/ada"
ags="$ags -DprojectName=Petstore --model-package Samples.Petstore"
java $JAVA_OPTS -jar $executable $ags
rm -rf samples/client/petstore/ada/src/server

View File

@ -0,0 +1,23 @@
# Swagger Codegen Ignore
# Generated by swagger-codegen https://github.com/swagger-api/swagger-codegen
# Use this file to prevent files from being overwritten by the generator.
# The patterns follow closely to .gitignore or .dockerignore.
# As an example, the C# client generator defines ApiClient.cs.
# You can make changes and tell Swagger Codgen to ignore just this file by uncommenting the following line:
#ApiClient.cs
# You can match any string of characters against a directory, file or extension with a single asterisk (*):
#foo/*/qux
# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux
# You can recursively match patterns against a directory, file or extension with a double asterisk (**):
#foo/**/qux
# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux
# You can also negate patterns with an exclamation (!).
# For example, you can ignore all files in a docs folder with the file extension .md:
#docs/*.md
# Then explicitly reverse the ignore rule for a single file:
#!docs/README.md

View File

@ -0,0 +1 @@
2.3.0-SNAPSHOT

View File

@ -0,0 +1,95 @@
# Swagger Petstore Ada Client
## Overview
This Ada client uses the Petstore API to demonstrate how to use the generator
and use the generated Ada code. The following files are generated by
[Swagger Codegen](https://github.com/swagger-api/swagger-codegen):
* src/client/samples-petstore-models.ads
* src/client/samples-petstore-models.adb
* src/client/samples-petstore-clients.ads
* src/client/samples-petstore-clients.adb
The 'Models' package contains the definition of types used by the request or response
in the API operations. It also provides operations to serialize and deserialize these
objects in JSON, XML or form-based data streams.
The 'Clients' package contains the definition of operations provided by the Petstore API.
## Requirements.
To build this sample, you must have installed the GNAT Ada compiler as well the following libraries:
* Ada Util (https://github.com/stcarrez/ada-util)
* Swagger Ada (https://github.com/stcarrez/swagger-ada)
* AWS (http://libre.adacore.com/libre/tools/aws/)
## Building the petstore client
Build the petstore client by using the following command:
```sh
gprbuild -Ppetstore -p
```
## Using the Swagger Ada code
### Initialization
The HTTP/REST support is provided by [Ada Util](https://github.com/stcarrez/ada-util)
and encapsulated by [Swagger Ada](https://github.com/stcarrez/swagger-ada). If you want
to use Curl, you should initialize with the following:
```
Util.Http.Clients.Curl.Register;
```
But if you want to use [AWS](http://libre.adacore.com/libre/tools/aws/), you will initialize with:
```
Util.Http.Clients.Web.Register;
```
After the initialization is done, you will declare a client instance to access
the API operations:
```
C : Samples.Petstore.Clients.Client_Type;
```
The 'Client_Type' is the generated type that will implement the operations
described in the OpenAPI description file.
And you should initialize the server base URI you want to connect to:
```
C.Set_Server ("http://petstore.swagger.io/v2");
```
At this stage, you can use the generated operation.
### Calling an operation
Let's retrieve some pet information by calling the 'Get_Pet_By_Id' operation.
This operation needs an integer as input parameter and returns a 'Pet_Type'
object that contains all the pet information. You will first declare
the pet instance as follows:
```
Pet : Samples.Petstore.Models.Pet_Type;
```
And then call the 'Get_Pet_By_Id' operation:
```
C.Get_Pet_By_Id (768, Pet);
```
At this stage, you can access information from the 'Pet' instance:
```
Ada.Text_IO.Put_Line ("Id : " & Swagger.Long'Image (Pet.Id));
Ada.Text_IO.Put_Line ("Name : " & Swagger.To_String (Pet.Name));
Ada.Text_IO.Put_Line ("Status : " & Swagger.To_String (Pet.Status));
```

View File

@ -0,0 +1,88 @@
abstract project Config is
for Source_Dirs use ();
type Yes_No is ("yes", "no");
type Library_Type_Type is ("relocatable", "static");
type Mode_Type is ("distrib", "debug", "optimize", "profile");
Mode : Mode_Type := external ("MODE", "debug");
Coverage : Yes_No := External ("COVERAGE", "no");
Processors := External ("PROCESSORS", "1");
package Builder is
case Mode is
when "debug" =>
for Default_Switches ("Ada") use ("-g", "-j" & Processors);
when others =>
for Default_Switches ("Ada") use ("-g", "-O2", "-j" & Processors);
end case;
end Builder;
package compiler is
warnings := ("-gnatwua");
defaults := ("-gnat2012");
case Mode is
when "distrib" =>
for Default_Switches ("Ada") use defaults & ("-gnatafno", "-gnatVa", "-gnatwa");
when "debug" =>
for Default_Switches ("Ada") use defaults & warnings
& ("-gnata", "-gnatVaMI", "-gnaty3abcefhiklmnprstxM99");
when "optimize" =>
for Default_Switches ("Ada") use defaults & warnings
& ("-gnatn", "-gnatp", "-fdata-sections", "-ffunction-sections");
when "profile" =>
for Default_Switches ("Ada") use defaults & warnings & ("-pg");
end case;
case Coverage is
when "yes" =>
for Default_Switches ("ada") use Compiler'Default_Switches ("Ada") &
("-fprofile-arcs", "-ftest-coverage");
when others =>
end case;
end compiler;
package binder is
case Mode is
when "debug" =>
for Default_Switches ("Ada") use ("-E");
when others =>
for Default_Switches ("Ada") use ("-E");
end case;
end binder;
package linker is
case Mode is
when "profile" =>
for Default_Switches ("Ada") use ("-pg");
when "distrib" =>
for Default_Switches ("Ada") use ("-s");
when "optimize" =>
for Default_Switches ("Ada") use ("-Wl,--gc-sections");
when others =>
null;
end case;
case Coverage is
when "yes" =>
for Default_Switches ("ada") use Linker'Default_Switches ("ada") &
("-fprofile-arcs");
when others =>
end case;
end linker;
package Ide is
for VCS_Kind use "git";
end Ide;
end Config;

View File

@ -0,0 +1,18 @@
with "config";
with "util";
with "util_http";
with "swagger";
project Petstore is
Mains := ("petstore.adb");
for Main use Mains;
for Source_Dirs use ("src", "src/client");
for Object_Dir use "./obj";
for Exec_Dir use "./bin";
package Binder renames Config.Binder;
package Builder renames Config.Builder;
package Compiler renames Config.Compiler;
package Linker renames Config.Linker;
end Petstore;

View File

@ -0,0 +1,355 @@
-- 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
--
-- NOTE: This package is auto generated by the swagger code generator 2.3.0-SNAPSHOT.
-- https://github.com/swagger-api/swagger-codegen.git
-- Do not edit the class manually.
with Swagger.Streams;
package body Samples.Petstore.Clients is
-- Add a new pet to the store
procedure Add_Pet
(Client : in out Client_Type;
P_Body : in Samples.Petstore.Models.Pet_Type) is
URI : Swagger.Clients.URI_Type;
Req : Swagger.Clients.Request_Type;
begin
Client.Set_Accept ((Swagger.Clients.APPLICATION_XML,
Swagger.Clients.APPLICATION_JSON));
Client.Initialize (Req, (Swagger.Clients.APPLICATION_JSON,
Swagger.Clients.APPLICATION_XML));
Samples.Petstore.Models.Serialize (Req.Stream, "body", P_Body);
URI.Set_Path ("/pet");
Client.Call (Swagger.Clients.POST, URI, Req);
end Add_Pet;
-- Deletes a pet
procedure Delete_Pet
(Client : in out Client_Type;
Pet_Id : in Swagger.Long;
Api_Key : in Swagger.UString) is
URI : Swagger.Clients.URI_Type;
begin
Client.Set_Accept ((Swagger.Clients.APPLICATION_XML,
Swagger.Clients.APPLICATION_JSON));
URI.Set_Path ("/pet/{petId}");
URI.Set_Path_Param ("petId", Swagger.To_String (Pet_Id));
Client.Call (Swagger.Clients.DELETE, URI);
end Delete_Pet;
-- Finds Pets by status
-- Multiple status values can be provided with comma separated strings
procedure Find_Pets_By_Status
(Client : in out Client_Type;
Status : in Swagger.UString_Vectors.Vector;
Result : out Samples.Petstore.Models.Pet_Type_Vectors.Vector) is
URI : Swagger.Clients.URI_Type;
Reply : Swagger.Value_Type;
begin
Client.Set_Accept ((Swagger.Clients.APPLICATION_XML,
Swagger.Clients.APPLICATION_JSON));
URI.Add_Param ("status", Status);
URI.Set_Path ("/pet/findByStatus");
Client.Call (Swagger.Clients.GET, URI, Reply);
Samples.Petstore.Models.Deserialize (Reply, "", Result);
end Find_Pets_By_Status;
-- Finds Pets by tags
-- Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.
procedure Find_Pets_By_Tags
(Client : in out Client_Type;
Tags : in Swagger.UString_Vectors.Vector;
Result : out Samples.Petstore.Models.Pet_Type_Vectors.Vector) is
URI : Swagger.Clients.URI_Type;
Reply : Swagger.Value_Type;
begin
Client.Set_Accept ((Swagger.Clients.APPLICATION_XML,
Swagger.Clients.APPLICATION_JSON));
URI.Add_Param ("tags", Tags);
URI.Set_Path ("/pet/findByTags");
Client.Call (Swagger.Clients.GET, URI, Reply);
Samples.Petstore.Models.Deserialize (Reply, "", Result);
end Find_Pets_By_Tags;
-- Find pet by ID
-- Returns a single pet
procedure Get_Pet_By_Id
(Client : in out Client_Type;
Pet_Id : in Swagger.Long;
Result : out Samples.Petstore.Models.Pet_Type) is
URI : Swagger.Clients.URI_Type;
Reply : Swagger.Value_Type;
begin
Client.Set_Accept ((Swagger.Clients.APPLICATION_XML,
Swagger.Clients.APPLICATION_JSON));
URI.Set_Path ("/pet/{petId}");
URI.Set_Path_Param ("petId", Swagger.To_String (Pet_Id));
Client.Call (Swagger.Clients.GET, URI, Reply);
Samples.Petstore.Models.Deserialize (Reply, "", Result);
end Get_Pet_By_Id;
-- Update an existing pet
procedure Update_Pet
(Client : in out Client_Type;
P_Body : in Samples.Petstore.Models.Pet_Type) is
URI : Swagger.Clients.URI_Type;
Req : Swagger.Clients.Request_Type;
begin
Client.Set_Accept ((Swagger.Clients.APPLICATION_XML,
Swagger.Clients.APPLICATION_JSON));
Client.Initialize (Req, (Swagger.Clients.APPLICATION_JSON,
Swagger.Clients.APPLICATION_XML));
Samples.Petstore.Models.Serialize (Req.Stream, "body", P_Body);
URI.Set_Path ("/pet");
Client.Call (Swagger.Clients.PUT, URI, Req);
end Update_Pet;
-- Updates a pet in the store with form data
procedure Update_Pet_With_Form
(Client : in out Client_Type;
Pet_Id : in Swagger.Long;
Name : in Swagger.UString;
Status : in Swagger.UString) is
URI : Swagger.Clients.URI_Type;
Req : Swagger.Clients.Request_Type;
begin
Client.Set_Accept ((Swagger.Clients.APPLICATION_XML,
Swagger.Clients.APPLICATION_JSON));
Client.Initialize (Req, (1 => Swagger.Clients.APPLICATION_FORM));
Req.Stream.Write_Entity ("name", Name);
Req.Stream.Write_Entity ("status", Status);
URI.Set_Path ("/pet/{petId}");
URI.Set_Path_Param ("petId", Swagger.To_String (Pet_Id));
Client.Call (Swagger.Clients.POST, URI);
end Update_Pet_With_Form;
-- uploads an image
procedure Upload_File
(Client : in out Client_Type;
Pet_Id : in Swagger.Long;
Additional_Metadata : in Swagger.UString;
File : in Swagger.Http_Content_Type;
Result : out Samples.Petstore.Models.ApiResponse_Type) is
URI : Swagger.Clients.URI_Type;
Req : Swagger.Clients.Request_Type;
Reply : Swagger.Value_Type;
begin
Client.Set_Accept ((1 => Swagger.Clients.APPLICATION_JSON));
Client.Initialize (Req, (1 => Swagger.Clients.APPLICATION_FORM));
Req.Stream.Write_Entity ("additionalMetadata", Additional_Metadata);
Req.Stream.Write_Entity ("file", File);
URI.Set_Path ("/pet/{petId}/uploadImage");
URI.Set_Path_Param ("petId", Swagger.To_String (Pet_Id));
Client.Call (Swagger.Clients.POST, URI, Reply);
Samples.Petstore.Models.Deserialize (Reply, "", Result);
end Upload_File;
-- Delete purchase order by ID
-- For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors
procedure Delete_Order
(Client : in out Client_Type;
Order_Id : in Swagger.UString) is
URI : Swagger.Clients.URI_Type;
begin
Client.Set_Accept ((Swagger.Clients.APPLICATION_XML,
Swagger.Clients.APPLICATION_JSON));
URI.Set_Path ("/store/order/{orderId}");
URI.Set_Path_Param ("orderId", Order_Id);
Client.Call (Swagger.Clients.DELETE, URI);
end Delete_Order;
-- Returns pet inventories by status
-- Returns a map of status codes to quantities
procedure Get_Inventory
(Client : in out Client_Type;
Result : out Swagger.Integer_Map) is
URI : Swagger.Clients.URI_Type;
Reply : Swagger.Value_Type;
begin
Client.Set_Accept ((1 => Swagger.Clients.APPLICATION_JSON));
URI.Set_Path ("/store/inventory");
Client.Call (Swagger.Clients.GET, URI, Reply);
Swagger.Streams.Deserialize (Reply, "", Result);
end Get_Inventory;
-- Find purchase order by ID
-- For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions
procedure Get_Order_By_Id
(Client : in out Client_Type;
Order_Id : in Swagger.Long;
Result : out Samples.Petstore.Models.Order_Type) is
URI : Swagger.Clients.URI_Type;
Reply : Swagger.Value_Type;
begin
Client.Set_Accept ((Swagger.Clients.APPLICATION_XML,
Swagger.Clients.APPLICATION_JSON));
URI.Set_Path ("/store/order/{orderId}");
URI.Set_Path_Param ("orderId", Swagger.To_String (Order_Id));
Client.Call (Swagger.Clients.GET, URI, Reply);
Samples.Petstore.Models.Deserialize (Reply, "", Result);
end Get_Order_By_Id;
-- Place an order for a pet
procedure Place_Order
(Client : in out Client_Type;
P_Body : in Samples.Petstore.Models.Order_Type;
Result : out Samples.Petstore.Models.Order_Type) is
URI : Swagger.Clients.URI_Type;
Req : Swagger.Clients.Request_Type;
Reply : Swagger.Value_Type;
begin
Client.Set_Accept ((Swagger.Clients.APPLICATION_XML,
Swagger.Clients.APPLICATION_JSON));
Client.Initialize (Req, (1 => Swagger.Clients.APPLICATION_JSON));
Samples.Petstore.Models.Serialize (Req.Stream, "body", P_Body);
URI.Set_Path ("/store/order");
Client.Call (Swagger.Clients.POST, URI, Req, Reply);
Samples.Petstore.Models.Deserialize (Reply, "", Result);
end Place_Order;
-- Create user
-- This can only be done by the logged in user.
procedure Create_User
(Client : in out Client_Type;
P_Body : in Samples.Petstore.Models.User_Type) is
URI : Swagger.Clients.URI_Type;
Req : Swagger.Clients.Request_Type;
begin
Client.Set_Accept ((Swagger.Clients.APPLICATION_XML,
Swagger.Clients.APPLICATION_JSON));
Client.Initialize (Req, (1 => Swagger.Clients.APPLICATION_JSON));
Samples.Petstore.Models.Serialize (Req.Stream, "body", P_Body);
URI.Set_Path ("/user");
Client.Call (Swagger.Clients.POST, URI, Req);
end Create_User;
-- Creates list of users with given input array
procedure Create_Users_With_Array_Input
(Client : in out Client_Type;
P_Body : in Samples.Petstore.Models.User_Type_Vectors.Vector) is
URI : Swagger.Clients.URI_Type;
Req : Swagger.Clients.Request_Type;
begin
Client.Set_Accept ((Swagger.Clients.APPLICATION_XML,
Swagger.Clients.APPLICATION_JSON));
Client.Initialize (Req, (1 => Swagger.Clients.APPLICATION_JSON));
Samples.Petstore.Models.Serialize (Req.Stream, "body", P_Body);
URI.Set_Path ("/user/createWithArray");
Client.Call (Swagger.Clients.POST, URI, Req);
end Create_Users_With_Array_Input;
-- Creates list of users with given input array
procedure Create_Users_With_List_Input
(Client : in out Client_Type;
P_Body : in Samples.Petstore.Models.User_Type_Vectors.Vector) is
URI : Swagger.Clients.URI_Type;
Req : Swagger.Clients.Request_Type;
begin
Client.Set_Accept ((Swagger.Clients.APPLICATION_XML,
Swagger.Clients.APPLICATION_JSON));
Client.Initialize (Req, (1 => Swagger.Clients.APPLICATION_JSON));
Samples.Petstore.Models.Serialize (Req.Stream, "body", P_Body);
URI.Set_Path ("/user/createWithList");
Client.Call (Swagger.Clients.POST, URI, Req);
end Create_Users_With_List_Input;
-- Delete user
-- This can only be done by the logged in user.
procedure Delete_User
(Client : in out Client_Type;
Username : in Swagger.UString) is
URI : Swagger.Clients.URI_Type;
begin
Client.Set_Accept ((Swagger.Clients.APPLICATION_XML,
Swagger.Clients.APPLICATION_JSON));
URI.Set_Path ("/user/{username}");
URI.Set_Path_Param ("username", Username);
Client.Call (Swagger.Clients.DELETE, URI);
end Delete_User;
-- Get user by user name
procedure Get_User_By_Name
(Client : in out Client_Type;
Username : in Swagger.UString;
Result : out Samples.Petstore.Models.User_Type) is
URI : Swagger.Clients.URI_Type;
Reply : Swagger.Value_Type;
begin
Client.Set_Accept ((Swagger.Clients.APPLICATION_XML,
Swagger.Clients.APPLICATION_JSON));
URI.Set_Path ("/user/{username}");
URI.Set_Path_Param ("username", Username);
Client.Call (Swagger.Clients.GET, URI, Reply);
Samples.Petstore.Models.Deserialize (Reply, "", Result);
end Get_User_By_Name;
-- Logs user into the system
procedure Login_User
(Client : in out Client_Type;
Username : in Swagger.UString;
Password : in Swagger.UString;
Result : out Swagger.UString) is
URI : Swagger.Clients.URI_Type;
Reply : Swagger.Value_Type;
begin
Client.Set_Accept ((Swagger.Clients.APPLICATION_XML,
Swagger.Clients.APPLICATION_JSON));
URI.Add_Param ("username", Username);
URI.Add_Param ("password", Password);
URI.Set_Path ("/user/login");
Client.Call (Swagger.Clients.GET, URI, Reply);
Swagger.Streams.Deserialize (Reply, "", Result);
end Login_User;
-- Logs out current logged in user session
procedure Logout_User
(Client : in out Client_Type) is
URI : Swagger.Clients.URI_Type;
begin
Client.Set_Accept ((Swagger.Clients.APPLICATION_XML,
Swagger.Clients.APPLICATION_JSON));
URI.Set_Path ("/user/logout");
Client.Call (Swagger.Clients.GET, URI);
end Logout_User;
-- Updated user
-- This can only be done by the logged in user.
procedure Update_User
(Client : in out Client_Type;
Username : in Swagger.UString;
P_Body : in Samples.Petstore.Models.User_Type) is
URI : Swagger.Clients.URI_Type;
Req : Swagger.Clients.Request_Type;
begin
Client.Set_Accept ((Swagger.Clients.APPLICATION_XML,
Swagger.Clients.APPLICATION_JSON));
Client.Initialize (Req, (1 => Swagger.Clients.APPLICATION_JSON));
Samples.Petstore.Models.Serialize (Req.Stream, "body", P_Body);
URI.Set_Path ("/user/{username}");
URI.Set_Path_Param ("username", Username);
Client.Call (Swagger.Clients.PUT, URI, Req);
end Update_User;
end Samples.Petstore.Clients;

View File

@ -0,0 +1,139 @@
-- 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
--
-- NOTE: This package is auto generated by the swagger code generator 2.3.0-SNAPSHOT.
-- https://github.com/swagger-api/swagger-codegen.git
-- Do not edit the class manually.
with Samples.Petstore.Models;
with Swagger.Clients;
package Samples.Petstore.Clients is
type Client_Type is new Swagger.Clients.Client_Type with null record;
-- Add a new pet to the store
procedure Add_Pet
(Client : in out Client_Type;
P_Body : in Samples.Petstore.Models.Pet_Type);
-- Deletes a pet
procedure Delete_Pet
(Client : in out Client_Type;
Pet_Id : in Swagger.Long;
Api_Key : in Swagger.UString);
-- Finds Pets by status
-- Multiple status values can be provided with comma separated strings
procedure Find_Pets_By_Status
(Client : in out Client_Type;
Status : in Swagger.UString_Vectors.Vector;
Result : out Samples.Petstore.Models.Pet_Type_Vectors.Vector);
-- Finds Pets by tags
-- Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.
procedure Find_Pets_By_Tags
(Client : in out Client_Type;
Tags : in Swagger.UString_Vectors.Vector;
Result : out Samples.Petstore.Models.Pet_Type_Vectors.Vector);
-- Find pet by ID
-- Returns a single pet
procedure Get_Pet_By_Id
(Client : in out Client_Type;
Pet_Id : in Swagger.Long;
Result : out Samples.Petstore.Models.Pet_Type);
-- Update an existing pet
procedure Update_Pet
(Client : in out Client_Type;
P_Body : in Samples.Petstore.Models.Pet_Type);
-- Updates a pet in the store with form data
procedure Update_Pet_With_Form
(Client : in out Client_Type;
Pet_Id : in Swagger.Long;
Name : in Swagger.UString;
Status : in Swagger.UString);
-- uploads an image
procedure Upload_File
(Client : in out Client_Type;
Pet_Id : in Swagger.Long;
Additional_Metadata : in Swagger.UString;
File : in Swagger.Http_Content_Type;
Result : out Samples.Petstore.Models.ApiResponse_Type);
-- Delete purchase order by ID
-- For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors
procedure Delete_Order
(Client : in out Client_Type;
Order_Id : in Swagger.UString);
-- Returns pet inventories by status
-- Returns a map of status codes to quantities
procedure Get_Inventory
(Client : in out Client_Type;
Result : out Swagger.Integer_Map);
-- Find purchase order by ID
-- For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions
procedure Get_Order_By_Id
(Client : in out Client_Type;
Order_Id : in Swagger.Long;
Result : out Samples.Petstore.Models.Order_Type);
-- Place an order for a pet
procedure Place_Order
(Client : in out Client_Type;
P_Body : in Samples.Petstore.Models.Order_Type;
Result : out Samples.Petstore.Models.Order_Type);
-- Create user
-- This can only be done by the logged in user.
procedure Create_User
(Client : in out Client_Type;
P_Body : in Samples.Petstore.Models.User_Type);
-- Creates list of users with given input array
procedure Create_Users_With_Array_Input
(Client : in out Client_Type;
P_Body : in Samples.Petstore.Models.User_Type_Vectors.Vector);
-- Creates list of users with given input array
procedure Create_Users_With_List_Input
(Client : in out Client_Type;
P_Body : in Samples.Petstore.Models.User_Type_Vectors.Vector);
-- Delete user
-- This can only be done by the logged in user.
procedure Delete_User
(Client : in out Client_Type;
Username : in Swagger.UString);
-- Get user by user name
procedure Get_User_By_Name
(Client : in out Client_Type;
Username : in Swagger.UString;
Result : out Samples.Petstore.Models.User_Type);
-- Logs user into the system
procedure Login_User
(Client : in out Client_Type;
Username : in Swagger.UString;
Password : in Swagger.UString;
Result : out Swagger.UString);
-- Logs out current logged in user session
procedure Logout_User
(Client : in out Client_Type);
-- Updated user
-- This can only be done by the logged in user.
procedure Update_User
(Client : in out Client_Type;
Username : in Swagger.UString;
P_Body : in Samples.Petstore.Models.User_Type);
end Samples.Petstore.Clients;

View File

@ -0,0 +1,322 @@
-- 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
--
-- NOTE: This package is auto generated by the swagger code generator 2.3.0-SNAPSHOT.
-- https://github.com/swagger-api/swagger-codegen.git
-- Do not edit the class manually.
package body Samples.Petstore.Models is
use Swagger.Streams;
procedure Serialize (Into : in out Swagger.Streams.Output_Stream'Class;
Name : in String;
Value : in ApiResponse_Type) is
begin
Into.Start_Entity (Name);
Into.Write_Entity ("code", Value.Code);
Into.Write_Entity ("type", Value.P_Type);
Into.Write_Entity ("message", Value.Message);
Into.End_Entity (Name);
end Serialize;
procedure Serialize (Into : in out Swagger.Streams.Output_Stream'Class;
Name : in String;
Value : in ApiResponse_Type_Vectors.Vector) is
begin
Into.Start_Array (Name);
for Item of Value loop
Serialize (Into, "", Item);
end loop;
Into.End_Array (Name);
end Serialize;
procedure Deserialize (From : in Swagger.Value_Type;
Name : in String;
Value : out ApiResponse_Type) is
Object : Swagger.Value_Type;
begin
Swagger.Streams.Deserialize (From, Name, Object);
Swagger.Streams.Deserialize (Object, "code", Value.Code);
Swagger.Streams.Deserialize (Object, "type", Value.P_Type);
Swagger.Streams.Deserialize (Object, "message", Value.Message);
end Deserialize;
procedure Deserialize (From : in Swagger.Value_Type;
Name : in String;
Value : out ApiResponse_Type_Vectors.Vector) is
List : Swagger.Value_Array_Type;
Item : ApiResponse_Type;
begin
Value.Clear;
Swagger.Streams.Deserialize (From, Name, List);
for Data of List loop
Deserialize (Data, "", Item);
Value.Append (Item);
end loop;
end Deserialize;
procedure Serialize (Into : in out Swagger.Streams.Output_Stream'Class;
Name : in String;
Value : in Category_Type) is
begin
Into.Start_Entity (Name);
Serialize (Into, "id", Value.Id);
Into.Write_Entity ("name", Value.Name);
Into.End_Entity (Name);
end Serialize;
procedure Serialize (Into : in out Swagger.Streams.Output_Stream'Class;
Name : in String;
Value : in Category_Type_Vectors.Vector) is
begin
Into.Start_Array (Name);
for Item of Value loop
Serialize (Into, "", Item);
end loop;
Into.End_Array (Name);
end Serialize;
procedure Deserialize (From : in Swagger.Value_Type;
Name : in String;
Value : out Category_Type) is
Object : Swagger.Value_Type;
begin
Swagger.Streams.Deserialize (From, Name, Object);
Swagger.Streams.Deserialize (Object, "id", Value.Id);
Swagger.Streams.Deserialize (Object, "name", Value.Name);
end Deserialize;
procedure Deserialize (From : in Swagger.Value_Type;
Name : in String;
Value : out Category_Type_Vectors.Vector) is
List : Swagger.Value_Array_Type;
Item : Category_Type;
begin
Value.Clear;
Swagger.Streams.Deserialize (From, Name, List);
for Data of List loop
Deserialize (Data, "", Item);
Value.Append (Item);
end loop;
end Deserialize;
procedure Serialize (Into : in out Swagger.Streams.Output_Stream'Class;
Name : in String;
Value : in Tag_Type) is
begin
Into.Start_Entity (Name);
Serialize (Into, "id", Value.Id);
Into.Write_Entity ("name", Value.Name);
Into.End_Entity (Name);
end Serialize;
procedure Serialize (Into : in out Swagger.Streams.Output_Stream'Class;
Name : in String;
Value : in Tag_Type_Vectors.Vector) is
begin
Into.Start_Array (Name);
for Item of Value loop
Serialize (Into, "", Item);
end loop;
Into.End_Array (Name);
end Serialize;
procedure Deserialize (From : in Swagger.Value_Type;
Name : in String;
Value : out Tag_Type) is
Object : Swagger.Value_Type;
begin
Swagger.Streams.Deserialize (From, Name, Object);
Swagger.Streams.Deserialize (Object, "id", Value.Id);
Swagger.Streams.Deserialize (Object, "name", Value.Name);
end Deserialize;
procedure Deserialize (From : in Swagger.Value_Type;
Name : in String;
Value : out Tag_Type_Vectors.Vector) is
List : Swagger.Value_Array_Type;
Item : Tag_Type;
begin
Value.Clear;
Swagger.Streams.Deserialize (From, Name, List);
for Data of List loop
Deserialize (Data, "", Item);
Value.Append (Item);
end loop;
end Deserialize;
procedure Serialize (Into : in out Swagger.Streams.Output_Stream'Class;
Name : in String;
Value : in User_Type) is
begin
Into.Start_Entity (Name);
Serialize (Into, "id", Value.Id);
Into.Write_Entity ("username", Value.Username);
Into.Write_Entity ("firstName", Value.First_Name);
Into.Write_Entity ("lastName", Value.Last_Name);
Into.Write_Entity ("email", Value.Email);
Into.Write_Entity ("password", Value.Password);
Into.Write_Entity ("phone", Value.Phone);
Into.Write_Entity ("userStatus", Value.User_Status);
Into.End_Entity (Name);
end Serialize;
procedure Serialize (Into : in out Swagger.Streams.Output_Stream'Class;
Name : in String;
Value : in User_Type_Vectors.Vector) is
begin
Into.Start_Array (Name);
for Item of Value loop
Serialize (Into, "", Item);
end loop;
Into.End_Array (Name);
end Serialize;
procedure Deserialize (From : in Swagger.Value_Type;
Name : in String;
Value : out User_Type) is
Object : Swagger.Value_Type;
begin
Swagger.Streams.Deserialize (From, Name, Object);
Swagger.Streams.Deserialize (Object, "id", Value.Id);
Swagger.Streams.Deserialize (Object, "username", Value.Username);
Swagger.Streams.Deserialize (Object, "firstName", Value.First_Name);
Swagger.Streams.Deserialize (Object, "lastName", Value.Last_Name);
Swagger.Streams.Deserialize (Object, "email", Value.Email);
Swagger.Streams.Deserialize (Object, "password", Value.Password);
Swagger.Streams.Deserialize (Object, "phone", Value.Phone);
Swagger.Streams.Deserialize (Object, "userStatus", Value.User_Status);
end Deserialize;
procedure Deserialize (From : in Swagger.Value_Type;
Name : in String;
Value : out User_Type_Vectors.Vector) is
List : Swagger.Value_Array_Type;
Item : User_Type;
begin
Value.Clear;
Swagger.Streams.Deserialize (From, Name, List);
for Data of List loop
Deserialize (Data, "", Item);
Value.Append (Item);
end loop;
end Deserialize;
procedure Serialize (Into : in out Swagger.Streams.Output_Stream'Class;
Name : in String;
Value : in Order_Type) is
begin
Into.Start_Entity (Name);
Serialize (Into, "id", Value.Id);
Serialize (Into, "petId", Value.Pet_Id);
Into.Write_Entity ("quantity", Value.Quantity);
Into.Write_Entity ("shipDate", Value.Ship_Date);
Into.Write_Entity ("status", Value.Status);
Into.Write_Entity ("complete", Value.Complete);
Into.End_Entity (Name);
end Serialize;
procedure Serialize (Into : in out Swagger.Streams.Output_Stream'Class;
Name : in String;
Value : in Order_Type_Vectors.Vector) is
begin
Into.Start_Array (Name);
for Item of Value loop
Serialize (Into, "", Item);
end loop;
Into.End_Array (Name);
end Serialize;
procedure Deserialize (From : in Swagger.Value_Type;
Name : in String;
Value : out Order_Type) is
Object : Swagger.Value_Type;
begin
Swagger.Streams.Deserialize (From, Name, Object);
Swagger.Streams.Deserialize (Object, "id", Value.Id);
Swagger.Streams.Deserialize (Object, "petId", Value.Pet_Id);
Swagger.Streams.Deserialize (Object, "quantity", Value.Quantity);
Deserialize (Object, "shipDate", Value.Ship_Date);
Swagger.Streams.Deserialize (Object, "status", Value.Status);
Swagger.Streams.Deserialize (Object, "complete", Value.Complete);
end Deserialize;
procedure Deserialize (From : in Swagger.Value_Type;
Name : in String;
Value : out Order_Type_Vectors.Vector) is
List : Swagger.Value_Array_Type;
Item : Order_Type;
begin
Value.Clear;
Swagger.Streams.Deserialize (From, Name, List);
for Data of List loop
Deserialize (Data, "", Item);
Value.Append (Item);
end loop;
end Deserialize;
procedure Serialize (Into : in out Swagger.Streams.Output_Stream'Class;
Name : in String;
Value : in Pet_Type) is
begin
Into.Start_Entity (Name);
Serialize (Into, "id", Value.Id);
Serialize (Into, "category", Value.Category);
Into.Write_Entity ("name", Value.Name);
Serialize (Into, "photoUrls", Value.Photo_Urls);
Serialize (Into, "tags", Value.Tags);
Into.Write_Entity ("status", Value.Status);
Into.End_Entity (Name);
end Serialize;
procedure Serialize (Into : in out Swagger.Streams.Output_Stream'Class;
Name : in String;
Value : in Pet_Type_Vectors.Vector) is
begin
Into.Start_Array (Name);
for Item of Value loop
Serialize (Into, "", Item);
end loop;
Into.End_Array (Name);
end Serialize;
procedure Deserialize (From : in Swagger.Value_Type;
Name : in String;
Value : out Pet_Type) is
Object : Swagger.Value_Type;
begin
Swagger.Streams.Deserialize (From, Name, Object);
Swagger.Streams.Deserialize (Object, "id", Value.Id);
Deserialize (Object, "category", Value.Category);
Swagger.Streams.Deserialize (Object, "name", Value.Name);
Swagger.Streams.Deserialize (Object, "photoUrls", Value.Photo_Urls);
Deserialize (Object, "tags", Value.Tags);
Swagger.Streams.Deserialize (Object, "status", Value.Status);
end Deserialize;
procedure Deserialize (From : in Swagger.Value_Type;
Name : in String;
Value : out Pet_Type_Vectors.Vector) is
List : Swagger.Value_Array_Type;
Item : Pet_Type;
begin
Value.Clear;
Swagger.Streams.Deserialize (From, Name, List);
for Data of List loop
Deserialize (Data, "", Item);
Value.Append (Item);
end loop;
end Deserialize;
end Samples.Petstore.Models;

View File

@ -0,0 +1,216 @@
-- 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
--
-- NOTE: This package is auto generated by the swagger code generator 2.3.0-SNAPSHOT.
-- https://github.com/swagger-api/swagger-codegen.git
-- Do not edit the class manually.
with Swagger.Streams;
with Ada.Containers.Vectors;
package Samples.Petstore.Models is
-- ------------------------------
-- An uploaded response
-- Describes the result of uploading an image resource
-- ------------------------------
type ApiResponse_Type is
record
Code : Integer;
P_Type : Swagger.UString;
Message : Swagger.UString;
end record;
package ApiResponse_Type_Vectors is
new Ada.Containers.Vectors (Index_Type => Positive,
Element_Type => ApiResponse_Type);
procedure Serialize (Into : in out Swagger.Streams.Output_Stream'Class;
Name : in String;
Value : in ApiResponse_Type);
procedure Serialize (Into : in out Swagger.Streams.Output_Stream'Class;
Name : in String;
Value : in ApiResponse_Type_Vectors.Vector);
procedure Deserialize (From : in Swagger.Value_Type;
Name : in String;
Value : out ApiResponse_Type);
procedure Deserialize (From : in Swagger.Value_Type;
Name : in String;
Value : out ApiResponse_Type_Vectors.Vector);
-- ------------------------------
-- Pet catehgry
-- A category for a pet
-- ------------------------------
type Category_Type is
record
Id : Swagger.Long;
Name : Swagger.UString;
end record;
package Category_Type_Vectors is
new Ada.Containers.Vectors (Index_Type => Positive,
Element_Type => Category_Type);
procedure Serialize (Into : in out Swagger.Streams.Output_Stream'Class;
Name : in String;
Value : in Category_Type);
procedure Serialize (Into : in out Swagger.Streams.Output_Stream'Class;
Name : in String;
Value : in Category_Type_Vectors.Vector);
procedure Deserialize (From : in Swagger.Value_Type;
Name : in String;
Value : out Category_Type);
procedure Deserialize (From : in Swagger.Value_Type;
Name : in String;
Value : out Category_Type_Vectors.Vector);
-- ------------------------------
-- Pet Tag
-- A tag for a pet
-- ------------------------------
type Tag_Type is
record
Id : Swagger.Long;
Name : Swagger.UString;
end record;
package Tag_Type_Vectors is
new Ada.Containers.Vectors (Index_Type => Positive,
Element_Type => Tag_Type);
procedure Serialize (Into : in out Swagger.Streams.Output_Stream'Class;
Name : in String;
Value : in Tag_Type);
procedure Serialize (Into : in out Swagger.Streams.Output_Stream'Class;
Name : in String;
Value : in Tag_Type_Vectors.Vector);
procedure Deserialize (From : in Swagger.Value_Type;
Name : in String;
Value : out Tag_Type);
procedure Deserialize (From : in Swagger.Value_Type;
Name : in String;
Value : out Tag_Type_Vectors.Vector);
-- ------------------------------
-- a User
-- A User who is purchasing from the pet store
-- ------------------------------
type User_Type is
record
Id : Swagger.Long;
Username : Swagger.UString;
First_Name : Swagger.UString;
Last_Name : Swagger.UString;
Email : Swagger.UString;
Password : Swagger.UString;
Phone : Swagger.UString;
User_Status : Integer;
end record;
package User_Type_Vectors is
new Ada.Containers.Vectors (Index_Type => Positive,
Element_Type => User_Type);
procedure Serialize (Into : in out Swagger.Streams.Output_Stream'Class;
Name : in String;
Value : in User_Type);
procedure Serialize (Into : in out Swagger.Streams.Output_Stream'Class;
Name : in String;
Value : in User_Type_Vectors.Vector);
procedure Deserialize (From : in Swagger.Value_Type;
Name : in String;
Value : out User_Type);
procedure Deserialize (From : in Swagger.Value_Type;
Name : in String;
Value : out User_Type_Vectors.Vector);
-- ------------------------------
-- Pet Order
-- An order for a pets from the pet store
-- ------------------------------
type Order_Type is
record
Id : Swagger.Long;
Pet_Id : Swagger.Long;
Quantity : Integer;
Ship_Date : Swagger.Datetime;
Status : Swagger.UString;
Complete : Boolean;
end record;
package Order_Type_Vectors is
new Ada.Containers.Vectors (Index_Type => Positive,
Element_Type => Order_Type);
procedure Serialize (Into : in out Swagger.Streams.Output_Stream'Class;
Name : in String;
Value : in Order_Type);
procedure Serialize (Into : in out Swagger.Streams.Output_Stream'Class;
Name : in String;
Value : in Order_Type_Vectors.Vector);
procedure Deserialize (From : in Swagger.Value_Type;
Name : in String;
Value : out Order_Type);
procedure Deserialize (From : in Swagger.Value_Type;
Name : in String;
Value : out Order_Type_Vectors.Vector);
-- ------------------------------
-- a Pet
-- A pet for sale in the pet store
-- ------------------------------
type Pet_Type is
record
Id : Swagger.Long;
Category : Samples.Petstore.Models.Category_Type;
Name : Swagger.UString;
Photo_Urls : Swagger.UString_Vectors.Vector;
Tags : Samples.Petstore.Models.Tag_Type_Vectors.Vector;
Status : Swagger.UString;
end record;
package Pet_Type_Vectors is
new Ada.Containers.Vectors (Index_Type => Positive,
Element_Type => Pet_Type);
procedure Serialize (Into : in out Swagger.Streams.Output_Stream'Class;
Name : in String;
Value : in Pet_Type);
procedure Serialize (Into : in out Swagger.Streams.Output_Stream'Class;
Name : in String;
Value : in Pet_Type_Vectors.Vector);
procedure Deserialize (From : in Swagger.Value_Type;
Name : in String;
Value : out Pet_Type);
procedure Deserialize (From : in Swagger.Value_Type;
Name : in String;
Value : out Pet_Type_Vectors.Vector);
end Samples.Petstore.Models;

View File

@ -0,0 +1,268 @@
with Samples.Petstore.Clients;
with Samples.Petstore.Models;
with Swagger;
with Util.Http.Clients.Curl;
with Ada.Text_IO;
with Ada.Command_Line;
with Ada.Calendar.Formatting;
with Ada.Exceptions;
procedure Test is
use Ada.Text_IO;
procedure Usage;
procedure Print_Pet (Pet : in Samples.Petstore.Models.Pet_Type);
procedure Print_Order (Order : in Samples.Petstore.Models.Order_Type);
procedure Get_User (C : in out Samples.Petstore.Clients.Client_Type);
procedure Get_Pet (C : in out Samples.Petstore.Clients.Client_Type);
procedure Get_Order (C : in out Samples.Petstore.Clients.Client_Type);
procedure List_Inventory (C : in out Samples.Petstore.Clients.Client_Type);
procedure List_Pet (C : in out Samples.Petstore.Clients.Client_Type);
procedure Delete_Pet (C : in out Samples.Petstore.Clients.Client_Type);
procedure Delete_User (C : in out Samples.Petstore.Clients.Client_Type);
procedure Delete_Order (C : in out Samples.Petstore.Clients.Client_Type);
procedure Add_Pet (C : in out Samples.Petstore.Clients.Client_Type);
procedure Login (C : in out Samples.Petstore.Clients.Client_Type;
Username : in String;
Password : in String);
Server : constant Swagger.UString := Swagger.To_UString ("http://petstore.swagger.io/v2");
Arg_Count : constant Natural := Ada.Command_Line.Argument_Count;
Arg : Positive := 1;
procedure Usage is
begin
Put_Line ("Usage: petstore {list|add|rm|update} {user|order|pet} {params}...");
Put_Line (" get pet <id>... Print pet given its id");
Put_Line (" get user <name>... Print user given its name");
Put_Line (" get order <id>... Print order given its id");
Put_Line (" list pet <status>... List the pets with the given status");
Put_Line (" list inventory List the inventory");
Put_Line (" add pet <id> <name> <status> <category-id> <category-name");
Put_Line (" Add a pet");
Put_Line (" rm user <name>... Remove user with given name");
Put_Line (" rm order <id>... Remove order with given id");
Put_Line (" login <username> <password> Use login operation to get a session");
end Usage;
procedure Print_Pet (Pet : in Samples.Petstore.Models.Pet_Type) is
Need_Indent : Boolean := False;
begin
Put_Line ("Id : " & Swagger.Long'Image (Pet.Id));
Put_Line ("Name : " & Swagger.To_String (Pet.Name));
Put_Line ("Status : " & Swagger.To_String (Pet.Status));
if not Pet.Tags.Is_Empty then
Put ("Tags : ");
for Tag of Pet.Tags loop
Put_Line ((if Need_Indent then " " else "")
& Swagger.To_String (Tag.Name));
Need_Indent := True;
end loop;
end if;
if not Pet.Photo_Urls.Is_Empty then
Need_Indent := False;
Put ("URLs : ");
for Url of Pet.Photo_Urls loop
Put_Line ((if Need_Indent then " " else "") & Url);
Need_Indent := True;
end loop;
end if;
end Print_Pet;
procedure Print_Order (Order : in Samples.Petstore.Models.Order_Type) is
begin
Put_Line ("Id : " & Swagger.Long'Image (Order.Id));
Put_Line ("Pet id : " & Swagger.Long'Image (Order.Pet_Id));
Put_Line ("Quantity : " & Integer'Image (Order.Quantity));
Put_Line ("Status : " & Swagger.To_String (Order.Status));
Put_Line ("Ship date : " & Ada.Calendar.Formatting.Image (Order.Ship_Date));
Put_Line ("Complete : " & Boolean'Image (Order.Complete));
end Print_Order;
procedure Get_User (C : in out Samples.Petstore.Clients.Client_Type) is
User : Samples.Petstore.Models.User_Type;
begin
for I in Arg .. Arg_Count loop
C.Get_User_By_Name (Swagger.To_UString (Ada.Command_Line.Argument (I)), User);
Put_Line ("Id : " & Swagger.Long'Image (User.Id));
Put_Line ("Username : " & Swagger.To_String (User.Username));
Put_Line ("Firstname: " & Swagger.To_String (User.First_Name));
Put_Line ("Lastname : " & Swagger.To_String (User.Last_Name));
Put_Line ("Email : " & Swagger.To_String (User.Email));
Put_Line ("Password : " & Swagger.To_String (User.Password));
Put_Line ("Phone : " & Swagger.To_String (User.Phone));
end loop;
end Get_User;
procedure Get_Pet (C : in out Samples.Petstore.Clients.Client_Type) is
Pet : Samples.Petstore.Models.Pet_Type;
begin
C.Set_Server (Server);
for I in Arg .. Arg_Count loop
declare
P : constant String := Ada.Command_Line.Argument (I);
begin
C.Get_Pet_By_Id (Swagger.Long'Value (P), Pet);
Print_Pet (Pet);
end;
end loop;
end Get_Pet;
procedure Get_Order (C : in out Samples.Petstore.Clients.Client_Type) is
Order : Samples.Petstore.Models.Order_Type;
begin
C.Set_Server (Server);
for I in Arg .. Arg_Count loop
declare
P : constant String := Ada.Command_Line.Argument (I);
begin
C.Get_Order_By_Id (Swagger.Long'Value (P), Order);
Print_Order (Order);
end;
end loop;
end Get_Order;
procedure List_Pet (C : in out Samples.Petstore.Clients.Client_Type) is
Pets : Samples.Petstore.Models.Pet_Type_Vectors.Vector;
begin
for I in Arg .. Arg_Count loop
declare
Status : Swagger.UString_Vectors.Vector;
P : constant String := Ada.Command_Line.Argument (I);
begin
Status.Append (P);
C.Find_Pets_By_Status (Status, Pets);
for Pet of Pets loop
Print_Pet (Pet);
end loop;
end;
end loop;
end List_Pet;
procedure List_Inventory (C : in out Samples.Petstore.Clients.Client_Type) is
List : Swagger.Integer_Map;
Iter : Swagger.Integer_Maps.Cursor;
begin
C.Get_Inventory (List);
Ada.Text_IO.Put_Line ("Inventory size " & Natural'Image (Natural (List.Length)));
Iter := List.First;
while Swagger.Integer_Maps.Has_Element (Iter) loop
Put (Swagger.Integer_Maps.Key (Iter));
Set_Col (70);
Put_Line (Natural'Image (Swagger.Integer_Maps.Element (Iter)));
Swagger.Integer_Maps.Next (Iter);
end loop;
end List_Inventory;
procedure Login (C : in out Samples.Petstore.Clients.Client_Type;
Username : in String;
Password : in String) is
Session : Swagger.UString;
begin
C.Login_User (Swagger.To_UString (Username),
Swagger.To_UString (Password),
Session);
Put_Line ("New session : " & Swagger.To_String (Session));
end Login;
procedure Add_Pet (C : in out Samples.Petstore.Clients.Client_Type) is
Pet : Samples.Petstore.Models.Pet_Type;
begin
if Arg_Count /= 7 then
Put_Line ("Missing some arguments for add pet command");
Usage;
return;
end if;
Pet.Id := Swagger.Long'Value (Ada.Command_Line.Argument (Arg));
Pet.Name := Swagger.To_UString (Ada.Command_Line.Argument (Arg + 1));
Pet.Status := Swagger.To_UString (Ada.Command_Line.Argument (Arg + 2));
Pet.Category.Id := Swagger.Long'Value (Ada.Command_Line.Argument (Arg + 3));
Pet.Category.Name := Swagger.To_UString (Ada.Command_Line.Argument (Arg + 4));
C.Add_Pet (Pet);
end Add_Pet;
procedure Delete_User (C : in out Samples.Petstore.Clients.Client_Type) is
begin
for I in Arg .. Arg_Count loop
C.Delete_User (Username => Swagger.To_UString (Ada.Command_Line.Argument (I)));
end loop;
end Delete_User;
procedure Delete_Order (C : in out Samples.Petstore.Clients.Client_Type) is
begin
for I in Arg .. Arg_Count loop
C.Delete_Order (Swagger.To_UString (Ada.Command_Line.Argument (I)));
end loop;
end Delete_Order;
procedure Delete_Pet (C : in out Samples.Petstore.Clients.Client_Type) is
Key : constant Swagger.UString := Swagger.To_UString (Ada.Command_Line.Argument (Arg));
begin
Arg := Arg + 1;
for I in Arg .. Arg_Count loop
C.Delete_Pet (Swagger.Long'Value (Ada.Command_Line.Argument (I)), Key);
end loop;
end Delete_Pet;
begin
if Arg_Count <= 1 then
Usage;
return;
end if;
Util.Http.Clients.Curl.Register;
declare
Command : constant String := Ada.Command_Line.Argument (Arg);
Item : constant String := Ada.Command_Line.Argument (Arg + 1);
C : Samples.Petstore.Clients.Client_Type;
begin
C.Set_Server (Server);
Arg := Arg + 2;
if Command = "login" then
Login (C, Item, Ada.Command_Line.Argument (Arg));
elsif Command = "get" then
if Item = "user" then
Get_User (C);
elsif Item = "pet" then
Get_Pet (C);
elsif Item = "order" then
Get_Order (C);
else
Usage;
end if;
elsif Command = "list" then
if Item = "pet" then
List_Pet (C);
elsif Item = "inventory" then
List_Inventory (C);
else
Usage;
end if;
elsif Command = "add" then
if Item = "pet" then
Add_Pet (C);
else
Usage;
end if;
elsif Command = "rm" then
if Item = "user" then
Delete_User (C);
elsif Item = "order" then
Delete_Order (C);
elsif Item = "pet" then
Delete_Pet (C);
else
Usage;
end if;
elsif Command = "update" then
Usage;
else
Usage;
end if;
exception
when E : Constraint_Error =>
Put_Line ("Constraint error raised: " & Ada.Exceptions.Exception_Message (E));
end;
end Test;

View File

@ -0,0 +1,2 @@
package Samples.Petstore is
end Samples.Petstore;

View File

@ -0,0 +1,2 @@
package Samples is
end Samples;