/
SwaggerSpecRunner.scala
37 lines (30 loc) · 1.65 KB
/
SwaggerSpecRunner.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package com.iheart.playSwagger
import java.nio.file.{ Files, Paths, StandardOpenOption }
import play.api.libs.json.{ JsValue, Json }
import scala.util.{ Failure, Success, Try }
object SwaggerSpecRunner extends App {
implicit def cl: ClassLoader = getClass.getClassLoader
val targetFile :: routesFile :: domainNameSpaceArgs :: outputTransformersArgs :: swaggerV3String :: apiVersion :: swaggerPrettyJson :: Nil = args.toList
private def fileArg = Paths.get(targetFile)
private def swaggerJson = {
val swaggerV3 = java.lang.Boolean.parseBoolean(swaggerV3String)
val domainModelQualifier = PrefixDomainModelQualifier(domainNameSpaceArgs.split(","): _*)
val transformersStrs: Seq[String] = if (outputTransformersArgs.isEmpty) Seq() else outputTransformersArgs.split(",")
val transformers = transformersStrs.map { clazz ⇒
Try(cl.loadClass(clazz).asSubclass(classOf[OutputTransformer]).newInstance()) match {
case Failure(ex: ClassCastException) ⇒
throw new IllegalArgumentException("Transformer should be a subclass of com.iheart.playSwagger.OutputTransformer:" + clazz, ex)
case Failure(ex) ⇒ throw new IllegalArgumentException("Could not create transformer", ex)
case Success(el) ⇒ el
}
}
val swaggerSpec: JsValue = SwaggerSpecGenerator(
domainModelQualifier,
outputTransformers = transformers,
swaggerV3 = swaggerV3,
apiVersion = Some(apiVersion)).generate(routesFile).get
if (swaggerPrettyJson.toBoolean) Json.prettyPrint(swaggerSpec)
else swaggerSpec.toString
}
Files.write(fileArg, swaggerJson.getBytes, StandardOpenOption.CREATE_NEW, StandardOpenOption.WRITE)
}