forked from loafle/openapi-generator-original
Fix 16417: [Ada] Server generation fails for some response types (#16421)
* Fix and improvement of Ada server code generator - add support for EWS (Embedded Web Server) - fix GNAT project to avoid depending on util_http but instead use util_aws or util_curl - update server skeleton generation to handle more data types for the response - add more explanation on the generated server README * Rebuild the Ada client GNAT project
This commit is contained in:
parent
ec835fbd94
commit
0dcd8b42b0
@ -759,8 +759,10 @@ abstract public class AbstractAdaCodegen extends DefaultCodegen implements Codeg
|
|||||||
}
|
}
|
||||||
|
|
||||||
CodegenProperty returnProperty = op.returnProperty;
|
CodegenProperty returnProperty = op.returnProperty;
|
||||||
|
CodegenProperty returnType = null;
|
||||||
if (returnProperty != null) {
|
if (returnProperty != null) {
|
||||||
CodegenProperty itemType = returnProperty.getItems();
|
CodegenProperty itemType = returnProperty.getItems();
|
||||||
|
returnType = itemType;
|
||||||
if (itemType != null) {
|
if (itemType != null) {
|
||||||
String dataType;
|
String dataType;
|
||||||
if (itemType.vendorExtensions.containsKey(X_ADA_VECTOR_TYPE_NAME)) {
|
if (itemType.vendorExtensions.containsKey(X_ADA_VECTOR_TYPE_NAME)) {
|
||||||
@ -778,6 +780,73 @@ abstract public class AbstractAdaCodegen extends DefaultCodegen implements Codeg
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (CodegenResponse rsp : op.responses) {
|
||||||
|
|
||||||
|
if (rsp.dataType != null) {
|
||||||
|
String dataType = rsp.dataType;
|
||||||
|
if (returnType != null) {
|
||||||
|
if (returnType.vendorExtensions.containsKey(X_ADA_VECTOR_TYPE_NAME)) {
|
||||||
|
dataType = (String) returnType.vendorExtensions.get(X_ADA_VECTOR_TYPE_NAME);
|
||||||
|
rsp.vendorExtensions.put(X_ADA_TYPE_NAME, dataType);
|
||||||
|
}
|
||||||
|
rsp.vendorExtensions.put("x-is-model-type", isModelType(returnType));
|
||||||
|
rsp.vendorExtensions.put("x-is-stream-type", isStreamType(returnType));
|
||||||
|
rsp.vendorExtensions.put("x-is-nullable", returnType.isNull);
|
||||||
|
|
||||||
|
// Convert optional members to use the Nullable_<T> type.
|
||||||
|
Boolean required = returnType.getHasRequired();
|
||||||
|
if (!Boolean.TRUE.equals(required) && nullableTypeMapping.containsKey(dataType)) {
|
||||||
|
rsp.dataType = nullableTypeMapping.get(dataType);
|
||||||
|
rsp.vendorExtensions.put("x-is-required", false);
|
||||||
|
} else {
|
||||||
|
rsp.vendorExtensions.put("x-is-required", true);
|
||||||
|
}
|
||||||
|
if (!rsp.vendorExtensions.containsKey(X_ADA_SERIALIZE_OP)) {
|
||||||
|
if (returnType.isLong && !required) {
|
||||||
|
rsp.vendorExtensions.put(X_ADA_SERIALIZE_OP, "Write_Entity");
|
||||||
|
} else if (rsp.isLong && "int64".equals(returnType.dataFormat)) {
|
||||||
|
rsp.vendorExtensions.put(X_ADA_SERIALIZE_OP, "Write_Long_Entity");
|
||||||
|
} else {
|
||||||
|
rsp.vendorExtensions.put(X_ADA_SERIALIZE_OP, "Write_Entity");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
rsp.vendorExtensions.put("x-scz-return", true);
|
||||||
|
} else {
|
||||||
|
rsp.vendorExtensions.put("x-scz-no-return", true);
|
||||||
|
if (returnProperty != null) {
|
||||||
|
if (!rsp.vendorExtensions.containsKey(X_ADA_TYPE_NAME)) {
|
||||||
|
rsp.vendorExtensions.put(X_ADA_TYPE_NAME, returnProperty.dataType);
|
||||||
|
}
|
||||||
|
rsp.vendorExtensions.put("x-is-model-type", isModelType(returnProperty));
|
||||||
|
rsp.vendorExtensions.put("x-is-stream-type", isStreamType(returnProperty));
|
||||||
|
rsp.vendorExtensions.put("x-is-nullable", returnProperty.isNull);
|
||||||
|
|
||||||
|
// Convert optional members to use the Nullable_<T> type.
|
||||||
|
Boolean required = returnProperty.getHasRequired();
|
||||||
|
if (!Boolean.TRUE.equals(required) && nullableTypeMapping.containsKey(dataType)) {
|
||||||
|
rsp.dataType = nullableTypeMapping.get(dataType);
|
||||||
|
rsp.vendorExtensions.put("x-is-required", false);
|
||||||
|
} else {
|
||||||
|
rsp.vendorExtensions.put("x-is-required", true);
|
||||||
|
}
|
||||||
|
if (!rsp.vendorExtensions.containsKey(X_ADA_SERIALIZE_OP)) {
|
||||||
|
if (returnProperty.isLong && !required) {
|
||||||
|
rsp.vendorExtensions.put(X_ADA_SERIALIZE_OP, "Write_Entity");
|
||||||
|
} else if (rsp.isLong && "int64".equals(returnProperty.dataFormat)) {
|
||||||
|
rsp.vendorExtensions.put(X_ADA_SERIALIZE_OP, "Write_Long_Entity");
|
||||||
|
} else {
|
||||||
|
rsp.vendorExtensions.put(X_ADA_SERIALIZE_OP, "Write_Entity");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (CodegenProperty header : rsp.headers) {
|
||||||
|
header.nameInCamelCase = toModelName(header.baseName);
|
||||||
|
header.nameInLowerCase = header.baseName.toLowerCase(Locale.ROOT);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Scan the path parameter to construct a x-path-index that tells the index of
|
* Scan the path parameter to construct a x-path-index that tells the index of
|
||||||
* the path parameter.
|
* the path parameter.
|
||||||
|
@ -89,13 +89,14 @@ public class AdaCodegen extends AbstractAdaCodegen implements CodegenConfig {
|
|||||||
if (StringUtils.isEmpty(packageName)) {
|
if (StringUtils.isEmpty(packageName)) {
|
||||||
packageName = modelPackage;
|
packageName = modelPackage;
|
||||||
}
|
}
|
||||||
String srcPrefix = "src" + File.separator;
|
String srcDir = "src" + File.separator;
|
||||||
String modelPrefix = srcPrefix + "model" + File.separator + toFilename(modelPackage);
|
String clientDir = srcDir + "client";
|
||||||
String clientPrefix = srcPrefix + "client" + File.separator + toFilename(modelPackage);
|
String modelDir = srcDir + "model";
|
||||||
supportingFiles.add(new SupportingFile("model-spec.mustache", "", modelPrefix + "-models.ads"));
|
String modelPrefix = toFilename(modelPackage);
|
||||||
supportingFiles.add(new SupportingFile("model-body.mustache", "", modelPrefix + "-models.adb"));
|
supportingFiles.add(new SupportingFile("model-spec.mustache", modelDir, modelPrefix + "-models.ads"));
|
||||||
supportingFiles.add(new SupportingFile("client-spec.mustache", "", clientPrefix + "-clients.ads"));
|
supportingFiles.add(new SupportingFile("model-body.mustache", modelDir, modelPrefix + "-models.adb"));
|
||||||
supportingFiles.add(new SupportingFile("client-body.mustache", "", clientPrefix + "-clients.adb"));
|
supportingFiles.add(new SupportingFile("client-spec.mustache", clientDir, modelPrefix + "-clients.ads"));
|
||||||
|
supportingFiles.add(new SupportingFile("client-body.mustache", clientDir, modelPrefix + "-clients.adb"));
|
||||||
|
|
||||||
if (additionalProperties.containsKey(CodegenConstants.PROJECT_NAME)) {
|
if (additionalProperties.containsKey(CodegenConstants.PROJECT_NAME)) {
|
||||||
projectName = (String) additionalProperties.get(CodegenConstants.PROJECT_NAME);
|
projectName = (String) additionalProperties.get(CodegenConstants.PROJECT_NAME);
|
||||||
@ -121,23 +122,23 @@ public class AdaCodegen extends AbstractAdaCodegen implements CodegenConfig {
|
|||||||
additionalProperties.put("httpClientPackageName", httpClientPackageName);
|
additionalProperties.put("httpClientPackageName", httpClientPackageName);
|
||||||
additionalProperties.put("openApiPackageName", openApiPackageName);
|
additionalProperties.put("openApiPackageName", openApiPackageName);
|
||||||
additionalProperties.put("openApiGprName", openApiPackageName.toLowerCase(Locale.ROOT));
|
additionalProperties.put("openApiGprName", openApiPackageName.toLowerCase(Locale.ROOT));
|
||||||
|
additionalProperties.put("httpClientGprName", httpClientPackageName.toLowerCase(Locale.ROOT));
|
||||||
additionalProperties.put(CodegenConstants.PROJECT_NAME, projectName);
|
additionalProperties.put(CodegenConstants.PROJECT_NAME, projectName);
|
||||||
|
|
||||||
String[] names = this.modelPackage.split("\\.");
|
String[] names = this.modelPackage.split("\\.");
|
||||||
String pkgName = names[0];
|
String pkgName = names[0];
|
||||||
additionalProperties.put("packageLevel1", pkgName);
|
additionalProperties.put("packageLevel1", pkgName);
|
||||||
supportingFiles.add(new SupportingFile("package-spec-level1.mustache", "",
|
supportingFiles.add(new SupportingFile("package-spec-level1.mustache", "src",
|
||||||
"src" + File.separator + toFilename(names[0]) + ".ads"));
|
toFilename(names[0]) + ".ads"));
|
||||||
if (names.length > 1) {
|
if (names.length > 1) {
|
||||||
String fileName = toFilename(names[0]) + "-" + toFilename(names[1]) + ".ads";
|
String fileName = toFilename(names[0]) + "-" + toFilename(names[1]) + ".ads";
|
||||||
pkgName = names[0] + "." + names[1];
|
pkgName = names[0] + "." + names[1];
|
||||||
additionalProperties.put("packageLevel2", pkgName);
|
additionalProperties.put("packageLevel2", pkgName);
|
||||||
supportingFiles.add(new SupportingFile("package-spec-level2.mustache", "",
|
supportingFiles.add(new SupportingFile("package-spec-level2.mustache", "src", fileName));
|
||||||
"src" + File.separator + fileName));
|
|
||||||
}
|
}
|
||||||
pkgName = this.modelPackage;
|
pkgName = this.modelPackage;
|
||||||
supportingFiles.add(new SupportingFile("client.mustache", "",
|
supportingFiles.add(new SupportingFile("client.mustache", "src",
|
||||||
"src" + File.separator + toFilename(pkgName) + "-client.adb"));
|
toFilename(pkgName) + "-client.adb"));
|
||||||
additionalProperties.put("packageName", toFilename(pkgName));
|
additionalProperties.put("packageName", toFilename(pkgName));
|
||||||
|
|
||||||
// add lambda for mustache templates
|
// add lambda for mustache templates
|
||||||
|
@ -86,16 +86,20 @@ public class AdaServerCodegen extends AbstractAdaCodegen implements CodegenConfi
|
|||||||
if (additionalProperties.containsKey(CodegenConstants.PACKAGE_NAME)) {
|
if (additionalProperties.containsKey(CodegenConstants.PACKAGE_NAME)) {
|
||||||
packageName = (String) additionalProperties.get(CodegenConstants.PACKAGE_NAME);
|
packageName = (String) additionalProperties.get(CodegenConstants.PACKAGE_NAME);
|
||||||
}
|
}
|
||||||
String srcPrefix = "src" + File.separator;
|
String srcDir = "src" + File.separator;
|
||||||
String serverPrefix = srcPrefix + "server" + File.separator + toFilename(modelPackage);
|
String awsDir = srcDir + "aws";
|
||||||
String modelPrefix = srcPrefix + "model" + File.separator + toFilename(modelPackage);
|
String ewsDir = srcDir + "ews";
|
||||||
String implPrefix = srcPrefix + toFilename(modelPackage);
|
String serverDir = srcDir + "server";
|
||||||
supportingFiles.add(new SupportingFile("model-spec.mustache", "", modelPrefix + "-models.ads"));
|
String modelDir = srcDir + "model";
|
||||||
supportingFiles.add(new SupportingFile("model-body.mustache", "", modelPrefix + "-models.adb"));
|
String modelPrefix = toFilename(modelPackage);
|
||||||
supportingFiles.add(new SupportingFile("server-skeleton-spec.mustache", "", serverPrefix + "-skeletons.ads"));
|
supportingFiles.add(new SupportingFile("model-spec.mustache", modelDir, modelPrefix + "-models.ads"));
|
||||||
supportingFiles.add(new SupportingFile("server-skeleton-body.mustache", "", serverPrefix + "-skeletons.adb"));
|
supportingFiles.add(new SupportingFile("model-body.mustache", modelDir, modelPrefix + "-models.adb"));
|
||||||
supportingFiles.add(new SupportingFile("server-spec.mustache", "", implPrefix + "-servers.ads"));
|
supportingFiles.add(new SupportingFile("server-skeleton-spec.mustache", serverDir, modelPrefix + "-skeletons.ads"));
|
||||||
supportingFiles.add(new SupportingFile("server-body.mustache", "", implPrefix + "-servers.adb"));
|
supportingFiles.add(new SupportingFile("server-skeleton-body.mustache", serverDir, modelPrefix + "-skeletons.adb"));
|
||||||
|
supportingFiles.add(new SupportingFile("server-spec.mustache", srcDir, modelPrefix + "-servers.ads"));
|
||||||
|
supportingFiles.add(new SupportingFile("server-body.mustache", srcDir, modelPrefix + "-servers.adb"));
|
||||||
|
supportingFiles.add(new SupportingFile("server-aws.mustache", awsDir, modelPrefix + "_aws.adb"));
|
||||||
|
supportingFiles.add(new SupportingFile("server-ews.mustache", ewsDir, modelPrefix + "_ews.adb"));
|
||||||
|
|
||||||
supportingFiles.add(new SupportingFile("openapi.mustache", "web" + File.separator + "swagger", "openapi.json"));
|
supportingFiles.add(new SupportingFile("openapi.mustache", "web" + File.separator + "swagger", "openapi.json"));
|
||||||
|
|
||||||
@ -124,23 +128,23 @@ public class AdaServerCodegen extends AbstractAdaCodegen implements CodegenConfi
|
|||||||
additionalProperties.put("httpClientPackageName", httpClientPackageName);
|
additionalProperties.put("httpClientPackageName", httpClientPackageName);
|
||||||
additionalProperties.put("openApiPackageName", openApiPackageName);
|
additionalProperties.put("openApiPackageName", openApiPackageName);
|
||||||
additionalProperties.put("openApiGprName", openApiPackageName.toLowerCase(Locale.ROOT));
|
additionalProperties.put("openApiGprName", openApiPackageName.toLowerCase(Locale.ROOT));
|
||||||
|
additionalProperties.put("httpClientGprName", httpClientPackageName.toLowerCase(Locale.ROOT));
|
||||||
additionalProperties.put(CodegenConstants.PROJECT_NAME, projectName);
|
additionalProperties.put(CodegenConstants.PROJECT_NAME, projectName);
|
||||||
|
|
||||||
String names[] = this.modelPackage.split("\\.");
|
String names[] = this.modelPackage.split("\\.");
|
||||||
String pkgName = names[0];
|
String pkgName = names[0];
|
||||||
additionalProperties.put("packageLevel1", pkgName);
|
additionalProperties.put("packageLevel1", pkgName);
|
||||||
supportingFiles.add(new SupportingFile("package-spec-level1.mustache", "",
|
supportingFiles.add(new SupportingFile("package-spec-level1.mustache", "src",
|
||||||
"src" + File.separator + toFilename(names[0]) + ".ads"));
|
toFilename(names[0]) + ".ads"));
|
||||||
if (names.length > 1) {
|
if (names.length > 1) {
|
||||||
String fileName = toFilename(names[0]) + "-" + toFilename(names[1]) + ".ads";
|
String fileName = toFilename(names[0]) + "-" + toFilename(names[1]) + ".ads";
|
||||||
pkgName = names[0] + "." + names[1];
|
pkgName = names[0] + "." + names[1];
|
||||||
additionalProperties.put("packageLevel2", pkgName);
|
additionalProperties.put("packageLevel2", pkgName);
|
||||||
supportingFiles.add(new SupportingFile("package-spec-level2.mustache", "",
|
supportingFiles.add(new SupportingFile("package-spec-level2.mustache", "src", fileName));
|
||||||
"src" + File.separator + fileName));
|
|
||||||
}
|
}
|
||||||
pkgName = this.modelPackage;
|
pkgName = this.modelPackage;
|
||||||
supportingFiles.add(new SupportingFile("server.mustache", "",
|
supportingFiles.add(new SupportingFile("server.mustache", "src",
|
||||||
"src" + File.separator + toFilename(pkgName) + "-server.adb"));
|
toFilename(pkgName) + "-server.adb"));
|
||||||
additionalProperties.put("packageName", toFilename(pkgName));
|
additionalProperties.put("packageName", toFilename(pkgName));
|
||||||
|
|
||||||
// add lambda for mustache templates
|
// add lambda for mustache templates
|
||||||
|
@ -6,23 +6,39 @@ This Ada server was generated by the [OpenAPI Generator](https://openapi-generat
|
|||||||
By using the [OpenAPI-Spec](https://github.com/OAI/OpenAPI-Specification) from a remote server,
|
By using the [OpenAPI-Spec](https://github.com/OAI/OpenAPI-Specification) from a remote server,
|
||||||
you can easily generate a server stub.
|
you can easily generate a server stub.
|
||||||
|
|
||||||
## Building
|
## Alire setup
|
||||||
|
|
||||||
To build the server you will need the GNAT Ada compiler as well as
|
Use [Alire](https://github.com/alire-project/alire) to setup and build the project.
|
||||||
the [OpenAPI Ada library](https://github.com/stcarrez/swagger-ada).
|
First, import the [OpenAPI Ada](https://gitlab.com/stcarrez/openapi-ada) server library with:
|
||||||
|
|
||||||
When the GNAT Ada compiler and OpenAPI Ada libraries are installed,
|
|
||||||
run the following command:
|
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
gprbuild -p -P{{projectName}}
|
alr with openapi_server
|
||||||
|
```
|
||||||
|
|
||||||
|
Then choose a servlet web container that will handle the requests.
|
||||||
|
Two web server implementations are provided:
|
||||||
|
|
||||||
|
* [AWS](https://github.com/AdaCore/aws)
|
||||||
|
* [EWS](https://github.com/simonjwright/ews)
|
||||||
|
|
||||||
|
and you should run one of the following `alr` command depending on your choice:
|
||||||
|
|
||||||
|
```
|
||||||
|
alr with servletada_aws
|
||||||
|
alr with servletada_ews
|
||||||
|
```
|
||||||
|
|
||||||
|
Once these steps are made, build the project with
|
||||||
|
|
||||||
|
```
|
||||||
|
alr build
|
||||||
```
|
```
|
||||||
|
|
||||||
After the build is successful, you will get the server binary
|
After the build is successful, you will get the server binary
|
||||||
in bin/{{packageName}}-server and you can start it as follows:
|
in `bin/{{packageName}}_aws` or `bin/{{packageName}}_ews` and you can start it as follows:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
./bin/{{packageName}}-server
|
./bin/{{packageName}}_aws
|
||||||
```
|
```
|
||||||
|
|
||||||
## Structure of the server
|
## Structure of the server
|
||||||
@ -40,6 +56,8 @@ src/server/{{packageName}}-skeletons.adb|{{package}}.Skeletons|The server skelet
|
|||||||
src/server/{{packageName}}-models.ads|{{package}}.Skeletons|The server model types declaration
|
src/server/{{packageName}}-models.ads|{{package}}.Skeletons|The server model types declaration
|
||||||
src/server/{{packageName}}-models.adb|{{package}}.Skeletons|The server model types implementation
|
src/server/{{packageName}}-models.adb|{{package}}.Skeletons|The server model types implementation
|
||||||
src/{{packageName}}-server.adb|{{package}}.Server|The server main procedure
|
src/{{packageName}}-server.adb|{{package}}.Server|The server main procedure
|
||||||
|
src/aws/{{packageName}}_aws.adb||The Ada Web Server server main procedure
|
||||||
|
src/ews/{{packageName}}_ews.adb||The Embedded Web Server server main procedure
|
||||||
|
|
||||||
Files generated in **src/server** should not be modified. The server implementation
|
Files generated in **src/server** should not be modified. The server implementation
|
||||||
files (**src/{{packageName}}-server.ads** and **src/{{packageName}}-server.adb**) should
|
files (**src/{{packageName}}-server.ads** and **src/{{packageName}}-server.adb**) should
|
||||||
|
@ -8,17 +8,44 @@
|
|||||||
with "config";
|
with "config";
|
||||||
with "utilada_sys";
|
with "utilada_sys";
|
||||||
with "utilada_xml";
|
with "utilada_xml";
|
||||||
with "utilada_http";
|
with "utilada_{{httpClientGprName}}";
|
||||||
with "security";
|
with "security";
|
||||||
with "{{openApiGprName}}";{{#isServer}}
|
with "{{openApiGprName}}";{{#isServer}}
|
||||||
with "servletada";
|
with "servletada";
|
||||||
|
with "servletada_aws";
|
||||||
|
-- with "servletada_ews";
|
||||||
with "{{openApiGprName}}_server";{{/isServer}}
|
with "{{openApiGprName}}_server";{{/isServer}}
|
||||||
project {{{projectName}}} is
|
project {{{projectName}}} is
|
||||||
|
|
||||||
Mains := ("{{{packageName}}}-{{{mainName}}}.adb");
|
for Object_Dir use "obj/";
|
||||||
for Main use Mains;
|
|
||||||
for Source_Dirs use ("src", "src/model", "src/{{{packageDir}}}");
|
for Source_Dirs use ("src", "src/model", "src/{{{packageDir}}}");
|
||||||
for Object_Dir use "./" & Config'Exec_Dir & "/bin";
|
{{^isServer}}
|
||||||
|
Mains := ("{{{packageName}}}-{{{mainName}}}.adb");
|
||||||
|
{{/isServer}}
|
||||||
|
{{#isServer}}
|
||||||
|
for Main use ();
|
||||||
|
|
||||||
|
Build_AWS : Config.Yes_No := external ("BUILD_AWS", "yes");
|
||||||
|
Build_EWS : Config.Yes_No := external ("BUILD_EWS", "no");
|
||||||
|
|
||||||
|
case Build_AWS is
|
||||||
|
when "yes" =>
|
||||||
|
for Main use Project'Main & ("{{{packageName}}}_aws.adb");
|
||||||
|
for Source_Dirs use Project'Source_Dirs & ("src/aws");
|
||||||
|
|
||||||
|
when others =>
|
||||||
|
null;
|
||||||
|
end case;
|
||||||
|
|
||||||
|
case Build_EWS is
|
||||||
|
when "yes" =>
|
||||||
|
for Main use Project'Main & ("{{{packageName}}}_ews.adb");
|
||||||
|
for Source_Dirs use Project'Source_Dirs & ("src/ews");
|
||||||
|
|
||||||
|
when others =>
|
||||||
|
null;
|
||||||
|
end case;
|
||||||
|
{{/isServer}}
|
||||||
|
|
||||||
package Binder renames Config.Binder;
|
package Binder renames Config.Binder;
|
||||||
package Builder renames Config.Builder;
|
package Builder renames Config.Builder;
|
||||||
|
7
modules/openapi-generator/src/main/resources/Ada/server-aws.mustache
vendored
Normal file
7
modules/openapi-generator/src/main/resources/Ada/server-aws.mustache
vendored
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
with Servlet.Server.Web;
|
||||||
|
with {{{projectName}}}.Server;
|
||||||
|
procedure {{{projectName}}}_AWS is
|
||||||
|
Container : Servlet.Server.Web.AWS_Container;
|
||||||
|
begin
|
||||||
|
{{{projectName}}}.Server (Container);
|
||||||
|
end {{{projectName}}}_AWS;
|
7
modules/openapi-generator/src/main/resources/Ada/server-ews.mustache
vendored
Normal file
7
modules/openapi-generator/src/main/resources/Ada/server-ews.mustache
vendored
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
with Servlet.Server.EWS;
|
||||||
|
with {{{projectName}}}.Server;
|
||||||
|
procedure {{{projectName}}}_EWS is
|
||||||
|
Container : Servlet.Server.EWS.EWS_Container;
|
||||||
|
begin
|
||||||
|
{{{projectName}}}.Server (Container);
|
||||||
|
end {{{projectName}}}_EWS;
|
@ -107,10 +107,7 @@ package body {{package}}.Skeletons is
|
|||||||
{{#returnType}}
|
{{#returnType}}
|
||||||
{{#responses}}
|
{{#responses}}
|
||||||
if Context.Get_Status = {{code}} then{{#message}}
|
if Context.Get_Status = {{code}} then{{#message}}
|
||||||
Context.Set_Description ("{{message}}");{{/message}}
|
Context.Set_Description ("{{message}}");{{/message}}{{#-first}}{{#schema}}{{#vendorExtensions.x-produces-plain-text}}{{#isFile}}
|
||||||
{{#schema}}
|
|
||||||
{{#vendorExtensions.x-produces-plain-text}}
|
|
||||||
{{#isFile}}
|
|
||||||
{{openApiPackageName}}.Streams.Write (Stream, Result);
|
{{openApiPackageName}}.Streams.Write (Stream, Result);
|
||||||
{{/isFile}}{{^isFile}}
|
{{/isFile}}{{^isFile}}
|
||||||
Stream.Write ({{openApiPackageName}}.To_String (Result));
|
Stream.Write ({{openApiPackageName}}.To_String (Result));
|
||||||
@ -119,15 +116,22 @@ package body {{package}}.Skeletons is
|
|||||||
{{#isFile}}
|
{{#isFile}}
|
||||||
{{openApiPackageName}}.Streams.Write (Stream, Result);
|
{{openApiPackageName}}.Streams.Write (Stream, Result);
|
||||||
{{/isFile}}{{^isFile}}
|
{{/isFile}}{{^isFile}}
|
||||||
Stream.Start_Document;{{#vendorExtensions.x-codegen-response.isString}}
|
Stream.Start_Document;{{#vendorExtensions.x-is-stream-type}}{{^isLong}}{{#vendorExtensions.x-is-required}}
|
||||||
{{openApiPackageName}}.Streams.Serialize (Stream, "", Result);{{/vendorExtensions.x-codegen-response.isString}}{{^vendorExtensions.x-codegen-response.isString}}{{#returnTypeIsPrimitive}}
|
Stream.{{vendorExtensions.x-ada-serialize-op}} ("", Result);{{/vendorExtensions.x-is-required}}{{^vendorExtensions.x-is-required}}{{#vendorExtensions.x-is-nullable}}
|
||||||
{{openApiPackageName}}.Streams.Serialize (Stream, "", Result);{{/returnTypeIsPrimitive}}{{^returnTypeIsPrimitive}}
|
Stream.{{vendorExtensions.x-ada-serialize-op}} ("", Result);{{/vendorExtensions.x-is-nullable}}{{^vendorExtensions.x-is-nullable}}
|
||||||
{{package}}.Models.Serialize (Stream, "", Result);{{/returnTypeIsPrimitive}}{{/vendorExtensions.x-codegen-response.isString}}
|
if not {{#isFreeFormObject}}{{openApiPackageName}}.Is_Null (Result){{/isFreeFormObject}}{{^isFreeFormObject}}Value.{{name}}.Is_Null{{/isFreeFormObject}} then
|
||||||
Stream.End_Document;
|
Stream.{{vendorExtensions.x-ada-serialize-op}} ("", Result);
|
||||||
{{/isFile}}{{/vendorExtensions.x-produces-plain-text}}
|
end if;{{/vendorExtensions.x-is-nullable}}{{/vendorExtensions.x-is-required}}{{/isLong}}{{#isLong}}{{#vendorExtensions.x-is-required}}
|
||||||
{{/schema}}
|
Stream.{{vendorExtensions.x-ada-serialize-op}} ("", Result);{{/vendorExtensions.x-is-required}}{{^vendorExtensions.x-is-required}}{{#vendorExtensions.x-is-nullable}}
|
||||||
|
Stream.{{vendorExtensions.x-ada-serialize-op}} ("", Result);{{/vendorExtensions.x-is-nullable}}{{^vendorExtensions.x-is-nullable}}
|
||||||
|
if not Result.Is_Null then
|
||||||
|
Stream.{{vendorExtensions.x-ada-serialize-op}} ("", Result);
|
||||||
|
end if;{{/vendorExtensions.x-is-nullable}}{{/vendorExtensions.x-is-required}}{{/isLong}}{{/vendorExtensions.x-is-stream-type}}{{^vendorExtensions.x-is-stream-type}}
|
||||||
|
Serialize (Stream, "", Result);{{/vendorExtensions.x-is-stream-type}}
|
||||||
|
Stream.End_Document;{{/isFile}}{{/vendorExtensions.x-produces-plain-text}}{{/schema}}{{/-first}}
|
||||||
return;
|
return;
|
||||||
end if;{{/responses}}{{/returnType}}
|
end if;
|
||||||
|
{{/responses}}{{/returnType}}
|
||||||
end {{operationId}};
|
end {{operationId}};
|
||||||
{{/operation}}
|
{{/operation}}
|
||||||
{{/operations}}
|
{{/operations}}
|
||||||
@ -224,10 +228,7 @@ package body {{package}}.Skeletons is
|
|||||||
{{#returnType}}
|
{{#returnType}}
|
||||||
{{#responses}}
|
{{#responses}}
|
||||||
if Context.Get_Status = {{code}} then{{#message}}
|
if Context.Get_Status = {{code}} then{{#message}}
|
||||||
Context.Set_Description ("{{message}}");{{/message}}
|
Context.Set_Description ("{{message}}");{{/message}}{{#-first}}{{#schema}}{{#vendorExtensions.x-produces-plain-text}}{{#isFile}}
|
||||||
{{#schema}}
|
|
||||||
{{#vendorExtensions.x-produces-plain-text}}
|
|
||||||
{{#isFile}}
|
|
||||||
{{openApiPackageName}}.Streams.Write (Stream, Result);
|
{{openApiPackageName}}.Streams.Write (Stream, Result);
|
||||||
{{/isFile}}{{^isFile}}
|
{{/isFile}}{{^isFile}}
|
||||||
Stream.Write ({{openApiPackageName}}.To_String (Result));
|
Stream.Write ({{openApiPackageName}}.To_String (Result));
|
||||||
@ -236,15 +237,22 @@ package body {{package}}.Skeletons is
|
|||||||
{{#isFile}}
|
{{#isFile}}
|
||||||
{{openApiPackageName}}.Streams.Write (Stream, Result);
|
{{openApiPackageName}}.Streams.Write (Stream, Result);
|
||||||
{{/isFile}}{{^isFile}}
|
{{/isFile}}{{^isFile}}
|
||||||
Stream.Start_Document;{{#vendorExtensions.x-codegen-response.isString}}
|
Stream.Start_Document;{{#vendorExtensions.x-is-stream-type}}{{^isLong}}{{#vendorExtensions.x-is-required}}
|
||||||
{{openApiPackageName}}.Streams.Serialize (Stream, "", Result);{{/vendorExtensions.x-codegen-response.isString}}{{^vendorExtensions.x-codegen-response.isString}}{{#returnTypeIsPrimitive}}
|
Stream.{{vendorExtensions.x-ada-serialize-op}} ("", Result);{{/vendorExtensions.x-is-required}}{{^vendorExtensions.x-is-required}}{{#vendorExtensions.x-is-nullable}}
|
||||||
{{openApiPackageName}}.Streams.Serialize (Stream, "", Result);{{/returnTypeIsPrimitive}}{{^returnTypeIsPrimitive}}
|
Stream.{{vendorExtensions.x-ada-serialize-op}} ("", Result);{{/vendorExtensions.x-is-nullable}}{{^vendorExtensions.x-is-nullable}}
|
||||||
{{package}}.Models.Serialize (Stream, "", Result);{{/returnTypeIsPrimitive}}{{/vendorExtensions.x-codegen-response.isString}}
|
if not {{#isFreeFormObject}}{{openApiPackageName}}.Is_Null (Result){{/isFreeFormObject}}{{^isFreeFormObject}}Value.{{name}}.Is_Null{{/isFreeFormObject}} then
|
||||||
Stream.End_Document;
|
Stream.{{vendorExtensions.x-ada-serialize-op}} ("", Result);
|
||||||
{{/isFile}}{{/vendorExtensions.x-produces-plain-text}}
|
end if;{{/vendorExtensions.x-is-nullable}}{{/vendorExtensions.x-is-required}}{{/isLong}}{{#isLong}}{{#vendorExtensions.x-is-required}}
|
||||||
{{/schema}}
|
Stream.{{vendorExtensions.x-ada-serialize-op}} ("", Result);{{/vendorExtensions.x-is-required}}{{^vendorExtensions.x-is-required}}{{#vendorExtensions.x-is-nullable}}
|
||||||
|
Stream.{{vendorExtensions.x-ada-serialize-op}} ("", Result);{{/vendorExtensions.x-is-nullable}}{{^vendorExtensions.x-is-nullable}}
|
||||||
|
if not Result.Is_Null then
|
||||||
|
Stream.{{vendorExtensions.x-ada-serialize-op}} ("", Result);
|
||||||
|
end if;{{/vendorExtensions.x-is-nullable}}{{/vendorExtensions.x-is-required}}{{/isLong}}{{/vendorExtensions.x-is-stream-type}}{{^vendorExtensions.x-is-stream-type}}
|
||||||
|
Serialize (Stream, "", Result);{{/vendorExtensions.x-is-stream-type}}
|
||||||
|
Stream.End_Document;{{/isFile}}{{/vendorExtensions.x-produces-plain-text}}{{/schema}}{{/-first}}
|
||||||
return;
|
return;
|
||||||
end if;{{/responses}}{{/returnType}}
|
end if;
|
||||||
|
{{/responses}}{{/returnType}}
|
||||||
end {{operationId}};
|
end {{operationId}};
|
||||||
|
|
||||||
package API_{{operationId}} is
|
package API_{{operationId}} is
|
||||||
|
@ -1,46 +1,37 @@
|
|||||||
with Ada.IO_Exceptions;
|
with Ada.IO_Exceptions;
|
||||||
with AWS.Config.Set;
|
with Servlet.Server;
|
||||||
with {{openApiPackageName}}.Servers.AWS;
|
|
||||||
with {{openApiPackageName}}.Servers.Applications;
|
with {{openApiPackageName}}.Servers.Applications;
|
||||||
with Util.Strings;
|
with Util.Strings;
|
||||||
with Util.Log.Loggers;
|
with Util.Log.Loggers;
|
||||||
with Util.Properties;
|
with Util.Properties;
|
||||||
with Util.Properties.Basic;
|
with Util.Properties.Basic;
|
||||||
with {{package}}.Servers;
|
with {{package}}.Servers;
|
||||||
procedure {{package}}.Server is
|
procedure {{package}}.Server (Server : in out Servlet.Server.Container'Class) is
|
||||||
procedure Configure (Config : in out AWS.Config.Object);
|
|
||||||
|
|
||||||
use Util.Properties.Basic;
|
use Util.Properties.Basic;
|
||||||
|
|
||||||
CONFIG_PATH : constant String := "{{packageConfig}}.properties";
|
CONFIG_PATH : constant String := "{{packageConfig}}.properties";
|
||||||
|
|
||||||
Port : Natural := 8080;
|
Port : Natural := 8080;
|
||||||
|
|
||||||
procedure Configure (Config : in out AWS.Config.Object) is
|
|
||||||
begin
|
|
||||||
AWS.Config.Set.Server_Port (Config, Port);
|
|
||||||
AWS.Config.Set.Max_Connection (Config, 8);
|
|
||||||
AWS.Config.Set.Accept_Queue_Size (Config, 512);
|
|
||||||
end Configure;
|
|
||||||
|
|
||||||
App : aliased {{openApiPackageName}}.Servers.Applications.Application_Type;
|
App : aliased {{openApiPackageName}}.Servers.Applications.Application_Type;
|
||||||
WS : {{openApiPackageName}}.Servers.AWS.AWS_Container;
|
|
||||||
Log : constant Util.Log.Loggers.Logger := Util.Log.Loggers.Create ("{{package}}.Server");
|
Log : constant Util.Log.Loggers.Logger := Util.Log.Loggers.Create ("{{package}}.Server");
|
||||||
Props : Util.Properties.Manager;
|
Props : Util.Properties.Manager;
|
||||||
|
Config : Servlet.Server.Configuration;
|
||||||
begin
|
begin
|
||||||
Props.Load_Properties (CONFIG_PATH);
|
Props.Load_Properties (CONFIG_PATH);
|
||||||
Util.Log.Loggers.Initialize (Props);
|
Util.Log.Loggers.Initialize (Props);
|
||||||
|
|
||||||
Port := Integer_Property.Get (Props, "swagger.port", Port);
|
Port := Integer_Property.Get (Props, "swagger.port", Port);
|
||||||
|
Config.Listening_Port := Port;
|
||||||
App.Configure (Props);
|
App.Configure (Props);
|
||||||
{{package}}.Servers.Server_Impl.Register (App);
|
{{package}}.Servers.Server_Impl.Register (App);
|
||||||
|
|
||||||
WS.Configure (Configure'Access);
|
Server.Configure (Config);
|
||||||
WS.Register_Application ("{{basePathWithoutHost}}", App'Unchecked_Access);
|
Server.Register_Application ("{{basePathWithoutHost}}", App'Unchecked_Access);
|
||||||
App.Dump_Routes (Util.Log.INFO_LEVEL);
|
App.Dump_Routes (Util.Log.INFO_LEVEL);
|
||||||
Log.Info ("Connect your browser to: http://localhost:{0}{{basePathWithoutHost}}/ui/index.html",
|
Log.Info ("Connect your browser to: http://localhost:{0}{{basePathWithoutHost}}/ui/index.html",
|
||||||
Util.Strings.Image (Port));
|
Util.Strings.Image (Port));
|
||||||
|
|
||||||
WS.Start;
|
Server.Start;
|
||||||
|
|
||||||
delay 6000.0;
|
delay 6000.0;
|
||||||
|
|
||||||
|
@ -1,22 +1,21 @@
|
|||||||
-- Swagger Petstore
|
-- OpenAPI 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.
|
-- This is a sample server Petstore server. For this sample, you can use the api key `special_key` to test the authorization filters.
|
||||||
-- OpenAPI spec version: 1.0.0
|
-- The version of the OpenAPI document: 1.0.0
|
||||||
--
|
--
|
||||||
-- https://github.com/swagger-api/swagger-codegen.git
|
-- https://openapi-generator.tech
|
||||||
--
|
--
|
||||||
-- NOTE: Auto generated by the swagger code generator program.
|
-- NOTE: Auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
||||||
with "config";
|
with "config";
|
||||||
with "utilada_sys";
|
with "utilada_sys";
|
||||||
with "utilada_xml";
|
with "utilada_xml";
|
||||||
with "utilada_http";
|
with "utilada_curl";
|
||||||
with "security";
|
with "security";
|
||||||
with "swagger";
|
with "swagger";
|
||||||
project Petstore is
|
project Petstore is
|
||||||
|
|
||||||
Mains := ("petstore.adb");
|
for Object_Dir use "obj/";
|
||||||
for Main use Mains;
|
|
||||||
for Source_Dirs use ("src", "src/model", "src/client");
|
for Source_Dirs use ("src", "src/model", "src/client");
|
||||||
for Object_Dir use "./" & Config'Exec_Dir & "/bin";
|
Mains := ("samples-petstore-client.adb");
|
||||||
|
|
||||||
package Binder renames Config.Binder;
|
package Binder renames Config.Binder;
|
||||||
package Builder renames Config.Builder;
|
package Builder renames Config.Builder;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user