-
-
Notifications
You must be signed in to change notification settings - Fork 6.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[scala] [template] scala sttp client (#5429)
* scala-sttp-client template * invoker for sttp fixed and tests added * clean up pet api test from redunant comments * docs updated * fix artefact name, model comments and redunant generic * code optimization * cross scala versions 2.11 2.12 2.13 * date serializers extracted and joda enabled as default * basic and bearer authorization added, apikey in query supported
- Loading branch information
1 parent
d325e8c
commit 40cbbbf
Showing
42 changed files
with
1,920 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
#!/bin/sh | ||
|
||
SCRIPT="$0" | ||
echo "# START SCRIPT: $SCRIPT" | ||
|
||
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/openapi-generator-cli/target/openapi-generator-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} -Xmx1024M -DloggerPath=conf/log4j.properties" | ||
ags="generate --artifact-id "scala-sttp-petstore-client" -t modules/openapi-generator/src/main/resources/scala-sttp-client -i modules/openapi-generator/src/test/resources/3_0/petstore.yaml -g scala-sttp -o samples/client/petstore/scala-sttp $@" | ||
|
||
java $JAVA_OPTS -jar $executable $ags |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,216 @@ | ||
--- | ||
title: Config Options for scala-sttp | ||
sidebar_label: scala-sttp | ||
--- | ||
|
||
| Option | Description | Values | Default | | ||
| ------ | ----------- | ------ | ------- | | ||
|allowUnicodeIdentifiers|boolean, toggles whether unicode identifiers are allowed in names or not, default is false| |false| | ||
|apiPackage|package for generated api classes| |null| | ||
|ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |true| | ||
|mainPackage|Top-level package name, which defines 'apiPackage', 'modelPackage', 'invokerPackage'| |org.openapitools.client| | ||
|modelPackage|package for generated models| |null| | ||
|prependFormOrBodyParameters|Add form or body parameters to the beginning of the parameter list.| |false| | ||
|sortModelPropertiesByRequiredFlag|Sort model properties to place required parameters before optional parameters.| |true| | ||
|sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true| | ||
|sourceFolder|source folder for generated code| |null| | ||
|
||
## IMPORT MAPPING | ||
|
||
| Type/Alias | Imports | | ||
| ---------- | ------- | | ||
|Array|java.util.List| | ||
|ArrayList|java.util.ArrayList| | ||
|BigDecimal|java.math.BigDecimal| | ||
|Date|java.util.Date| | ||
|DateTime|org.joda.time.DateTime| | ||
|File|java.io.File| | ||
|HashMap|java.util.HashMap| | ||
|ListBuffer|scala.collection.mutable.ListBuffer| | ||
|ListSet|scala.collection.immutable.ListSet| | ||
|LocalDate|org.joda.time.*| | ||
|LocalDateTime|org.joda.time.*| | ||
|LocalTime|org.joda.time.*| | ||
|Timestamp|java.sql.Timestamp| | ||
|URI|java.net.URI| | ||
|UUID|java.util.UUID| | ||
|
||
|
||
## INSTANTIATION TYPES | ||
|
||
| Type/Alias | Instantiated By | | ||
| ---------- | --------------- | | ||
|array|ListBuffer| | ||
|map|Map| | ||
|set|Set| | ||
|
||
|
||
## LANGUAGE PRIMITIVES | ||
|
||
<ul class="column-ul"> | ||
<li>Any</li> | ||
<li>Array</li> | ||
<li>Boolean</li> | ||
<li>Double</li> | ||
<li>Float</li> | ||
<li>Int</li> | ||
<li>List</li> | ||
<li>Long</li> | ||
<li>Map</li> | ||
<li>Object</li> | ||
<li>Seq</li> | ||
<li>String</li> | ||
<li>boolean</li> | ||
</ul> | ||
|
||
## RESERVED WORDS | ||
|
||
<ul class="column-ul"> | ||
<li>abstract</li> | ||
<li>case</li> | ||
<li>catch</li> | ||
<li>class</li> | ||
<li>def</li> | ||
<li>do</li> | ||
<li>else</li> | ||
<li>extends</li> | ||
<li>false</li> | ||
<li>final</li> | ||
<li>finally</li> | ||
<li>for</li> | ||
<li>forsome</li> | ||
<li>if</li> | ||
<li>implicit</li> | ||
<li>import</li> | ||
<li>lazy</li> | ||
<li>match</li> | ||
<li>new</li> | ||
<li>null</li> | ||
<li>object</li> | ||
<li>override</li> | ||
<li>package</li> | ||
<li>private</li> | ||
<li>protected</li> | ||
<li>return</li> | ||
<li>sealed</li> | ||
<li>super</li> | ||
<li>this</li> | ||
<li>throw</li> | ||
<li>trait</li> | ||
<li>true</li> | ||
<li>try</li> | ||
<li>type</li> | ||
<li>val</li> | ||
<li>var</li> | ||
<li>while</li> | ||
<li>with</li> | ||
<li>yield</li> | ||
</ul> | ||
|
||
## FEATURE SET | ||
|
||
|
||
### Client Modification Feature | ||
| Name | Supported | Defined By | | ||
| ---- | --------- | ---------- | | ||
|BasePath|✓|ToolingExtension | ||
|Authorizations|✗|ToolingExtension | ||
|UserAgent|✓|ToolingExtension | ||
|
||
### Data Type Feature | ||
| Name | Supported | Defined By | | ||
| ---- | --------- | ---------- | | ||
|Custom|✗|OAS2,OAS3 | ||
|Int32|✓|OAS2,OAS3 | ||
|Int64|✓|OAS2,OAS3 | ||
|Float|✓|OAS2,OAS3 | ||
|Double|✓|OAS2,OAS3 | ||
|Decimal|✓|ToolingExtension | ||
|String|✓|OAS2,OAS3 | ||
|Byte|✓|OAS2,OAS3 | ||
|Binary|✓|OAS2,OAS3 | ||
|Boolean|✓|OAS2,OAS3 | ||
|Date|✓|OAS2,OAS3 | ||
|DateTime|✓|OAS2,OAS3 | ||
|Password|✓|OAS2,OAS3 | ||
|File|✓|OAS2 | ||
|Array|✓|OAS2,OAS3 | ||
|Maps|✓|ToolingExtension | ||
|CollectionFormat|✓|OAS2 | ||
|CollectionFormatMulti|✓|OAS2 | ||
|Enum|✓|OAS2,OAS3 | ||
|ArrayOfEnum|✓|ToolingExtension | ||
|ArrayOfModel|✓|ToolingExtension | ||
|ArrayOfCollectionOfPrimitives|✓|ToolingExtension | ||
|ArrayOfCollectionOfModel|✓|ToolingExtension | ||
|ArrayOfCollectionOfEnum|✓|ToolingExtension | ||
|MapOfEnum|✓|ToolingExtension | ||
|MapOfModel|✓|ToolingExtension | ||
|MapOfCollectionOfPrimitives|✓|ToolingExtension | ||
|MapOfCollectionOfModel|✓|ToolingExtension | ||
|MapOfCollectionOfEnum|✓|ToolingExtension | ||
|
||
### Documentation Feature | ||
| Name | Supported | Defined By | | ||
| ---- | --------- | ---------- | | ||
|Readme|✓|ToolingExtension | ||
|Model|✓|ToolingExtension | ||
|Api|✓|ToolingExtension | ||
|
||
### Global Feature | ||
| Name | Supported | Defined By | | ||
| ---- | --------- | ---------- | | ||
|Host|✓|OAS2,OAS3 | ||
|BasePath|✓|OAS2,OAS3 | ||
|Info|✓|OAS2,OAS3 | ||
|Schemes|✗|OAS2,OAS3 | ||
|PartialSchemes|✓|OAS2,OAS3 | ||
|Consumes|✓|OAS2 | ||
|Produces|✓|OAS2 | ||
|ExternalDocumentation|✓|OAS2,OAS3 | ||
|Examples|✓|OAS2,OAS3 | ||
|XMLStructureDefinitions|✗|OAS2,OAS3 | ||
|MultiServer|✗|OAS3 | ||
|ParameterizedServer|✗|OAS3 | ||
|ParameterStyling|✗|OAS3 | ||
|Callbacks|✗|OAS3 | ||
|LinkObjects|✗|OAS3 | ||
|
||
### Parameter Feature | ||
| Name | Supported | Defined By | | ||
| ---- | --------- | ---------- | | ||
|Path|✓|OAS2,OAS3 | ||
|Query|✓|OAS2,OAS3 | ||
|Header|✓|OAS2,OAS3 | ||
|Body|✓|OAS2 | ||
|FormUnencoded|✓|OAS2 | ||
|FormMultipart|✓|OAS2 | ||
|Cookie|✗|OAS3 | ||
|
||
### Schema Support Feature | ||
| Name | Supported | Defined By | | ||
| ---- | --------- | ---------- | | ||
|Simple|✓|OAS2,OAS3 | ||
|Composite|✓|OAS2,OAS3 | ||
|Polymorphism|✗|OAS2,OAS3 | ||
|Union|✗|OAS3 | ||
|
||
### Security Feature | ||
| Name | Supported | Defined By | | ||
| ---- | --------- | ---------- | | ||
|BasicAuth|✓|OAS2,OAS3 | ||
|ApiKey|✓|OAS2,OAS3 | ||
|OpenIDConnect|✗|OAS3 | ||
|BearerToken|✓|OAS3 | ||
|OAuth2_Implicit|✗|OAS2,OAS3 | ||
|OAuth2_Password|✗|OAS2,OAS3 | ||
|OAuth2_ClientCredentials|✗|OAS2,OAS3 | ||
|OAuth2_AuthorizationCode|✗|OAS2,OAS3 | ||
|
||
### Wire Format Feature | ||
| Name | Supported | Defined By | | ||
| ---- | --------- | ---------- | | ||
|JSON|✓|OAS2,OAS3 | ||
|XML|✓|OAS2,OAS3 | ||
|PROTOBUF|✗|ToolingExtension | ||
|Custom|✓|OAS2,OAS3 |
73 changes: 73 additions & 0 deletions
73
...pi-generator/src/main/java/org/openapitools/codegen/languages/ScalaSttpClientCodegen.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
package org.openapitools.codegen.languages; | ||
|
||
import io.swagger.v3.oas.models.Operation; | ||
import io.swagger.v3.oas.models.servers.Server; | ||
import org.openapitools.codegen.CodegenConfig; | ||
import org.openapitools.codegen.CodegenOperation; | ||
import org.openapitools.codegen.SupportingFile; | ||
|
||
import java.io.File; | ||
import java.util.List; | ||
|
||
public class ScalaSttpClientCodegen extends ScalaAkkaClientCodegen implements CodegenConfig { | ||
protected String mainPackage = "org.openapitools.client"; | ||
|
||
public ScalaSttpClientCodegen() { | ||
super(); | ||
} | ||
|
||
|
||
@Override | ||
public void processOpts() { | ||
super.processOpts(); | ||
if (additionalProperties.containsKey("mainPackage")) { | ||
setMainPackage((String) additionalProperties.get("mainPackage")); | ||
additionalProperties.replace("configKeyPath", this.configKeyPath); | ||
apiPackage = mainPackage + ".api"; | ||
modelPackage = mainPackage + ".model"; | ||
invokerPackage = mainPackage + ".core"; | ||
additionalProperties.put("apiPackage", apiPackage); | ||
additionalProperties.put("modelPackage", modelPackage); | ||
} | ||
|
||
if (!additionalProperties.containsKey("java8")) { | ||
additionalProperties.put("joda", "true"); | ||
} | ||
|
||
supportingFiles.clear(); | ||
supportingFiles.add(new SupportingFile("README.mustache", "", "README.md")); | ||
supportingFiles.add(new SupportingFile("build.sbt.mustache", "", "build.sbt")); | ||
final String invokerFolder = (sourceFolder + File.separator + invokerPackage).replace(".", File.separator); | ||
supportingFiles.add(new SupportingFile("requests.mustache", invokerFolder, "requests.scala")); | ||
supportingFiles.add(new SupportingFile("apiInvoker.mustache", invokerFolder, "ApiInvoker.scala")); | ||
final String apiFolder = (sourceFolder + File.separator + apiPackage).replace(".", File.separator); | ||
supportingFiles.add(new SupportingFile("enumsSerializers.mustache", apiFolder, "EnumsSerializers.scala")); | ||
supportingFiles.add(new SupportingFile("serializers.mustache", invokerFolder, "Serializers.scala")); | ||
} | ||
|
||
@Override | ||
public String getName() { | ||
return "scala-sttp"; | ||
} | ||
|
||
@Override | ||
public String getHelp() { | ||
return "Generates a Scala client library base on Sttp."; | ||
} | ||
|
||
@Override | ||
public String encodePath(String input) { | ||
String result = super.encodePath(input); | ||
return result.replace("{","${"); | ||
} | ||
|
||
@Override | ||
public CodegenOperation fromOperation(String path, | ||
String httpMethod, | ||
Operation operation, | ||
List<Server> servers) { | ||
CodegenOperation op = super.fromOperation(path, httpMethod, operation, servers); | ||
op.path = encodePath(path); | ||
return op; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.