diff --git a/.github/workflows/samples-scala-jdk8.yaml b/.github/workflows/samples-scala-jdk8.yaml deleted file mode 100644 index 21cfb3eadca5..000000000000 --- a/.github/workflows/samples-scala-jdk8.yaml +++ /dev/null @@ -1,38 +0,0 @@ -name: Samples Scala/sbt (JDK8) - -on: - push: - paths: - - 'samples/server/petstore/scala-finch/**' - pull_request: - paths: - - 'samples/server/petstore/scala-finch/**' -jobs: - build: - name: Build scala-finch servers - runs-on: ubuntu-latest - strategy: - fail-fast: false - matrix: - sample: - # servers - - samples/server/petstore/scala-finch # cannot be tested with jdk11 - steps: - - uses: actions/checkout@v5 - - uses: actions/setup-java@v5 - with: - distribution: 'temurin' - java-version: 8 - - name: Setup sbt launcher - uses: sbt/setup-sbt@v1 - - name: Cache maven dependencies - uses: actions/cache@v5 - env: - cache-name: maven-repository - with: - path: | - ~/.ivy2 - key: ${{ runner.os }}-${{ github.job }}-${{ env.cache-name }}-${{ hashFiles('**/build.sbt') }} - - name: Build and test - working-directory: ${{ matrix.sample }} - run: sbt -v +test diff --git a/bin/configs/unmaintained/scala-finch.yaml b/bin/configs/unmaintained/scala-finch.yaml deleted file mode 100644 index 4ec9a16b9f50..000000000000 --- a/bin/configs/unmaintained/scala-finch.yaml +++ /dev/null @@ -1,6 +0,0 @@ -systemProperties: - skipFormModel: "true" -generatorName: scala-finch -outputDir: samples/server/petstore/scala-finch -inputSpec: modules/openapi-generator/src/test/resources/3_0/petstore.yaml -templateDir: modules/openapi-generator/src/main/resources/scala-finch diff --git a/docs/generators.md b/docs/generators.md index efd633f162ef..d9d5bafcaf3c 100644 --- a/docs/generators.md +++ b/docs/generators.md @@ -151,7 +151,7 @@ The following generators are available: * [rust-server-deprecated](generators/rust-server-deprecated.md) * [scala-akka-http-server (beta)](generators/scala-akka-http-server.md) * [scala-cask](generators/scala-cask.md) -* [scala-finch](generators/scala-finch.md) +* [scala-finch-deprecated (deprecated)](generators/scala-finch-deprecated.md) * [scala-http4s-server](generators/scala-http4s-server.md) * [scala-lagom-server-deprecated (deprecated)](generators/scala-lagom-server-deprecated.md) * [scala-play-server](generators/scala-play-server.md) diff --git a/docs/generators/scala-finch.md b/docs/generators/scala-finch-deprecated.md similarity index 94% rename from docs/generators/scala-finch.md rename to docs/generators/scala-finch-deprecated.md index 35aae393a08d..6b13b9c631b4 100644 --- a/docs/generators/scala-finch.md +++ b/docs/generators/scala-finch-deprecated.md @@ -1,17 +1,17 @@ --- -title: Documentation for the scala-finch Generator +title: Documentation for the scala-finch-deprecated Generator --- ## METADATA | Property | Value | Notes | | -------- | ----- | ----- | -| generator name | scala-finch | pass this to the generate command after -g | -| generator stability | STABLE | | +| generator name | scala-finch-deprecated | pass this to the generate command after -g | +| generator stability | DEPRECATED | | | generator type | SERVER | | | generator language | Scala | | | generator default templating engine | mustache | | -| helpTxt | Generates a Scala server application with Finch. | | +| helpTxt | Generates a Scala server application with Finch. IMPORTANT: this generator has been deprecated. | | ## CONFIG OPTIONS These options may be applied as additional-properties (cli) or configOptions (plugins). Refer to [configuration docs](https://openapi-generator.tech/docs/configuration) for more details. diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaFinchServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaFinchServerCodegen.java index 85be7d98c486..bd09a19a0e74 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaFinchServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaFinchServerCodegen.java @@ -20,6 +20,8 @@ import io.swagger.v3.oas.models.media.Schema; import lombok.Setter; import org.openapitools.codegen.*; +import org.openapitools.codegen.meta.GeneratorMetadata; +import org.openapitools.codegen.meta.Stability; import org.openapitools.codegen.meta.features.*; import org.openapitools.codegen.model.ModelMap; import org.openapitools.codegen.model.OperationMap; @@ -43,6 +45,10 @@ public class ScalaFinchServerCodegen extends DefaultCodegen implements CodegenCo public ScalaFinchServerCodegen() { super(); + generatorMetadata = GeneratorMetadata.newBuilder(generatorMetadata) + .stability(Stability.DEPRECATED) + .build(); + modifyFeatureSet(features -> features .includeDocumentationFeatures(DocumentationFeature.Readme) .wireFormatFeatures(EnumSet.of(WireFormatFeature.JSON, WireFormatFeature.XML, WireFormatFeature.Custom)) @@ -209,12 +215,12 @@ public CodegenType getTag() { @Override public String getName() { - return "scala-finch"; + return "scala-finch-deprecated"; } @Override public String getHelp() { - return "Generates a Scala server application with Finch."; + return "Generates a Scala server application with Finch. IMPORTANT: this generator has been deprecated."; } @Override diff --git a/samples/server/petstore/scala-finch/.openapi-generator-ignore b/samples/server/petstore/scala-finch/.openapi-generator-ignore deleted file mode 100644 index 7484ee590a38..000000000000 --- a/samples/server/petstore/scala-finch/.openapi-generator-ignore +++ /dev/null @@ -1,23 +0,0 @@ -# OpenAPI Generator Ignore -# Generated by openapi-generator https://github.com/openapitools/openapi-generator - -# 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 OpenAPI Generator 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 diff --git a/samples/server/petstore/scala-finch/.openapi-generator/FILES b/samples/server/petstore/scala-finch/.openapi-generator/FILES deleted file mode 100644 index cce55c6e8e8e..000000000000 --- a/samples/server/petstore/scala-finch/.openapi-generator/FILES +++ /dev/null @@ -1,19 +0,0 @@ -.scalafmt.conf -README.md -build.sbt -project/build.properties -project/plugins.sbt -sbt -src/main/scala/DataAccessor.scala -src/main/scala/Server.scala -src/main/scala/endpoint.scala -src/main/scala/errors.scala -src/main/scala/org/openapitools/apis/PetApi.scala -src/main/scala/org/openapitools/apis/StoreApi.scala -src/main/scala/org/openapitools/apis/UserApi.scala -src/main/scala/org/openapitools/models/ApiResponse.scala -src/main/scala/org/openapitools/models/Category.scala -src/main/scala/org/openapitools/models/Order.scala -src/main/scala/org/openapitools/models/Pet.scala -src/main/scala/org/openapitools/models/Tag.scala -src/main/scala/org/openapitools/models/User.scala diff --git a/samples/server/petstore/scala-finch/.openapi-generator/VERSION b/samples/server/petstore/scala-finch/.openapi-generator/VERSION deleted file mode 100644 index f7962df3e243..000000000000 --- a/samples/server/petstore/scala-finch/.openapi-generator/VERSION +++ /dev/null @@ -1 +0,0 @@ -7.22.0-SNAPSHOT diff --git a/samples/server/petstore/scala-finch/.scalafmt.conf b/samples/server/petstore/scala-finch/.scalafmt.conf deleted file mode 100644 index fa3c57ad8c66..000000000000 --- a/samples/server/petstore/scala-finch/.scalafmt.conf +++ /dev/null @@ -1,58 +0,0 @@ -version=3.10.6 -runner.dialect = scala212 -project { - git = false - excludeFilters = [ - scalafmt-benchmarks/src/resources, - sbt-test - bin/issue - ] - layout = StandardConvention -} -align { - preset = none - stripMargin = true -} -binPack { - importSelectors = fold -} -newlines { - avoidForSimpleOverflow = all - ignoreInSyntax = false - source = fold -} -rewrite { - rules = [ - AvoidInfix, - Imports, - RedundantBraces, - RedundantParens, - SortModifiers, - ] - imports { - selectors = fold - removeRedundantSelectors = true - sort = ascii - groups = [ - ["org\\.scalafmt\\..*"], - ["scala\\.meta\\..*", "org\\.scalameta\\..*"], - ["sbt\\..*"], - ["java.?\\..*"], - ["scala\\..*"], - ["org\\..*"], - ["com\\..*"], - ] - } - redundantBraces { - preset = all - oneStatApply { - parensMaxSpan = 300 - bracesMinSpan = 300 - } - } - redundantParens { - preset = all - } - sortModifiers.preset = styleGuide - trailingCommas.style = "always" -} diff --git a/samples/server/petstore/scala-finch/README.md b/samples/server/petstore/scala-finch/README.md deleted file mode 100644 index 099ac4d904e4..000000000000 --- a/samples/server/petstore/scala-finch/README.md +++ /dev/null @@ -1,12 +0,0 @@ -# OpenAPI generated server - -## Overview -This server was generated by the [OpenAPI Generator](https://openapi-generator.tech) project. By using the -[OpenAPI-Spec](https://openapis.org) from a remote server, you can easily generate a server stub. This -is an example of building a OpenAPI-enabled scalatra server. - -This example uses the [finch](http://github.com/finagle/finch/) framework. - -### After generation - -Run `scalafix RemoveUnusedImports` to cleanup unused imports. diff --git a/samples/server/petstore/scala-finch/build.sbt b/samples/server/petstore/scala-finch/build.sbt deleted file mode 100644 index de479d2ca1fa..000000000000 --- a/samples/server/petstore/scala-finch/build.sbt +++ /dev/null @@ -1,66 +0,0 @@ -scalariformSettings - -organization := "org.openapitools" - -name := "finch-sample" - -version := "0.1.0-SNAPSHOT" - -scalaVersion := "2.12.3" - -resolvers += Resolver.sonatypeRepo("snapshots") - -resolvers += "TM" at "https://maven.twttr.com" - -resolvers += "Local Maven Repository" at "file://"+Path.userHome.absolutePath+"/.m2/repository" - -resolvers += "Sonatype OSS Snapshots" at "https://oss.sonatype.org/content/repositories/snapshots/" - -resolvers += "Sonatype OSS Releases" at "https://oss.sonatype.org/content/repositories/releases/" - -Defaults.itSettings - -lazy val circeVersion = "0.8.0" -lazy val finagleVersion = "6.45.0" -lazy val finchVersion = "0.15.1" -lazy val scalaTestVersion = "3.0.0" - -scalacOptions ++= Seq( - "-deprecation", - "-encoding", "UTF-8", - "-feature", - "-language:existentials", - "-language:higherKinds", - "-language:implicitConversions", - "-unchecked", - "-Yno-adapted-args", - "-Ywarn-dead-code", - "-Ywarn-numeric-widen", - "-Xfuture", - "-Xlint", - "-Ywarn-unused-import", - "-language:postfixOps" -) - -lazy val `it-config-sbt-project` = project.in(file(".")).configs(IntegrationTest) - -libraryDependencies ++= Seq( - "com.github.finagle" %% "finch-core" % finchVersion, - "com.github.finagle" %% "finch-circe" % finchVersion, - "io.circe" %% "circe-generic" % circeVersion, - "io.circe" %% "circe-java8" % circeVersion, - "com.twitter" %% "util-core" % finagleVersion, - "com.github.finagle" %% "finch-test" % finchVersion % "test", - "org.scalacheck" %% "scalacheck" % "1.13.4" % "test", - "org.scalatest" %% "scalatest" % scalaTestVersion % "test" -) - -assemblyMergeStrategy in assembly := { - case "application.conf" => MergeStrategy.concat - case "about.html" => MergeStrategy.discard - case x => - val oldStrategy = (assemblyMergeStrategy in assembly).value - oldStrategy(x) -} - -addCompilerPlugin("org.scalamacros" % "paradise" % "2.1.0" cross CrossVersion.full) diff --git a/samples/server/petstore/scala-finch/pom.xml b/samples/server/petstore/scala-finch/pom.xml deleted file mode 100644 index 5e1cad23c528..000000000000 --- a/samples/server/petstore/scala-finch/pom.xml +++ /dev/null @@ -1,34 +0,0 @@ - - 4.0.0 - org.openapitools - finch-server - pom - 1.0-SNAPSHOT - Finch server - - - - org.codehaus.mojo - exec-maven-plugin - 1.5.0 - - - sbt-test - integration-test - - exec - - - sbt - - -ivy - ${user.home}/.ivy2 - test - - - - - - - - diff --git a/samples/server/petstore/scala-finch/project/build.properties b/samples/server/petstore/scala-finch/project/build.properties deleted file mode 100644 index 27e88aa115af..000000000000 --- a/samples/server/petstore/scala-finch/project/build.properties +++ /dev/null @@ -1 +0,0 @@ -sbt.version=0.13.13 diff --git a/samples/server/petstore/scala-finch/project/plugins.sbt b/samples/server/petstore/scala-finch/project/plugins.sbt deleted file mode 100644 index 3b4ef35c4f66..000000000000 --- a/samples/server/petstore/scala-finch/project/plugins.sbt +++ /dev/null @@ -1,9 +0,0 @@ -resolvers += Resolver.typesafeRepo("releases") - -addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.3") - -addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % "0.5.3") - -addSbtPlugin("org.scalariform" % "sbt-scalariform" % "1.6.0") - -addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.5.6") diff --git a/samples/server/petstore/scala-finch/sbt b/samples/server/petstore/scala-finch/sbt deleted file mode 100644 index 08e58821219c..000000000000 --- a/samples/server/petstore/scala-finch/sbt +++ /dev/null @@ -1,525 +0,0 @@ -#!/usr/bin/env bash -# -# A more capable sbt runner, coincidentally also called sbt. -# Author: Paul Phillips - -# todo - make this dynamic -declare -r sbt_release_version="0.13.6" -declare -r sbt_unreleased_version="0.13.6" -declare -r buildProps="project/build.properties" - -declare sbt_jar sbt_dir sbt_create sbt_version -declare scala_version sbt_explicit_version -declare verbose noshare batch trace_level log_level -declare sbt_saved_stty debugUs - -echoerr () { echo >&2 "$@"; } -vlog () { [[ -n "$verbose" ]] && echoerr "$@"; } - -# spaces are possible, e.g. sbt.version = 0.13.0 -build_props_sbt () { - [[ -r "$buildProps" ]] && \ - grep '^sbt\.version' "$buildProps" | tr '=' ' ' | awk '{ print $2; }' -} - -update_build_props_sbt () { - local ver="$1" - local old="$(build_props_sbt)" - - [[ -r "$buildProps" ]] && [[ "$ver" != "$old" ]] && { - perl -pi -e "s/^sbt\.version\b.*\$/sbt.version=${ver}/" "$buildProps" - grep -q '^sbt.version[ =]' "$buildProps" || printf "\nsbt.version=%s\n" "$ver" >> "$buildProps" - - vlog "!!!" - vlog "!!! Updated file $buildProps setting sbt.version to: $ver" - vlog "!!! Previous value was: $old" - vlog "!!!" - } -} - -set_sbt_version () { - sbt_version="${sbt_explicit_version:-$(build_props_sbt)}" - [[ -n "$sbt_version" ]] || sbt_version=$sbt_release_version - export sbt_version -} - -# restore stty settings (echo in particular) -onSbtRunnerExit() { - [[ -n "$sbt_saved_stty" ]] || return - vlog "" - vlog "restoring stty: $sbt_saved_stty" - stty "$sbt_saved_stty" - unset sbt_saved_stty -} - -# save stty and trap exit, to ensure echo is reenabled if we are interrupted. -trap onSbtRunnerExit EXIT -sbt_saved_stty="$(stty -g 2>/dev/null)" -vlog "Saved stty: $sbt_saved_stty" - -# this seems to cover the bases on OSX, and someone will -# have to tell me about the others. -get_script_path () { - local path="$1" - [[ -L "$path" ]] || { echo "$path" ; return; } - - local target="$(readlink "$path")" - if [[ "${target:0:1}" == "/" ]]; then - echo "$target" - else - echo "${path%/*}/$target" - fi -} - -die() { - echo "Aborting: $@" - exit 1 -} - -make_url () { - version="$1" - - case "$version" in - 0.7.*) echo "http://simple-build-tool.googlecode.com/files/sbt-launch-0.7.7.jar" ;; - 0.10.* ) echo "$sbt_launch_repo/org.scala-tools.sbt/sbt-launch/$version/sbt-launch.jar" ;; - 0.11.[12]) echo "$sbt_launch_repo/org.scala-tools.sbt/sbt-launch/$version/sbt-launch.jar" ;; - *) echo "$sbt_launch_repo/org.scala-sbt/sbt-launch/$version/sbt-launch.jar" ;; - esac -} - -init_default_option_file () { - local overriding_var="${!1}" - local default_file="$2" - if [[ ! -r "$default_file" && "$overriding_var" =~ ^@(.*)$ ]]; then - local envvar_file="${BASH_REMATCH[1]}" - if [[ -r "$envvar_file" ]]; then - default_file="$envvar_file" - fi - fi - echo "$default_file" -} - -declare -r cms_opts="-XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC" -declare -r jit_opts="-XX:ReservedCodeCacheSize=256m -XX:+TieredCompilation" -declare -r default_jvm_opts_common="-Xms512m -Xmx1536m -Xss2m $jit_opts $cms_opts" -declare -r noshare_opts="-Dsbt.global.base=project/.sbtboot -Dsbt.boot.directory=project/.boot -Dsbt.ivy.home=project/.ivy" -declare -r latest_28="2.8.2" -declare -r latest_29="2.9.3" -declare -r latest_210="2.10.4" -declare -r latest_211="2.11.2" - -declare -r script_path="$(get_script_path "$BASH_SOURCE")" -declare -r script_name="${script_path##*/}" - -# some non-read-onlies set with defaults -declare java_cmd="java" -declare sbt_opts_file="$(init_default_option_file SBT_OPTS .sbtopts)" -declare jvm_opts_file="$(init_default_option_file JVM_OPTS .jvmopts)" -declare sbt_launch_repo="http://typesafe.artifactoryonline.com/typesafe/ivy-releases" - -# pull -J and -D options to give to java. -declare -a residual_args -declare -a java_args -declare -a scalac_args -declare -a sbt_commands - -# args to jvm/sbt via files or environment variables -declare -a extra_jvm_opts extra_sbt_opts - -# if set, use JAVA_HOME over java found in path -[[ -e "$JAVA_HOME/bin/java" ]] && java_cmd="$JAVA_HOME/bin/java" - -# directory to store sbt launchers -declare sbt_launch_dir="$HOME/.sbt/launchers" -[[ -d "$sbt_launch_dir" ]] || mkdir -p "$sbt_launch_dir" -[[ -w "$sbt_launch_dir" ]] || sbt_launch_dir="$(mktemp -d -t sbt_extras_launchers.XXXXXX)" - -java_version () { - local version=$("$java_cmd" -version 2>&1 | grep -e 'java version' | awk '{ print $3 }' | tr -d \") - vlog "Detected Java version: $version" - echo "${version:2:1}" -} - -# MaxPermSize critical on pre-8 jvms but incurs noisy warning on 8+ -default_jvm_opts () { - local v="$(java_version)" - if [[ $v -ge 8 ]]; then - echo "$default_jvm_opts_common" - else - echo "-XX:MaxPermSize=384m $default_jvm_opts_common" - fi -} - -build_props_scala () { - if [[ -r "$buildProps" ]]; then - versionLine="$(grep '^build.scala.versions' "$buildProps")" - versionString="${versionLine##build.scala.versions=}" - echo "${versionString%% .*}" - fi -} - -execRunner () { - # print the arguments one to a line, quoting any containing spaces - vlog "# Executing command line:" && { - for arg; do - if [[ -n "$arg" ]]; then - if printf "%s\n" "$arg" | grep -q ' '; then - printf >&2 "\"%s\"\n" "$arg" - else - printf >&2 "%s\n" "$arg" - fi - fi - done - vlog "" - } - - [[ -n "$batch" ]] && exec /dev/null; then - curl --fail --silent "$url" --output "$jar" - elif which wget >/dev/null; then - wget --quiet -O "$jar" "$url" - fi - } && [[ -r "$jar" ]] -} - -acquire_sbt_jar () { - sbt_url="$(jar_url "$sbt_version")" - sbt_jar="$(jar_file "$sbt_version")" - - [[ -r "$sbt_jar" ]] || download_url "$sbt_url" "$sbt_jar" -} - -usage () { - cat < display stack traces with a max of frames (default: -1, traces suppressed) - -debug-inc enable debugging log for the incremental compiler - -no-colors disable ANSI color codes - -sbt-create start sbt even if current directory contains no sbt project - -sbt-dir path to global settings/plugins directory (default: ~/.sbt/) - -sbt-boot path to shared boot directory (default: ~/.sbt/boot in 0.11+) - -ivy path to local Ivy repository (default: ~/.ivy2) - -no-share use all local caches; no sharing - -offline put sbt in offline mode - -jvm-debug Turn on JVM debugging, open at the given port. - -batch Disable interactive mode - -prompt Set the sbt prompt; in expr, 's' is the State and 'e' is Extracted - - # sbt version (default: sbt.version from $buildProps if present, otherwise $sbt_release_version) - -sbt-force-latest force the use of the latest release of sbt: $sbt_release_version - -sbt-version use the specified version of sbt (default: $sbt_release_version) - -sbt-dev use the latest pre-release version of sbt: $sbt_unreleased_version - -sbt-jar use the specified jar as the sbt launcher - -sbt-launch-dir directory to hold sbt launchers (default: ~/.sbt/launchers) - -sbt-launch-repo repo url for downloading sbt launcher jar (default: $sbt_launch_repo) - - # scala version (default: as chosen by sbt) - -28 use $latest_28 - -29 use $latest_29 - -210 use $latest_210 - -211 use $latest_211 - -scala-home use the scala build at the specified directory - -scala-version use the specified version of scala - -binary-version use the specified scala version when searching for dependencies - - # java version (default: java from PATH, currently $(java -version 2>&1 | grep version)) - -java-home alternate JAVA_HOME - - # passing options to the jvm - note it does NOT use JAVA_OPTS due to pollution - # The default set is used if JVM_OPTS is unset and no -jvm-opts file is found - $(default_jvm_opts) - JVM_OPTS environment variable holding either the jvm args directly, or - the reference to a file containing jvm args if given path is prepended by '@' (e.g. '@/etc/jvmopts') - Note: "@"-file is overridden by local '.jvmopts' or '-jvm-opts' argument. - -jvm-opts file containing jvm args (if not given, .jvmopts in project root is used if present) - -Dkey=val pass -Dkey=val directly to the jvm - -J-X pass option -X directly to the jvm (-J is stripped) - - # passing options to sbt, OR to this runner - SBT_OPTS environment variable holding either the sbt args directly, or - the reference to a file containing sbt args if given path is prepended by '@' (e.g. '@/etc/sbtopts') - Note: "@"-file is overridden by local '.sbtopts' or '-sbt-opts' argument. - -sbt-opts file containing sbt args (if not given, .sbtopts in project root is used if present) - -S-X add -X to sbt's scalacOptions (-S is stripped) -EOM -} - -addJava () { - vlog "[addJava] arg = '$1'" - java_args=( "${java_args[@]}" "$1" ) -} -addSbt () { - vlog "[addSbt] arg = '$1'" - sbt_commands=( "${sbt_commands[@]}" "$1" ) -} -setThisBuild () { - vlog "[addBuild] args = '$@'" - local key="$1" && shift - addSbt "set $key in ThisBuild := $@" -} - -addScalac () { - vlog "[addScalac] arg = '$1'" - scalac_args=( "${scalac_args[@]}" "$1" ) -} -addResidual () { - vlog "[residual] arg = '$1'" - residual_args=( "${residual_args[@]}" "$1" ) -} -addResolver () { - addSbt "set resolvers += $1" -} -addDebugger () { - addJava "-Xdebug" - addJava "-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=$1" -} -setScalaVersion () { - [[ "$1" == *"-SNAPSHOT" ]] && addResolver 'Resolver.sonatypeRepo("snapshots")' - addSbt "++ $1" -} - -process_args () -{ - require_arg () { - local type="$1" - local opt="$2" - local arg="$3" - - if [[ -z "$arg" ]] || [[ "${arg:0:1}" == "-" ]]; then - die "$opt requires <$type> argument" - fi - } - while [[ $# -gt 0 ]]; do - case "$1" in - -h|-help) usage; exit 1 ;; - -v) verbose=true && shift ;; - -d) addSbt "--debug" && shift ;; - -w) addSbt "--warn" && shift ;; - -q) addSbt "--error" && shift ;; - -x) debugUs=true && shift ;; - -trace) require_arg integer "$1" "$2" && trace_level="$2" && shift 2 ;; - -ivy) require_arg path "$1" "$2" && addJava "-Dsbt.ivy.home=$2" && shift 2 ;; - -no-colors) addJava "-Dsbt.log.noformat=true" && shift ;; - -no-share) noshare=true && shift ;; - -sbt-boot) require_arg path "$1" "$2" && addJava "-Dsbt.boot.directory=$2" && shift 2 ;; - -sbt-dir) require_arg path "$1" "$2" && sbt_dir="$2" && shift 2 ;; - -debug-inc) addJava "-Dxsbt.inc.debug=true" && shift ;; - -offline) addSbt "set offline := true" && shift ;; - -jvm-debug) require_arg port "$1" "$2" && addDebugger "$2" && shift 2 ;; - -batch) batch=true && shift ;; - -prompt) require_arg "expr" "$1" "$2" && setThisBuild shellPrompt "(s => { val e = Project.extract(s) ; $2 })" && shift 2 ;; - - -sbt-create) sbt_create=true && shift ;; - -sbt-jar) require_arg path "$1" "$2" && sbt_jar="$2" && shift 2 ;; - -sbt-version) require_arg version "$1" "$2" && sbt_explicit_version="$2" && shift 2 ;; - -sbt-force-latest) sbt_explicit_version="$sbt_release_version" && shift ;; - -sbt-dev) sbt_explicit_version="$sbt_unreleased_version" && shift ;; - -sbt-launch-dir) require_arg path "$1" "$2" && sbt_launch_dir="$2" && shift 2 ;; - -sbt-launch-repo) require_arg path "$1" "$2" && sbt_launch_repo="$2" && shift 2 ;; - -scala-version) require_arg version "$1" "$2" && setScalaVersion "$2" && shift 2 ;; - -binary-version) require_arg version "$1" "$2" && setThisBuild scalaBinaryVersion "\"$2\"" && shift 2 ;; - -scala-home) require_arg path "$1" "$2" && setThisBuild scalaHome "Some(file(\"$2\"))" && shift 2 ;; - -java-home) require_arg path "$1" "$2" && java_cmd="$2/bin/java" && shift 2 ;; - -sbt-opts) require_arg path "$1" "$2" && sbt_opts_file="$2" && shift 2 ;; - -jvm-opts) require_arg path "$1" "$2" && jvm_opts_file="$2" && shift 2 ;; - - -D*) addJava "$1" && shift ;; - -J*) addJava "${1:2}" && shift ;; - -S*) addScalac "${1:2}" && shift ;; - -28) setScalaVersion "$latest_28" && shift ;; - -29) setScalaVersion "$latest_29" && shift ;; - -210) setScalaVersion "$latest_210" && shift ;; - -211) setScalaVersion "$latest_211" && shift ;; - - *) addResidual "$1" && shift ;; - esac - done -} - -# process the direct command line arguments -process_args "$@" - -# skip #-styled comments and blank lines -readConfigFile() { - while read line; do - [[ $line =~ ^# ]] || [[ -z $line ]] || echo "$line" - done < "$1" -} - -# if there are file/environment sbt_opts, process again so we -# can supply args to this runner -if [[ -r "$sbt_opts_file" ]]; then - vlog "Using sbt options defined in file $sbt_opts_file" - while read opt; do extra_sbt_opts+=("$opt"); done < <(readConfigFile "$sbt_opts_file") -elif [[ -n "$SBT_OPTS" && ! ("$SBT_OPTS" =~ ^@.*) ]]; then - vlog "Using sbt options defined in variable \$SBT_OPTS" - extra_sbt_opts=( $SBT_OPTS ) -else - vlog "No extra sbt options have been defined" -fi - -[[ -n "${extra_sbt_opts[*]}" ]] && process_args "${extra_sbt_opts[@]}" - -# reset "$@" to the residual args -set -- "${residual_args[@]}" -argumentCount=$# - -# set sbt version -set_sbt_version - -# only exists in 0.12+ -setTraceLevel() { - case "$sbt_version" in - "0.7."* | "0.10."* | "0.11."* ) echoerr "Cannot set trace level in sbt version $sbt_version" ;; - *) setThisBuild traceLevel $trace_level ;; - esac -} - -# set scalacOptions if we were given any -S opts -[[ ${#scalac_args[@]} -eq 0 ]] || addSbt "set scalacOptions in ThisBuild += \"${scalac_args[@]}\"" - -# Update build.properties on disk to set explicit version - sbt gives us no choice -[[ -n "$sbt_explicit_version" ]] && update_build_props_sbt "$sbt_explicit_version" -vlog "Detected sbt version $sbt_version" - -[[ -n "$scala_version" ]] && vlog "Overriding scala version to $scala_version" - -# no args - alert them there's stuff in here -(( argumentCount > 0 )) || { - vlog "Starting $script_name: invoke with -help for other options" - residual_args=( shell ) -} - -# verify this is an sbt dir or -create was given -[[ -r ./build.sbt || -d ./project || -n "$sbt_create" ]] || { - cat < apis -> operations = TODO error - private object TODO extends CommonError("Not implemented") { - def message = "Not implemented" - } - - /** - * - * @return A Pet - */ - def Pet_addPet(pet: Pet): Either[CommonError,Pet] = Left(TODO) - - /** - * - * @return A Unit - */ - def Pet_deletePet(petId: Long, apiKey: Option[String]): Either[CommonError,Unit] = Left(TODO) - - /** - * - * @return A Seq[Pet] - */ - def Pet_findPetsByStatus(status: Seq[String]): Either[CommonError,Seq[Pet]] = Left(TODO) - - /** - * - * @return A Seq[Pet] - */ - def Pet_findPetsByTags(tags: Seq[String]): Either[CommonError,Seq[Pet]] = Left(TODO) - - /** - * - * @return A Pet - */ - def Pet_getPetById(petId: Long, authParamapi_key: String): Either[CommonError,Pet] = Left(TODO) - - /** - * - * @return A Pet - */ - def Pet_updatePet(pet: Pet): Either[CommonError,Pet] = Left(TODO) - - /** - * - * @return A Unit - */ - def Pet_updatePetWithForm(petId: Long, name: Option[String], status: Option[String]): Either[CommonError,Unit] = Left(TODO) - - /** - * - * @return A ApiResponse - */ - def Pet_uploadFile(petId: Long, additionalMetadata: Option[String], file: FileUpload): Either[CommonError,ApiResponse] = Left(TODO) - - /** - * - * @return A Unit - */ - def Store_deleteOrder(orderId: String): Either[CommonError,Unit] = Left(TODO) - - /** - * - * @return A Map[String, Int] - */ - def Store_getInventory(authParamapi_key: String): Either[CommonError,Map[String, Int]] = Left(TODO) - - /** - * - * @return A Order - */ - def Store_getOrderById(orderId: Long): Either[CommonError,Order] = Left(TODO) - - /** - * - * @return A Order - */ - def Store_placeOrder(order: Order): Either[CommonError,Order] = Left(TODO) - - /** - * - * @return A Unit - */ - def User_createUser(user: User, authParamapi_key: String): Either[CommonError,Unit] = Left(TODO) - - /** - * - * @return A Unit - */ - def User_createUsersWithArrayInput(user: Seq[User], authParamapi_key: String): Either[CommonError,Unit] = Left(TODO) - - /** - * - * @return A Unit - */ - def User_createUsersWithListInput(user: Seq[User], authParamapi_key: String): Either[CommonError,Unit] = Left(TODO) - - /** - * - * @return A Unit - */ - def User_deleteUser(username: String, authParamapi_key: String): Either[CommonError,Unit] = Left(TODO) - - /** - * - * @return A User - */ - def User_getUserByName(username: String): Either[CommonError,User] = Left(TODO) - - /** - * - * @return A String - */ - def User_loginUser(username: String, password: String): Either[CommonError,String] = Left(TODO) - - /** - * - * @return A Unit - */ - def User_logoutUser(authParamapi_key: String): Either[CommonError,Unit] = Left(TODO) - - /** - * - * @return A Unit - */ - def User_updateUser(username: String, user: User, authParamapi_key: String): Either[CommonError,Unit] = Left(TODO) - -} \ No newline at end of file diff --git a/samples/server/petstore/scala-finch/src/main/scala/Server.scala b/samples/server/petstore/scala-finch/src/main/scala/Server.scala deleted file mode 100644 index 4c71eeef5318..000000000000 --- a/samples/server/petstore/scala-finch/src/main/scala/Server.scala +++ /dev/null @@ -1,35 +0,0 @@ -package org.openapitools - -import io.finch._ -import io.finch.circe._ -import io.circe.{Decoder, ObjectEncoder} -import io.circe.generic.auto._ -import io.circe.generic.semiauto -import io.circe.generic.semiauto._ -import io.circe.java8.time._ -import com.twitter.finagle.Http -import com.twitter.finagle.util.LoadService -import com.twitter.util.{Await, Future} - - -class Server { - - // Loads implementation defined in resources/META-INF/services/org.openapitools.DataAccessor - val impls: Seq[DataAccessor] = LoadService[DataAccessor]() - val db = if (impls.isEmpty) new DataAccessor { } else impls.head - - val service = endpoint.makeService(db) - - val server = Http.serve(":8080", service) //creates service - - def close(): Future[Unit] = { - Await.ready(server.close()) - } -} - -/** - * Launches the API service when the system is ready. - */ -object Server extends Server with App { - Await.ready(server) -} diff --git a/samples/server/petstore/scala-finch/src/main/scala/endpoint.scala b/samples/server/petstore/scala-finch/src/main/scala/endpoint.scala deleted file mode 100644 index 280a5492e88a..000000000000 --- a/samples/server/petstore/scala-finch/src/main/scala/endpoint.scala +++ /dev/null @@ -1,48 +0,0 @@ -package org.openapitools - -import com.twitter.finagle.Service -import com.twitter.finagle.http.{Request, Response} -import com.twitter.finagle.http.exp.Multipart.FileUpload -import com.twitter.util.Future -import io.finch._, items._ -import io.circe.{Encoder, Json} -import io.finch.circe._ -import io.circe.generic.semiauto._ - -import org.openapitools.apis._ - -/** - * Provides the paths and endpoints for all the API's public service methods. - */ -object endpoint { - - def errorToJson(e: Exception): Json = e match { - case Error.NotPresent(_) => - Json.obj("error" -> Json.fromString("something_not_present")) - case Error.NotParsed(_, _, _) => - Json.obj("error" -> Json.fromString("something_not_parsed")) - case Error.NotValid(_, _) => - Json.obj("error" -> Json.fromString("something_not_valid")) - case error: CommonError => - Json.obj("error" -> Json.fromString(error.message)) - } - - implicit val ee: Encoder[Exception] = Encoder.instance { - case e: Error => errorToJson(e) - case Errors(nel) => Json.arr(nel.toList.map(errorToJson): _*) - } - - /** - * Compiles together all the endpoints relating to public service methods. - * - * @return A service that contains all provided endpoints of the API. - */ - def makeService(da: DataAccessor): Service[Request, Response] = ( - PetApi.endpoints(da) :+: - StoreApi.endpoints(da) :+: - UserApi.endpoints(da) - ).handle({ - case e: CommonError => NotFound(e) - }).toService - -} \ No newline at end of file diff --git a/samples/server/petstore/scala-finch/src/main/scala/errors.scala b/samples/server/petstore/scala-finch/src/main/scala/errors.scala deleted file mode 100644 index 0d0985d33083..000000000000 --- a/samples/server/petstore/scala-finch/src/main/scala/errors.scala +++ /dev/null @@ -1,26 +0,0 @@ -package org.openapitools - -/** - * The parent error from which most API errors extend. Thrown whenever something in the api goes wrong. - */ -abstract class CommonError(msg: String) extends Exception(msg) { - def message: String -} - -/** - * Thrown when the object given is invalid - * @param message An error message - */ -case class InvalidInput(message: String) extends CommonError(message) - -/** - * Thrown when the given object is missing a unique ID. - * @param message An error message - */ -case class MissingIdentifier(message: String) extends CommonError(message) - -/** - * Thrown when the given record does not exist in the database. - * @param message An error message - */ -case class RecordNotFound(message: String) extends CommonError(message) diff --git a/samples/server/petstore/scala-finch/src/main/scala/org/openapitools/apis/PetApi.scala b/samples/server/petstore/scala-finch/src/main/scala/org/openapitools/apis/PetApi.scala deleted file mode 100644 index 56c3db10c1d9..000000000000 --- a/samples/server/petstore/scala-finch/src/main/scala/org/openapitools/apis/PetApi.scala +++ /dev/null @@ -1,192 +0,0 @@ -package org.openapitools.apis - -import java.io._ -import org.openapitools._ -import org.openapitools.models._ -import org.openapitools.models.ApiResponse -import java.io.File -import org.openapitools.models.Pet -import scala.collection.immutable.Seq -import io.finch.circe._ -import io.circe.generic.semiauto._ -import com.twitter.concurrent.AsyncStream -import com.twitter.finagle.Service -import com.twitter.finagle.Http -import com.twitter.finagle.http.{Request, Response} -import com.twitter.finagle.http.exp.Multipart.{FileUpload, InMemoryFileUpload, OnDiskFileUpload} -import com.twitter.util.Future -import com.twitter.io.Buf -import io.finch._, items._ -import java.io.File -import java.nio.file.Files -import java.time._ - -object PetApi { - /** - * Compiles all service endpoints. - * @return Bundled compilation of all service endpoints. - */ - def endpoints(da: DataAccessor) = - addPet(da) :+: - deletePet(da) :+: - findPetsByStatus(da) :+: - findPetsByTags(da) :+: - getPetById(da) :+: - updatePet(da) :+: - updatePetWithForm(da) :+: - uploadFile(da) - - - private def checkError(e: CommonError) = e match { - case InvalidInput(_) => BadRequest(e) - case MissingIdentifier(_) => BadRequest(e) - case RecordNotFound(_) => NotFound(e) - case _ => InternalServerError(e) - } - - implicit class StringOps(s: String) { - - import java.time.format.DateTimeFormatter - - lazy val localformatter: DateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd") - lazy val datetimeformatter: DateTimeFormatter = - DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ") - - def toLocalDateTime: LocalDateTime = LocalDateTime.parse(s,localformatter) - def toZonedDateTime: ZonedDateTime = ZonedDateTime.parse(s, datetimeformatter) - - } - - /** - * - * @return An endpoint representing a Pet - */ - private def addPet(da: DataAccessor): Endpoint[Pet] = - post("pet" :: jsonBody[Pet]) { (pet: Pet) => - da.Pet_addPet(pet) match { - case Left(error) => checkError(error) - case Right(data) => Ok(data) - } - } handle { - case e: Exception => BadRequest(e) - } - - /** - * - * @return An endpoint representing a Unit - */ - private def deletePet(da: DataAccessor): Endpoint[Unit] = - delete("pet" :: long :: headerOption("api_key")) { (petId: Long, apiKey: Option[String]) => - da.Pet_deletePet(petId, apiKey) match { - case Left(error) => checkError(error) - case Right(data) => Ok(data) - } - } handle { - case e: Exception => BadRequest(e) - } - - /** - * - * @return An endpoint representing a Seq[Pet] - */ - private def findPetsByStatus(da: DataAccessor): Endpoint[Seq[Pet]] = - get("pet" :: "findByStatus" :: params("status")) { (status: Seq[String]) => - da.Pet_findPetsByStatus(status) match { - case Left(error) => checkError(error) - case Right(data) => Ok(data) - } - } handle { - case e: Exception => BadRequest(e) - } - - /** - * - * @return An endpoint representing a Seq[Pet] - */ - private def findPetsByTags(da: DataAccessor): Endpoint[Seq[Pet]] = - get("pet" :: "findByTags" :: params("tags")) { (tags: Seq[String]) => - da.Pet_findPetsByTags(tags) match { - case Left(error) => checkError(error) - case Right(data) => Ok(data) - } - } handle { - case e: Exception => BadRequest(e) - } - - /** - * - * @return An endpoint representing a Pet - */ - private def getPetById(da: DataAccessor): Endpoint[Pet] = - get("pet" :: long :: header("api_key")) { (petId: Long, authParamapi_key: String) => - da.Pet_getPetById(petId, authParamapi_key) match { - case Left(error) => checkError(error) - case Right(data) => Ok(data) - } - } handle { - case e: Exception => BadRequest(e) - } - - /** - * - * @return An endpoint representing a Pet - */ - private def updatePet(da: DataAccessor): Endpoint[Pet] = - put("pet" :: jsonBody[Pet]) { (pet: Pet) => - da.Pet_updatePet(pet) match { - case Left(error) => checkError(error) - case Right(data) => Ok(data) - } - } handle { - case e: Exception => BadRequest(e) - } - - /** - * - * @return An endpoint representing a Unit - */ - private def updatePetWithForm(da: DataAccessor): Endpoint[Unit] = - post("pet" :: long :: paramOption("name") :: paramOption("status")) { (petId: Long, name: Option[String], status: Option[String]) => - da.Pet_updatePetWithForm(petId, name, status) match { - case Left(error) => checkError(error) - case Right(data) => Ok(data) - } - } handle { - case e: Exception => BadRequest(e) - } - - /** - * - * @return An endpoint representing a ApiResponse - */ - private def uploadFile(da: DataAccessor): Endpoint[ApiResponse] = - post("pet" :: long :: "uploadImage" :: paramOption("additionalMetadata") :: fileUpload("file")) { (petId: Long, additionalMetadata: Option[String], file: FileUpload) => - da.Pet_uploadFile(petId, additionalMetadata, file) match { - case Left(error) => checkError(error) - case Right(data) => Ok(data) - } - } handle { - case e: Exception => BadRequest(e) - } - - - implicit private def fileUploadToFile(fileUpload: FileUpload) : File = { - fileUpload match { - case upload: InMemoryFileUpload => - bytesToFile(Buf.ByteArray.Owned.extract(upload.content)) - case upload: OnDiskFileUpload => - upload.content - case _ => null - } - } - - private def bytesToFile(input: Array[Byte]): java.io.File = { - val file = Files.createTempFile("tmpPetApi", null).toFile - val output = new FileOutputStream(file) - output.write(input) - file - } - - // This assists in params(string) application (which must be Seq[A] in parameter list) when the param is used as a List[A] elsewhere. - implicit def seqList[A](input: Seq[A]): List[A] = input.toList -} diff --git a/samples/server/petstore/scala-finch/src/main/scala/org/openapitools/apis/StoreApi.scala b/samples/server/petstore/scala-finch/src/main/scala/org/openapitools/apis/StoreApi.scala deleted file mode 100644 index 3167cf7d76a2..000000000000 --- a/samples/server/petstore/scala-finch/src/main/scala/org/openapitools/apis/StoreApi.scala +++ /dev/null @@ -1,129 +0,0 @@ -package org.openapitools.apis - -import java.io._ -import org.openapitools._ -import org.openapitools.models._ -import org.openapitools.models.Order -import io.finch.circe._ -import io.circe.generic.semiauto._ -import com.twitter.concurrent.AsyncStream -import com.twitter.finagle.Service -import com.twitter.finagle.Http -import com.twitter.finagle.http.{Request, Response} -import com.twitter.finagle.http.exp.Multipart.{FileUpload, InMemoryFileUpload, OnDiskFileUpload} -import com.twitter.util.Future -import com.twitter.io.Buf -import io.finch._, items._ -import java.io.File -import java.nio.file.Files -import java.time._ - -object StoreApi { - /** - * Compiles all service endpoints. - * @return Bundled compilation of all service endpoints. - */ - def endpoints(da: DataAccessor) = - deleteOrder(da) :+: - getInventory(da) :+: - getOrderById(da) :+: - placeOrder(da) - - - private def checkError(e: CommonError) = e match { - case InvalidInput(_) => BadRequest(e) - case MissingIdentifier(_) => BadRequest(e) - case RecordNotFound(_) => NotFound(e) - case _ => InternalServerError(e) - } - - implicit class StringOps(s: String) { - - import java.time.format.DateTimeFormatter - - lazy val localformatter: DateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd") - lazy val datetimeformatter: DateTimeFormatter = - DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ") - - def toLocalDateTime: LocalDateTime = LocalDateTime.parse(s,localformatter) - def toZonedDateTime: ZonedDateTime = ZonedDateTime.parse(s, datetimeformatter) - - } - - /** - * - * @return An endpoint representing a Unit - */ - private def deleteOrder(da: DataAccessor): Endpoint[Unit] = - delete("store" :: "order" :: string) { (orderId: String) => - da.Store_deleteOrder(orderId) match { - case Left(error) => checkError(error) - case Right(data) => Ok(data) - } - } handle { - case e: Exception => BadRequest(e) - } - - /** - * - * @return An endpoint representing a Map[String, Int] - */ - private def getInventory(da: DataAccessor): Endpoint[Map[String, Int]] = - get("store" :: "inventory" :: header("api_key")) { (authParamapi_key: String) => - da.Store_getInventory(authParamapi_key) match { - case Left(error) => checkError(error) - case Right(data) => Ok(data) - } - } handle { - case e: Exception => BadRequest(e) - } - - /** - * - * @return An endpoint representing a Order - */ - private def getOrderById(da: DataAccessor): Endpoint[Order] = - get("store" :: "order" :: long) { (orderId: Long) => - da.Store_getOrderById(orderId) match { - case Left(error) => checkError(error) - case Right(data) => Ok(data) - } - } handle { - case e: Exception => BadRequest(e) - } - - /** - * - * @return An endpoint representing a Order - */ - private def placeOrder(da: DataAccessor): Endpoint[Order] = - post("store" :: "order" :: jsonBody[Order]) { (order: Order) => - da.Store_placeOrder(order) match { - case Left(error) => checkError(error) - case Right(data) => Ok(data) - } - } handle { - case e: Exception => BadRequest(e) - } - - - implicit private def fileUploadToFile(fileUpload: FileUpload) : File = { - fileUpload match { - case upload: InMemoryFileUpload => - bytesToFile(Buf.ByteArray.Owned.extract(upload.content)) - case upload: OnDiskFileUpload => - upload.content - case _ => null - } - } - - private def bytesToFile(input: Array[Byte]): java.io.File = { - val file = Files.createTempFile("tmpStoreApi", null).toFile - val output = new FileOutputStream(file) - output.write(input) - file - } - - // This assists in params(string) application (which must be Seq[A] in parameter list) when the param is used as a List[A] elsewhere. - implicit def seqList[A](input: Seq[A]): List[A] = input.toList -} diff --git a/samples/server/petstore/scala-finch/src/main/scala/org/openapitools/apis/UserApi.scala b/samples/server/petstore/scala-finch/src/main/scala/org/openapitools/apis/UserApi.scala deleted file mode 100644 index 356b98f91baa..000000000000 --- a/samples/server/petstore/scala-finch/src/main/scala/org/openapitools/apis/UserApi.scala +++ /dev/null @@ -1,191 +0,0 @@ -package org.openapitools.apis - -import java.io._ -import org.openapitools._ -import org.openapitools.models._ -import scala.collection.immutable.Seq -import org.openapitools.models.User -import java.time.ZonedDateTime -import io.finch.circe._ -import io.circe.generic.semiauto._ -import com.twitter.concurrent.AsyncStream -import com.twitter.finagle.Service -import com.twitter.finagle.Http -import com.twitter.finagle.http.{Request, Response} -import com.twitter.finagle.http.exp.Multipart.{FileUpload, InMemoryFileUpload, OnDiskFileUpload} -import com.twitter.util.Future -import com.twitter.io.Buf -import io.finch._, items._ -import java.io.File -import java.nio.file.Files -import java.time._ - -object UserApi { - /** - * Compiles all service endpoints. - * @return Bundled compilation of all service endpoints. - */ - def endpoints(da: DataAccessor) = - createUser(da) :+: - createUsersWithArrayInput(da) :+: - createUsersWithListInput(da) :+: - deleteUser(da) :+: - getUserByName(da) :+: - loginUser(da) :+: - logoutUser(da) :+: - updateUser(da) - - - private def checkError(e: CommonError) = e match { - case InvalidInput(_) => BadRequest(e) - case MissingIdentifier(_) => BadRequest(e) - case RecordNotFound(_) => NotFound(e) - case _ => InternalServerError(e) - } - - implicit class StringOps(s: String) { - - import java.time.format.DateTimeFormatter - - lazy val localformatter: DateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd") - lazy val datetimeformatter: DateTimeFormatter = - DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ") - - def toLocalDateTime: LocalDateTime = LocalDateTime.parse(s,localformatter) - def toZonedDateTime: ZonedDateTime = ZonedDateTime.parse(s, datetimeformatter) - - } - - /** - * - * @return An endpoint representing a Unit - */ - private def createUser(da: DataAccessor): Endpoint[Unit] = - post("user" :: jsonBody[User] :: header("api_key")) { (user: User, authParamapi_key: String) => - da.User_createUser(user, authParamapi_key) match { - case Left(error) => checkError(error) - case Right(data) => Ok(data) - } - } handle { - case e: Exception => BadRequest(e) - } - - /** - * - * @return An endpoint representing a Unit - */ - private def createUsersWithArrayInput(da: DataAccessor): Endpoint[Unit] = - post("user" :: "createWithArray" :: jsonBody[Seq[User]] :: header("api_key")) { (user: Seq[User], authParamapi_key: String) => - da.User_createUsersWithArrayInput(user, authParamapi_key) match { - case Left(error) => checkError(error) - case Right(data) => Ok(data) - } - } handle { - case e: Exception => BadRequest(e) - } - - /** - * - * @return An endpoint representing a Unit - */ - private def createUsersWithListInput(da: DataAccessor): Endpoint[Unit] = - post("user" :: "createWithList" :: jsonBody[Seq[User]] :: header("api_key")) { (user: Seq[User], authParamapi_key: String) => - da.User_createUsersWithListInput(user, authParamapi_key) match { - case Left(error) => checkError(error) - case Right(data) => Ok(data) - } - } handle { - case e: Exception => BadRequest(e) - } - - /** - * - * @return An endpoint representing a Unit - */ - private def deleteUser(da: DataAccessor): Endpoint[Unit] = - delete("user" :: string :: header("api_key")) { (username: String, authParamapi_key: String) => - da.User_deleteUser(username, authParamapi_key) match { - case Left(error) => checkError(error) - case Right(data) => Ok(data) - } - } handle { - case e: Exception => BadRequest(e) - } - - /** - * - * @return An endpoint representing a User - */ - private def getUserByName(da: DataAccessor): Endpoint[User] = - get("user" :: string) { (username: String) => - da.User_getUserByName(username) match { - case Left(error) => checkError(error) - case Right(data) => Ok(data) - } - } handle { - case e: Exception => BadRequest(e) - } - - /** - * - * @return An endpoint representing a String - */ - private def loginUser(da: DataAccessor): Endpoint[String] = - get("user" :: "login" :: param("username") :: param("password")) { (username: String, password: String) => - da.User_loginUser(username, password) match { - case Left(error) => checkError(error) - case Right(data) => Ok(data) - } - } handle { - case e: Exception => BadRequest(e) - } - - /** - * - * @return An endpoint representing a Unit - */ - private def logoutUser(da: DataAccessor): Endpoint[Unit] = - get("user" :: "logout" :: header("api_key")) { (authParamapi_key: String) => - da.User_logoutUser(authParamapi_key) match { - case Left(error) => checkError(error) - case Right(data) => Ok(data) - } - } handle { - case e: Exception => BadRequest(e) - } - - /** - * - * @return An endpoint representing a Unit - */ - private def updateUser(da: DataAccessor): Endpoint[Unit] = - put("user" :: string :: jsonBody[User] :: header("api_key")) { (username: String, user: User, authParamapi_key: String) => - da.User_updateUser(username, user, authParamapi_key) match { - case Left(error) => checkError(error) - case Right(data) => Ok(data) - } - } handle { - case e: Exception => BadRequest(e) - } - - - implicit private def fileUploadToFile(fileUpload: FileUpload) : File = { - fileUpload match { - case upload: InMemoryFileUpload => - bytesToFile(Buf.ByteArray.Owned.extract(upload.content)) - case upload: OnDiskFileUpload => - upload.content - case _ => null - } - } - - private def bytesToFile(input: Array[Byte]): java.io.File = { - val file = Files.createTempFile("tmpUserApi", null).toFile - val output = new FileOutputStream(file) - output.write(input) - file - } - - // This assists in params(string) application (which must be Seq[A] in parameter list) when the param is used as a List[A] elsewhere. - implicit def seqList[A](input: Seq[A]): List[A] = input.toList -} diff --git a/samples/server/petstore/scala-finch/src/main/scala/org/openapitools/models/ApiResponse.scala b/samples/server/petstore/scala-finch/src/main/scala/org/openapitools/models/ApiResponse.scala deleted file mode 100644 index f0a89e43a1dc..000000000000 --- a/samples/server/petstore/scala-finch/src/main/scala/org/openapitools/models/ApiResponse.scala +++ /dev/null @@ -1,26 +0,0 @@ -package org.openapitools.models - -import io.circe._ -import io.finch.circe._ -import io.circe.generic.semiauto._ -import io.circe.java8.time._ -import org.openapitools._ - -/** - * Describes the result of uploading an image resource - * @param code - * @param _type - * @param message - */ -case class ApiResponse(code: Option[Int], - _type: Option[String], - message: Option[String] - ) - -object ApiResponse { - /** - * Creates the codec for converting ApiResponse from and to JSON. - */ - implicit val decoder: Decoder[ApiResponse] = deriveDecoder - implicit val encoder: ObjectEncoder[ApiResponse] = deriveEncoder -} diff --git a/samples/server/petstore/scala-finch/src/main/scala/org/openapitools/models/Category.scala b/samples/server/petstore/scala-finch/src/main/scala/org/openapitools/models/Category.scala deleted file mode 100644 index 1f3793278091..000000000000 --- a/samples/server/petstore/scala-finch/src/main/scala/org/openapitools/models/Category.scala +++ /dev/null @@ -1,24 +0,0 @@ -package org.openapitools.models - -import io.circe._ -import io.finch.circe._ -import io.circe.generic.semiauto._ -import io.circe.java8.time._ -import org.openapitools._ - -/** - * A category for a pet - * @param id - * @param name - */ -case class Category(id: Option[Long], - name: Option[String] - ) - -object Category { - /** - * Creates the codec for converting Category from and to JSON. - */ - implicit val decoder: Decoder[Category] = deriveDecoder - implicit val encoder: ObjectEncoder[Category] = deriveEncoder -} diff --git a/samples/server/petstore/scala-finch/src/main/scala/org/openapitools/models/Order.scala b/samples/server/petstore/scala-finch/src/main/scala/org/openapitools/models/Order.scala deleted file mode 100644 index 657a7b7249a9..000000000000 --- a/samples/server/petstore/scala-finch/src/main/scala/org/openapitools/models/Order.scala +++ /dev/null @@ -1,33 +0,0 @@ -package org.openapitools.models - -import io.circe._ -import io.finch.circe._ -import io.circe.generic.semiauto._ -import io.circe.java8.time._ -import org.openapitools._ -import java.time.ZonedDateTime - -/** - * An order for a pets from the pet store - * @param id - * @param petId - * @param quantity - * @param shipDate - * @param status Order Status - * @param complete - */ -case class Order(id: Option[Long], - petId: Option[Long], - quantity: Option[Int], - shipDate: Option[ZonedDateTime], - status: Option[String], - complete: Option[Boolean] - ) - -object Order { - /** - * Creates the codec for converting Order from and to JSON. - */ - implicit val decoder: Decoder[Order] = deriveDecoder - implicit val encoder: ObjectEncoder[Order] = deriveEncoder -} diff --git a/samples/server/petstore/scala-finch/src/main/scala/org/openapitools/models/Pet.scala b/samples/server/petstore/scala-finch/src/main/scala/org/openapitools/models/Pet.scala deleted file mode 100644 index 4e499e7f05a8..000000000000 --- a/samples/server/petstore/scala-finch/src/main/scala/org/openapitools/models/Pet.scala +++ /dev/null @@ -1,35 +0,0 @@ -package org.openapitools.models - -import io.circe._ -import io.finch.circe._ -import io.circe.generic.semiauto._ -import io.circe.java8.time._ -import org.openapitools._ -import org.openapitools.models.Category -import org.openapitools.models.Tag -import scala.collection.immutable.Seq - -/** - * A pet for sale in the pet store - * @param id - * @param category - * @param name - * @param photoUrls - * @param tags - * @param status pet status in the store - */ -case class Pet(id: Option[Long], - category: Option[Category], - name: String, - photoUrls: Seq[String], - tags: Option[Seq[Tag]], - status: Option[String] - ) - -object Pet { - /** - * Creates the codec for converting Pet from and to JSON. - */ - implicit val decoder: Decoder[Pet] = deriveDecoder - implicit val encoder: ObjectEncoder[Pet] = deriveEncoder -} diff --git a/samples/server/petstore/scala-finch/src/main/scala/org/openapitools/models/Tag.scala b/samples/server/petstore/scala-finch/src/main/scala/org/openapitools/models/Tag.scala deleted file mode 100644 index 7636d02e6bec..000000000000 --- a/samples/server/petstore/scala-finch/src/main/scala/org/openapitools/models/Tag.scala +++ /dev/null @@ -1,24 +0,0 @@ -package org.openapitools.models - -import io.circe._ -import io.finch.circe._ -import io.circe.generic.semiauto._ -import io.circe.java8.time._ -import org.openapitools._ - -/** - * A tag for a pet - * @param id - * @param name - */ -case class Tag(id: Option[Long], - name: Option[String] - ) - -object Tag { - /** - * Creates the codec for converting Tag from and to JSON. - */ - implicit val decoder: Decoder[Tag] = deriveDecoder - implicit val encoder: ObjectEncoder[Tag] = deriveEncoder -} diff --git a/samples/server/petstore/scala-finch/src/main/scala/org/openapitools/models/User.scala b/samples/server/petstore/scala-finch/src/main/scala/org/openapitools/models/User.scala deleted file mode 100644 index b4b05b2c3f16..000000000000 --- a/samples/server/petstore/scala-finch/src/main/scala/org/openapitools/models/User.scala +++ /dev/null @@ -1,36 +0,0 @@ -package org.openapitools.models - -import io.circe._ -import io.finch.circe._ -import io.circe.generic.semiauto._ -import io.circe.java8.time._ -import org.openapitools._ - -/** - * A User who is purchasing from the pet store - * @param id - * @param username - * @param firstName - * @param lastName - * @param email - * @param password - * @param phone - * @param userStatus User Status - */ -case class User(id: Option[Long], - username: Option[String], - firstName: Option[String], - lastName: Option[String], - email: Option[String], - password: Option[String], - phone: Option[String], - userStatus: Option[Int] - ) - -object User { - /** - * Creates the codec for converting User from and to JSON. - */ - implicit val decoder: Decoder[User] = deriveDecoder - implicit val encoder: ObjectEncoder[User] = deriveEncoder -}