diff --git a/api-first-core/src/main/scala/de/zalando/apifirst/TypeFlattener.scala b/api-first-core/src/main/scala/de/zalando/apifirst/TypeFlattener.scala index 22cad4f1..29ccfa75 100644 --- a/api-first-core/src/main/scala/de/zalando/apifirst/TypeFlattener.scala +++ b/api-first-core/src/main/scala/de/zalando/apifirst/TypeFlattener.scala @@ -16,7 +16,7 @@ object TypeDeduplicator extends TypeAnalyzer { private def equal(app: StrictModel) = (t1: Type, t2: Type) => t1 == t2 || - ((notHierarhyRoot(t1, app) || notHierarhyRoot(t2, app)) && isSameTypeDef(t1)(t2) && isSameConstraints(t1)(t2)) + ((notHierarchyRoot(t1, app) || notHierarchyRoot(t2, app)) && isSameTypeDef(t1)(t2) && isSameConstraints(t1)(t2)) /** * Removes redundant type definitions changing pointing references @@ -30,7 +30,7 @@ object TypeDeduplicator extends TypeAnalyzer { duplicate map replaceSingle(app) map apply getOrElse app } - private def notHierarhyRoot(t: Type, app: StrictModel) = !app.discriminators.contains(t.name) + private def notHierarchyRoot(t: Type, app: StrictModel) = !app.discriminators.contains(t.name) private def replaceSingle(model: StrictModel): Type => StrictModel = tpe => { val duplicates = model.typeDefs.filter { d => equal(model)(tpe, d._2) } @@ -38,7 +38,9 @@ object TypeDeduplicator extends TypeAnalyzer { val bestMatch :: refsToRemove = duplicateNames val typesToRewrite = model.typeDefs filterNot { t => refsToRemove.contains(t._1) } val callsWithCorrectRefs = model.calls map { c => replaceReferenceInCall(refsToRemove, bestMatch)(c) } - val typesWithCorrectRefs = typesToRewrite map { d => replaceReferencesInTypes(refsToRemove, bestMatch)(d._1, d._2) } + val typesWithCorrectRefs = typesToRewrite map { (d: (Reference, Type)) => + replaceReferencesInTypes(refsToRemove, bestMatch)(d._1, d._2) + } val newParams = model.params map replaceReferenceInParameter(refsToRemove, bestMatch) model.copy(typeDefs = typesWithCorrectRefs, params = newParams, calls = callsWithCorrectRefs) } @@ -56,33 +58,46 @@ object TypeDeduplicator extends TypeAnalyzer { call.copy(resultTypes = TypesResponseInfo(resultTypes, default)) } - private def replaceReferencesInTypes(duplicateRefs: Seq[Reference], target: Reference): (Reference, Type) => (Reference, Type) = (ref, tpe) => ref -> { - tpe match { - case c: Container => - c.tpe match { - case r: TypeRef if duplicateRefs.contains(r.name) => c.withType(TypeRef(target)) - case o => c - } - - case c: Composite => - val newDescendants = c.descendants map { - case d: TypeRef if duplicateRefs.contains(d.name) => TypeRef(target) - case o => o - } - c.withTypes(newDescendants) + private def replaceType(tpe: Type, duplicateRefs: Seq[Reference], target: Reference): Type = tpe match { + case c: Container => replaceContainerType(c, duplicateRefs, target) + case c: Composite => replaceCompositeType(c, duplicateRefs, target) + case t: TypeDef => replaceTypeDefType(t, duplicateRefs, target) + case n: TypeRef if duplicateRefs.contains(n.name) => TypeRef(target) + case _ => tpe + } - case t: TypeDef => - val newFields = t.fields.map { - case f @ Field(_, tpe: TypeRef) if duplicateRefs.contains(tpe.name) => f.copy(tpe = TypeRef(target)) - case o => o - } - val newName = if (duplicateRefs.contains(t.name)) target else t.name - t.copy(name = newName, fields = newFields) + private def replaceContainerType(c: Container, duplicateRefs: Seq[Reference], target: Reference): Type = c.tpe match { + case r: TypeRef if duplicateRefs.contains(r.name) => c.withType(TypeRef(target)) + case r: Container if isRecursiveContainerType(r) => c.withType(replaceType(r, duplicateRefs, target)) + case o => c + } - case n: TypeRef if duplicateRefs.contains(n.name) => TypeRef(target) + private def replaceCompositeType(c: Composite, duplicateRefs: Seq[Reference], target: Reference) = { + val newDescendants = c.descendants map { + case d: TypeRef if duplicateRefs.contains(d.name) => TypeRef(target) + case o => o + } + c.withTypes(newDescendants) + } - case _ => tpe + private def replaceTypeDefType(t: TypeDef, duplicateRefs: Seq[Reference], target: Reference) = { + val newFields = t.fields.map { + case f @ Field(_, tpe: TypeRef) if duplicateRefs.contains(tpe.name) => f.copy(tpe = TypeRef(target)) + case f @ Field(_, c: Container) if isRecursiveContainerType(c) && duplicateRefs.contains(getInnerContainerType(c).name) => + f.copy(tpe = replaceContainerType(c, duplicateRefs, target)) + case o => o } + val newName = if (duplicateRefs.contains(t.name)) target else t.name + t.copy(name = newName, fields = newFields) + } + + private def getInnerContainerType(c: Container): Type = c.tpe match { + case inner: Container if isRecursiveContainerType(inner) => getInnerContainerType(inner) + case inner => inner + } + + private def replaceReferencesInTypes(duplicateRefs: Seq[Reference], target: Reference): (Reference, Type) => (Reference, Type) = { (ref, tpe) => + ref -> replaceType(tpe, duplicateRefs, target) } private def replaceReferenceInParameter(duplicateRefs: Seq[Reference], target: Reference): ((ParameterRef, Parameter)) => (ParameterRef, Parameter) = { @@ -124,7 +139,7 @@ object TypeFlattener extends TypeAnalyzer { } private def flatten0(typeDefs: TypeLookupTable): TypeLookupTable = { - val flatTypeDefs = typeDefs flatMap { case (k, v) => extractComplexType(k, v) } + val flatTypeDefs = typeDefs flatMap { case (ref, tpe) => extractComplexType(ref, tpe) } if (flatTypeDefs == typeDefs) flatTypeDefs else @@ -133,20 +148,29 @@ object TypeFlattener extends TypeAnalyzer { private def extractComplexType(ref: Reference, typeDef: Type): Seq[(Reference, Type)] = typeDef match { case t: TypeDef if complexFields(t).nonEmpty => - val (changedFields, extractedTypes) = t.fields.filter(complexField).map(createTypeFromField(t)).unzip + val (changedFields, extractedTypes) = complexFields(t).map(createTypeFromField(t)).unzip val newFields = t.fields.filterNot(complexField) ++ changedFields val newTypeDef = t.copy(fields = newFields) (ref -> newTypeDef) +: extractedTypes + case t: TypeDef if containerFieldsWithComplexType(t).nonEmpty => + val (changedFields, extractedTypes) = containerFieldsWithComplexType(t).map(createRecursiveTypeFromContainerField(t)).unzip + val newFields = t.fields.filterNot(containerFieldWithComplexType) ++ changedFields + val newTypeDef = t.copy(fields = newFields) + (ref -> newTypeDef) +: extractedTypes case t: EnumTrait => val leafTypes = t.leaves.map { l => ref / l.fieldValue -> l } (ref -> t) +: leafTypes.toSeq - case c: Container if isComplexType(c.tpe) => + case c: Container if isRecursiveContainerType(c) && isRecursiveComplexType(c) => + val (newType, newRef, extractedType) = createRecursiveTypeFromContainer(ref, c) + Seq(ref -> newType, newRef -> extractedType) + case c: Container if !isRecursiveContainerType(c) && isComplexType(c.tpe) => val newRef = ref / c.getClass.getSimpleName Seq(ref -> c.withType(TypeRef(newRef)), newRef -> c.tpe) case c: Composite => - val (changedTypes, extractedTypes) = c.descendants.filter(isComplexType). - zipWithIndex.map(flattenType(c.getClass.getSimpleName, ref)).unzip - val newTypes = c.descendants.filterNot(isComplexType) ++ changedTypes + val (complexDescendants, simpleDescendants) = c.descendants.partition(isComplexType) + val (changedTypes, extractedTypes) = complexDescendants.zipWithIndex + .map(flattenType(c.getClass.getSimpleName, ref)).unzip + val newTypes = simpleDescendants ++ changedTypes val newTypeDef = c.withTypes(newTypes) (ref -> newTypeDef) +: extractedTypes case _ => Seq(ref -> typeDef) @@ -156,12 +180,38 @@ object TypeFlattener extends TypeAnalyzer { private def complexField: (Field) => Boolean = f => isComplexType(f.tpe) + private def containerFieldsWithComplexType(typeDef: TypeDef): Seq[Field] = typeDef.fields filter containerFieldWithComplexType + + private def containerFieldWithComplexType: (Field) => Boolean = f => isRecursiveContainerType(f.tpe) && isRecursiveComplexType(f.tpe) + private def createTypeFromField(t: TypeDef): (Field) => (Field, (Reference, Type)) = field => { val newReference = TypeRef(t.name / field.name.simple) + val extractedType = field.tpe (field.copy(tpe = newReference), newReference.name -> extractedType) } + private def createRecursiveTypeFromContainerField(t: Type): (Field) => (Field, (Reference, Type)) = field => { + val reference = t.name / field.name.simple + + val (newType, newReference, extractedType) = createRecursiveTypeFromContainer(reference, field.tpe) + + (field.copy(tpe = newType), newReference -> extractedType) + } + + private def createRecursiveTypeFromContainer(ref: Reference, t: Type): (Type, Reference, Type) = { + val newReference = ref / t.name.simple + + t match { + case c: Container if isRecursiveContainerType(c) => + val result = createRecursiveTypeFromContainer(newReference, c.tpe) + result.copy(c.withType(result._1)) + + case t => + (TypeRef(newReference), newReference, t) + } + } + private def flattenType: (String, Reference) => ((Type, Int)) => (Type, (Reference, Type)) = (name, ref) => pair => { val (typeDef, index) = pair val newReference = TypeRef(ref / (name + index)) @@ -180,9 +230,9 @@ object ParameterDereferencer extends TypeAnalyzer { private[apifirst] def apply(app: StrictModel): StrictModel = { var result = app result.params foreach { - case (name, definition) => + case (name: ParameterRef, definition: Expr) => definition.typeName match { - case tpe if isComplexType(tpe) => + case tpe if isComplexTypeParam(tpe) => val newName = name.name / "ref" val newReference = TypeRef(newName) val tps = app.typeDefs + (newName -> tpe) @@ -197,10 +247,24 @@ object ParameterDereferencer extends TypeAnalyzer { trait TypeAnalyzer { def isComplexType(t: Type): Boolean = t match { - case tpe @ (_: TypeDef | _: Composite | _: Container) => true + case _: TypeDef | _: Composite => true + case t: Container => !isRecursiveContainerType(t) case _ => false } + def isComplexTypeParam(t: Type): Boolean = t match { + case _: TypeDef | _: Composite | _: Container => true + case _ => false + } + + def isRecursiveComplexType(t: Type): Boolean = t match { + case c: Container if isRecursiveContainerType(c) => isRecursiveComplexType(c.tpe) + case tpe => isComplexType(tpe) + } + + def isRecursiveContainerType(t: Type): Boolean = + t.isInstanceOf[Arr] || t.isInstanceOf[ArrResult] || t.isInstanceOf[Opt] + def isSameConstraints(one: Type)(two: Type): Boolean = (one, two) match { case (c1: Container, c2: Container) if c1.getClass == c2.getClass => isSameConstraints(c1.tpe)(c2.tpe) @@ -237,8 +301,11 @@ trait TypeAnalyzer { case _ => false } - def sameFields(t1: TypeDef, t2: TypeDef): Boolean = - t1.fields.forall(p => t2.fields.exists(e => isSameTypeDef(p.tpe)(e.tpe) && sameNames(p, e))) + def sameFields(t1: TypeDef, t2: TypeDef): Boolean = { + t1.fields.forall { field => + t2.fields.exists { e => isSameTypeDef(field.tpe)(e.tpe) & sameNames(field, e) } + } + } type hasSimpleName = { def name: { def simple: String } } @@ -249,4 +316,4 @@ trait TypeAnalyzer { c1.root == c2.root && c1.descendants.forall(p => c2.descendants.exists(isSameTypeDef(p))) -} \ No newline at end of file +} diff --git a/api-first-core/src/main/scala/de/zalando/apifirst/naming.scala b/api-first-core/src/main/scala/de/zalando/apifirst/naming.scala index 1f379cd9..215dd575 100644 --- a/api-first-core/src/main/scala/de/zalando/apifirst/naming.scala +++ b/api-first-core/src/main/scala/de/zalando/apifirst/naming.scala @@ -155,7 +155,7 @@ object StringUtil { case class ScalaName(ref: Reference) { import ScalaName._ import StringUtil._ - val parts = ref.parts.flatMap(_.split("/").filter(_.nonEmpty)) match { + val parts: List[String] = ref.parts.flatMap(_.split("/").filter(_.nonEmpty)) match { case Nil => throw new IllegalArgumentException(s"At least one part required to construct a name, but got $ref") case single :: Nil => "" :: removeVars(single) :: Nil @@ -172,6 +172,7 @@ case class ScalaName(ref: Reference) { if (prefix.trim.isEmpty) (withSuffix, capitalize _) else (prefix :: withSuffix, camelize _) escape(caseTransformer("/", withPrefix.mkString("/"))) } + def typeLongAlias: String = parts.reverse.mkString def methodName: String = escape(camelize("/", parts.last)) def names: (String, String, String) = (packageName, className, methodName) diff --git a/api-first-core/src/test/scala/de/zalando/apifirst/ParameterDereferencerTest.scala b/api-first-core/src/test/scala/de/zalando/apifirst/ParameterDereferencerTest.scala index 23dc5282..6c0ffbee 100644 --- a/api-first-core/src/test/scala/de/zalando/apifirst/ParameterDereferencerTest.scala +++ b/api-first-core/src/test/scala/de/zalando/apifirst/ParameterDereferencerTest.scala @@ -16,16 +16,14 @@ class ParameterDereferencerTest extends FunSpec with MustMatchers { testChangeNothing() } - it("should dereference container Opt types") { - testContainerType(Opt.apply) + it("should change nothing if parameters contain only containers") { + testContainer() } - it("should dereference container CatchAll types") { - testContainerType(CatchAll.apply) - } - it("should dereference composition OneOf types") { + + it("should dereference composition OneOf types") { testCompositionType(OneOf.apply) } - it("should dereference composition AllOf types") { + it("should dereference composition AllOf types") { testCompositionType(OneOf.apply) } it("should dereference TypeDefs") { @@ -48,6 +46,18 @@ class ParameterDereferencerTest extends FunSpec with MustMatchers { checkExpectations(types)(params) } + def testContainer(): Unit = { + val types = Map[Reference, Type]( + reference1 -> Opt(Intgr(Some("Limit for search queries")), Some("some other stuff")), + reference2 -> CatchAll(Intgr(None), None) + ) + val params: ParameterLookupTable = Map( + ParameterRef(reference1) -> Parameter("limit", TypeRef(reference1), None, None, "", encode = false, ParameterPlace.BODY), + ParameterRef(reference2) -> Parameter("id", TypeRef(reference2), None, None, "", encode = false, ParameterPlace.BODY) + ) + checkExpectations(types)(params) + } + def testContainerType[T](constructor: (Type, TypeMeta) => Type): Unit = { val types = Map[Reference, Type]( reference1 -> constructor(Intgr(None), TypeMeta(None)), diff --git a/api-first-core/src/test/scala/de/zalando/apifirst/TypeAnalyzerTest.scala b/api-first-core/src/test/scala/de/zalando/apifirst/TypeAnalyzerTest.scala new file mode 100644 index 00000000..1a30cbb0 --- /dev/null +++ b/api-first-core/src/test/scala/de/zalando/apifirst/TypeAnalyzerTest.scala @@ -0,0 +1,66 @@ +package de.zalando.apifirst + +import de.zalando.apifirst.Domain.{ Field, Opt, Str, TypeDef, TypeMeta, TypeRef } +import de.zalando.apifirst.naming.Reference +import org.scalatest._ + +import scala.language.implicitConversions + +class TypeAnalyzerTest extends FunSpec with Matchers { + + private def analyzer = new TypeAnalyzer {} + + describe("isComplexType") { + it("should be false for Opt[Str]") { + val tpe = Opt(Str(None, TypeMeta(None, List())), TypeMeta(None)) + analyzer.isComplexType(tpe) shouldBe false + } + + it("should be false for Str") { + val tpe = Str(None, TypeMeta(None, List())) + analyzer.isComplexType(tpe) shouldBe false + } + + it("should be true for TypeDef") { + val tpe = TypeDef( + Reference("⌿definitions⌿Basic"), + Seq( + Field(Reference("⌿definitions⌿Basic⌿optional"), Opt(TypeRef(Reference("⌿definitions⌿Basic⌿optional")), TypeMeta(None, List()))) + ), + TypeMeta(Some("Named types: 1"), List()) + ) + analyzer.isComplexType(tpe) shouldBe true + } + + it("should be false for Opt[TypeDef]") { + val tpe = Opt( + TypeDef( + Reference("⌿definitions⌿Basic"), + Seq( + Field(Reference("⌿definitions⌿Basic⌿optional"), Opt(TypeRef(Reference("⌿definitions⌿Basic⌿optional")), TypeMeta(None, List()))) + ), + TypeMeta(Some("Named types: 1"), List()) + ), + TypeMeta(None) + ) + analyzer.isComplexType(tpe) shouldBe false + } + } + + describe("isRecursiveComplexType") { + it("should be true for Opt[TypeDef]") { + val tpe = Opt( + TypeDef( + Reference("⌿definitions⌿Basic"), + Seq( + Field(Reference("⌿definitions⌿Basic⌿optional"), Opt(TypeRef(Reference("⌿definitions⌿Basic⌿optional")), TypeMeta(None, List()))) + ), + TypeMeta(Some("Named types: 1"), List()) + ), + TypeMeta(None) + ) + analyzer.isRecursiveComplexType(tpe) shouldBe true + } + } + +} diff --git a/api-first-core/src/test/scala/de/zalando/apifirst/TypeDeduplicatorTest.scala b/api-first-core/src/test/scala/de/zalando/apifirst/TypeDeduplicatorTest.scala index 729d11e8..1bf6a3c9 100644 --- a/api-first-core/src/test/scala/de/zalando/apifirst/TypeDeduplicatorTest.scala +++ b/api-first-core/src/test/scala/de/zalando/apifirst/TypeDeduplicatorTest.scala @@ -108,5 +108,4 @@ class TypeDeduplicatorTest extends FunSpec with MustMatchers { if (discriminators.isEmpty) result.params.foreach(_._2.typeName.asInstanceOf[TypeRef].name mustBe reference2) } - } diff --git a/api-first-core/src/test/scala/de/zalando/apifirst/TypeFlattenerIntegrationTest.scala b/api-first-core/src/test/scala/de/zalando/apifirst/TypeFlattenerIntegrationTest.scala index 87e437e7..ec68ebe6 100644 --- a/api-first-core/src/test/scala/de/zalando/apifirst/TypeFlattenerIntegrationTest.scala +++ b/api-first-core/src/test/scala/de/zalando/apifirst/TypeFlattenerIntegrationTest.scala @@ -1,6 +1,6 @@ package de.zalando.apifirst -import java.io.File +import java.io.{ File, PrintWriter } import de.zalando.apifirst.util.ScalaPrinter import org.scalatest.{ FunSpec, MustMatchers } @@ -20,9 +20,11 @@ class TypeFlattenerIntegrationTest extends FunSpec with MustMatchers { basic_polymorphism_yaml, cross_spec_references_yaml, echo_api_yaml, + enum_yaml, error_in_array_yaml, expanded_polymorphism_yaml, form_data_yaml, + foodpanda_yaml, full_petstore_api_yaml, hackweek_yaml, heroku_petstore_api_yaml, @@ -56,11 +58,20 @@ class TypeFlattenerIntegrationTest extends FunSpec with MustMatchers { val name = ScalaPrinter.nameFromModel(ast) it(s"should flatten API model $name") { val scalaModel = TypeNormaliser.flatten(ast.model) + //dump(name, ".scala", ScalaPrinter.asScala(name, scalaModel)) val expected = asInFile(name, ".scala") clean(ScalaPrinter.asScala(name, scalaModel)) mustBe clean(expected) } } + def dump(name: String, suffix: String, contents: String): Unit = { + val file = new File(expectation_path, prefix + name + suffix) + println(s"Writing {${file}}") + val pw = new PrintWriter(file) + pw.write(contents) + pw.close() + } + def asInFile(name: String, suffix: String): String = { val expectedFile = new File(expectation_path, prefix + name + suffix) if (expectedFile.canRead) { diff --git a/api-first-core/src/test/scala/de/zalando/apifirst/TypeFlattenerTest.scala b/api-first-core/src/test/scala/de/zalando/apifirst/TypeFlattenerTest.scala index 6321900a..412cd2e7 100644 --- a/api-first-core/src/test/scala/de/zalando/apifirst/TypeFlattenerTest.scala +++ b/api-first-core/src/test/scala/de/zalando/apifirst/TypeFlattenerTest.scala @@ -31,28 +31,34 @@ class TypeFlattenerTest extends FunSpec with MustMatchers { private val wohooo1 = TypeDef("wohooo1", fields, noMeta) describe("TypeFlattener") { - it("should flatten nested Opt types") { + + it("should not flatten nested Opt types") { val nested = Map[Reference, Type]( reference1 -> Opt(Opt(Intgr(None), noMeta), noMeta) ) val flat = TypeFlattener(nested) - flat.typeDefs.size mustBe 2 - flat.typeDefs mustBe Map( - reference1 -> Opt(TypeRef(reference1 / "Opt"), noMeta), - reference1 / "Opt" -> Opt(Intgr(noMeta), noMeta) + flat.typeDefs mustBe Map[Reference, Type]( + reference1 -> Opt(Opt(Intgr(None), noMeta), noMeta) ) } - it("should flatten nested Arr types") { + it("should not flatten nested Arr types") { val nested = Map[Reference, Type]( reference1 -> Arr(Arr(Arr(Intgr(None), noMeta, "tsv"), noMeta, "csv"), noMeta, "pipes") ) val flat = TypeFlattener(nested) - flat.typeDefs.size mustBe 3 - flat.typeDefs mustBe Map( - reference1 -> Arr(TypeRef(reference1 / "Arr"), noMeta, "pipes"), - reference1 / "Arr" -> Arr(TypeRef(reference1 / "Arr" / "Arr"), noMeta, "csv"), - reference1 / "Arr" / "Arr" -> Arr(Intgr(noMeta), noMeta, "tsv") + flat.typeDefs mustBe Map[Reference, Type]( + reference1 -> Arr(Arr(Arr(Intgr(None), noMeta, "tsv"), noMeta, "csv"), noMeta, "pipes") + ) + } + + it("should not flatten nested ArrResult types") { + val nested = Map[Reference, Type]( + reference1 -> ArrResult(ArrResult(ArrResult(Intgr(None), noMeta), noMeta), noMeta) + ) + val flat = TypeFlattener(nested) + flat.typeDefs mustBe Map[Reference, Type]( + reference1 -> ArrResult(ArrResult(ArrResult(Intgr(None), noMeta), noMeta), noMeta) ) } @@ -61,10 +67,8 @@ class TypeFlattenerTest extends FunSpec with MustMatchers { reference1 -> CatchAll(Opt(Intgr(None), noMeta), noMeta) ) val flat = TypeFlattener(nested) - flat.typeDefs.size mustBe 2 flat.typeDefs mustBe Map( - reference1 -> CatchAll(TypeRef(reference1 / "CatchAll"), noMeta), - reference1 / "CatchAll" -> Opt(Intgr(noMeta), noMeta) + reference1 -> CatchAll(Opt(Intgr(noMeta), noMeta), noMeta) ) } @@ -77,15 +81,12 @@ class TypeFlattenerTest extends FunSpec with MustMatchers { )) ) val flat = TypeFlattener(nested) - flat.typeDefs.size mustBe 3 flat.typeDefs mustBe Map( reference1 -> OneOf(reference1, noMeta, Seq( - TypeRef(reference1 / "OneOf0"), - TypeRef(reference1 / "OneOf1") - )), - reference1 / "OneOf0" -> Opt(Intgr(None), noMeta), - reference1 / "OneOf1" -> Arr(Str(None, None), noMeta, "csv") + Opt(Intgr(None), noMeta), + Arr(Str(None, None), noMeta, "csv") + )) ) } @@ -95,7 +96,6 @@ class TypeFlattenerTest extends FunSpec with MustMatchers { Seq(wohooo2, TypeDef("wohooo3", fields, noMeta))) ) val flat = TypeFlattener(nested) - flat.typeDefs.size mustBe 5 flat.typeDefs mustBe Map( reference1 -> AllOf(reference1, noMeta, List(TypeRef(reference1 / "AllOf0"), TypeRef(reference1 / "AllOf1"))), reference1 / "AllOf0" -> wohooo2, @@ -104,11 +104,10 @@ class TypeFlattenerTest extends FunSpec with MustMatchers { "wohooo3", Seq( Field(Reference("a"), Lng(noMeta)), - Field(Reference("b"), TypeRef("wohooo3" / "b")), + Field(Reference("b"), Opt(Str(None, noMeta), noMeta)), Field(Reference("c"), TypeRef("wohooo3" / "c")) ), noMeta ), - "wohooo3" / "b" -> Opt(Str(None, noMeta), noMeta), "wohooo3" / "c" -> wohooo2 ) } @@ -119,17 +118,15 @@ class TypeFlattenerTest extends FunSpec with MustMatchers { reference1 -> wohooo1 ) val flat = TypeFlattener(nested) - flat.typeDefs.size mustBe 3 flat.typeDefs mustBe Map( reference1 -> TypeDef( "wohooo1", Seq( Field("a", Lng(noMeta)), - Field("b", TypeRef("wohooo1" / "b")), + Field("b", Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), Field("c", TypeRef("wohooo1" / "c")) ), noMeta ), - "wohooo1" / "b" -> Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List())), "wohooo1" / "c" -> wohooo2 ) } diff --git a/api-first-core/src/test/scala/model/resources.enum_yaml.scala b/api-first-core/src/test/scala/model/resources.enum_yaml.scala new file mode 100644 index 00000000..23bc794a --- /dev/null +++ b/api-first-core/src/test/scala/model/resources.enum_yaml.scala @@ -0,0 +1,71 @@ +package de.zalando.model + +import de.zalando.apifirst.Application._ +import de.zalando.apifirst.Domain._ +import de.zalando.apifirst.ParameterPlace +import de.zalando.apifirst.naming._ +import de.zalando.apifirst.Hypermedia._ +import de.zalando.apifirst.Http._ +import de.zalando.apifirst.Security +import java.net.URL +import Security._ +//noinspection ScalaStyle +object enum_yaml extends WithModel { + + def types = Map[Reference, Type]( + Reference("⌿paths⌿/test⌿get⌿includes") → + Opt(TypeRef(Reference("⌿paths⌿/test⌿get⌿includes⌿Option⌿Enum")), TypeMeta(None, List())), + Reference("⌿paths⌿/test⌿get⌿responses⌿200") → + Str(None, TypeMeta(None, List())), + Reference("⌿paths⌿/test⌿get⌿includes⌿Option⌿Enum") → + EnumTrait(Str(None, TypeMeta(None, List("""enum("option_one,option_two")"""))), TypeMeta(None, List("""enum("option_one,option_two")""")), + Set( + EnumObject(Str(None, TypeMeta(None, List("""enum("option_one,option_two")"""))), "option_one", TypeMeta(Some("option_one"), List())), + EnumObject(Str(None, TypeMeta(None, List("""enum("option_one,option_two")"""))), "option_two", TypeMeta(Some("option_two"), List())) + + )), + Reference("⌿paths⌿/test⌿get⌿includes⌿Option⌿Enum⌿option_one") → + EnumObject(Str(None, TypeMeta(None, List("""enum("option_one,option_two")"""))), "option_one", TypeMeta(Some("option_one"), List())), + Reference("⌿paths⌿/test⌿get⌿includes⌿Option⌿Enum⌿option_two") → + EnumObject(Str(None, TypeMeta(None, List("""enum("option_one,option_two")"""))), "option_two", TypeMeta(Some("option_two"), List())) +) + + def parameters = Map[ParameterRef, Parameter]( + ParameterRef( Reference("⌿paths⌿/test⌿get⌿includes")) → Parameter("includes", TypeRef(Reference("⌿paths⌿/test⌿get⌿includes")), None, None, ".+", encode = true, ParameterPlace.withName("query")) +) + def basePath: String =null + def discriminators: DiscriminatorLookupTable = Map[Reference, Reference]( + ) + def securityDefinitions: SecurityDefinitionsTable = Map[String, Security.Definition]( + +) +def stateTransitions: StateTransitionsTable = Map[State, Map[State, TransitionProperties]]() +def calls: Seq[ApiCall] = Seq( + ApiCall(GET, Path(Reference("⌿test")), + HandlerCall( + "enum.yaml", + "EnumYaml", + instantiate = false, + "gettest",parameters = + Seq( + ParameterRef(Reference("⌿paths⌿/test⌿get⌿includes")) + ) + ), + Set.empty[MimeType], + Set.empty[MimeType], + Map.empty[String, Seq[Class[Exception]]], + TypesResponseInfo( + Map[Int, ParameterRef]( + 200 -> ParameterRef(Reference("⌿paths⌿/test⌿get⌿responses⌿200")) + ), None), + StateResponseInfo( + Map[Int, State]( + 200 -> Self + ), None), + Set.empty[Security.Constraint])) + +def packageName: Option[String] = Some("enum.yaml") + +def model = new StrictModel(calls, types, parameters, discriminators, basePath, packageName, stateTransitions, securityDefinitions) + +} diff --git a/api-first-core/src/test/scala/model/resources.foodpanda_yaml.scala b/api-first-core/src/test/scala/model/resources.foodpanda_yaml.scala new file mode 100644 index 00000000..3ac53e17 --- /dev/null +++ b/api-first-core/src/test/scala/model/resources.foodpanda_yaml.scala @@ -0,0 +1,92 @@ +package de.zalando.model +import de.zalando.apifirst.Application._ +import de.zalando.apifirst.Domain._ +import de.zalando.apifirst.ParameterPlace +import de.zalando.apifirst.naming._ +import de.zalando.apifirst.Hypermedia._ +import de.zalando.apifirst.Http._ +import de.zalando.apifirst.Security +import java.net.URL +import Security._ +//noinspection ScalaStyle +object foodpanda_yaml extends WithModel { + + def types = Map[Reference, Type]( + Reference("⌿definitions⌿VendorsResponse") → + TypeDef(Reference("⌿definitions⌿VendorsResponse"), + Seq( + Field(Reference("⌿definitions⌿VendorsResponse⌿total_hits"), Intgr(TypeMeta(Some("int32"), List("min(0.toInt, false)")))), + Field(Reference("⌿definitions⌿VendorsResponse⌿vendors"), Opt(ArrResult(TypeRef(Reference("⌿definitions⌿Vendor")), TypeMeta(None, List())), TypeMeta(None, List()))) + ), TypeMeta(Some("Named types: 2"), List())), + Reference("⌿definitions⌿Location") → + TypeDef(Reference("⌿definitions⌿Location"), + Seq( + Field(Reference("⌿definitions⌿Location⌿latitude"), Flt(TypeMeta(Some("float"), List("max(90.toFloat, false)", "min(-90.toFloat, false)")))), + Field(Reference("⌿definitions⌿Location⌿longitude"), Flt(TypeMeta(Some("float"), List("max(180.toFloat, false)", "min(-180.toFloat, false)")))) + ), TypeMeta(Some("Named types: 2"), List())), + Reference("⌿definitions⌿Vendor") → + TypeDef(Reference("⌿definitions⌿Vendor"), + Seq( + Field(Reference("⌿definitions⌿Vendor⌿id"), Lng(TypeMeta(Some("int64"), List("min(1.toLong, false)")))), + Field(Reference("⌿definitions⌿Vendor⌿location"), Opt(TypeRef(Reference("⌿definitions⌿Location")), TypeMeta(None, List()))) + ), TypeMeta(Some("Named types: 2"), List())), + Reference("⌿definitions⌿VendorQuery") → + TypeDef(Reference("⌿definitions⌿VendorQuery"), + Seq( + Field(Reference("⌿definitions⌿VendorQuery⌿vendor_codes"), Opt(ArrResult(Str(None, TypeMeta(None, List())), TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿VendorQuery⌿includes"), Opt(TypeRef(Reference("⌿definitions⌿VendorQuery⌿includes⌿Option⌿Enum")), TypeMeta(None, List()))) + ), TypeMeta(Some("Named types: 2"), List())), + Reference("⌿definitions⌿VendorQuery⌿includes⌿Option⌿Enum") → + EnumTrait(Str(None, TypeMeta(None, List("""enum("menus,payments")"""))), TypeMeta(None, List("""enum("menus,payments")""")), + Set( + EnumObject(Str(None, TypeMeta(None, List("""enum("menus,payments")"""))), "menus", TypeMeta(Some("menus"), List())), + EnumObject(Str(None, TypeMeta(None, List("""enum("menus,payments")"""))), "payments", TypeMeta(Some("payments"), List())) + + )), + Reference("⌿paths⌿/vendors⌿get⌿responses⌿200") → + Intgr(TypeMeta(Some("int32"), List())), + Reference("⌿definitions⌿VendorQuery⌿includes⌿Option⌿Enum⌿menus") → + EnumObject(Str(None, TypeMeta(None, List("""enum("menus,payments")"""))), "menus", TypeMeta(Some("menus"), List())), + Reference("⌿definitions⌿VendorQuery⌿includes⌿Option⌿Enum⌿payments") → + EnumObject(Str(None, TypeMeta(None, List("""enum("menus,payments")"""))), "payments", TypeMeta(Some("payments"), List())) + ) + + def parameters = Map[ParameterRef, Parameter]( + ParameterRef( Reference("⌿paths⌿/vendors⌿get⌿query")) → Parameter("query", TypeRef(Reference("⌿definitions⌿VendorQuery")), None, None, ".+", encode = false, ParameterPlace.withName("body")) + ) + def basePath: String = "/api" + def discriminators: DiscriminatorLookupTable = Map[Reference, Reference]( + ) + def securityDefinitions: SecurityDefinitionsTable = Map[String, Security.Definition]( + + ) + def stateTransitions: StateTransitionsTable = Map[State, Map[State, TransitionProperties]]() + def calls: Seq[ApiCall] = Seq( + ApiCall(GET, Path(Reference("⌿vendors")), + HandlerCall( + "com.foodpanda.popsey.api", + "FoodpandaYaml", + instantiate = false, + "searchVendors",parameters = + Seq( + ParameterRef(Reference("⌿paths⌿/vendors⌿get⌿query")) + ) + ), + Set.empty[MimeType], + Set(MimeType("application/json")), + Map.empty[String, Seq[Class[Exception]]], + TypesResponseInfo( + Map[Int, ParameterRef]( + 200 -> ParameterRef(Reference("⌿paths⌿/vendors⌿get⌿responses⌿200")) + ), None), + StateResponseInfo( + Map[Int, State]( + 200 -> Self + ), None), + Set.empty[Security.Constraint])) + + def packageName: Option[String] = Some("com.foodpanda.popsey.api") + + def model = new StrictModel(calls, types, parameters, discriminators, basePath, packageName, stateTransitions, securityDefinitions) + +} diff --git a/api-first-core/src/test/scala/model/resources.hackweek_yaml.scala b/api-first-core/src/test/scala/model/resources.hackweek_yaml.scala index 1baeb651..c6253d7f 100644 --- a/api-first-core/src/test/scala/model/resources.hackweek_yaml.scala +++ b/api-first-core/src/test/scala/model/resources.hackweek_yaml.scala @@ -7,21 +7,21 @@ import de.zalando.apifirst.Hypermedia._ import de.zalando.apifirst.Http._ import de.zalando.apifirst.Security import java.net.URL -import Security._ +import Security._ //noinspection ScalaStyle object hackweek_yaml extends WithModel { - + def types = Map[Reference, Type]( - Reference("⌿definitions⌿ModelSchemaRoot") → - TypeDef(Reference("⌿definitions⌿ModelSchemaRoot"), + Reference("⌿definitions⌿ModelSchemaRoot") → + TypeDef(Reference("⌿definitions⌿ModelSchemaRoot"), Seq( - Field(Reference("⌿definitions⌿ModelSchemaRoot⌿data"), Opt(TypeDef(Reference("⌿definitions⌿ModelSchema"), + Field(Reference("⌿definitions⌿ModelSchemaRoot⌿data"), Opt(TypeDef(Reference("⌿definitions⌿ModelSchema"), Seq( Field(Reference("⌿definitions⌿ModelSchema⌿name"), Str(None, TypeMeta(Some("Product name"), List()))), Field(Reference("⌿definitions⌿ModelSchema⌿description"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), Field(Reference("⌿definitions⌿ModelSchema⌿sizeRegister"), Str(None, TypeMeta(None, List("maxLength(10)", "minLength(10)", """pattern("""+"""""""""+"""/[1-9][A-Z0-9]*/"""+"""""""""+""".r)""")))), Field(Reference("⌿definitions⌿ModelSchema⌿brand"), Str(None, TypeMeta(Some("Zalando brand code"), List("maxLength(3)", "minLength(3)", """pattern("""+"""""""""+"""/[A-Z0-9]{3,3}/"""+"""""""""+""".r)""")))), - Field(Reference("⌿definitions⌿ModelSchema⌿ageGroups"), ArrResult( EnumTrait(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), TypeMeta(None, List("""enum("baby,kid,teen,adult")""")), + Field(Reference("⌿definitions⌿ModelSchema⌿ageGroups"), ArrResult( EnumTrait(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), TypeMeta(None, List("""enum("baby,kid,teen,adult")""")), Set( EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "baby", TypeMeta(Some("baby"), List())), EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "kid", TypeMeta(Some("kid"), List())), @@ -32,7 +32,7 @@ object hackweek_yaml extends WithModel { Field(Reference("⌿definitions⌿ModelSchema⌿partnerArticleModelId"), BInt(TypeMeta(Some("???"), List()))), Field(Reference("⌿definitions⌿ModelSchema⌿keywords"), Opt(Str(None, TypeMeta(Some("Product Keywords. Comma-Space (', ') separated Keyword List. A keyword may contain letters both upper and lowercase as well as numbers and spaces. Each keyword has a maximum length of 255 characters. "), List("""pattern("""+"""""""""+"""/([\w\s]{1,255}|([\w\s]{1,255}, )+[\w\s]{1,255})/"""+"""""""""+""".r)"""))), TypeMeta(None, List()))), Field(Reference("⌿definitions⌿ModelSchema⌿lengthRegister"), Opt(Str(None, TypeMeta(Some("Zalando Product Length Grid"), List("maxLength(10)", "minLength(10)", """pattern("""+"""""""""+"""/[1-9][A-Z0-9]*/"""+"""""""""+""".r)"""))), TypeMeta(None, List()))), - Field(Reference("⌿definitions⌿ModelSchema⌿silhouetteId"), EnumTrait(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")""")), + Field(Reference("⌿definitions⌿ModelSchema⌿silhouetteId"), EnumTrait(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")""")), Set( EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "vest", TypeMeta(Some("vest"), List())), EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "ski", TypeMeta(Some("ski"), List())), @@ -132,22 +132,22 @@ object hackweek_yaml extends WithModel { Field(Reference("⌿definitions⌿ModelSchema⌿specialDescriptions"), Opt(ArrResult(Str(None, TypeMeta(Some("Each occurance of the 'specialDescription' node will be transformed into a single line in the Zalando Shop Frontend "), List())), TypeMeta(None, List())), TypeMeta(None, List()))), Field(Reference("⌿definitions⌿ModelSchema⌿articleModelAttributes"), Opt(ArrResult(Str(None, TypeMeta(None, List())), TypeMeta(Some("Optional collection of product attributes - if present at least one attribute is required "), List("minItems(1)"))), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 11"), List())), TypeMeta(None, List()))), - Field(Reference("⌿definitions⌿ModelSchemaRoot⌿meta"), Opt(TypeDef(Reference("⌿definitions⌿Meta"), + Field(Reference("⌿definitions⌿ModelSchemaRoot⌿meta"), Opt(TypeDef(Reference("⌿definitions⌿Meta"), Seq( Field(Reference("⌿definitions⌿Meta⌿copyright"), Opt(Str(None, TypeMeta(Some("Zalando SE Copyright notice"), List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 1"), List())), TypeMeta(None, List()))), - Field(Reference("⌿definitions⌿ModelSchemaRoot⌿links"), Opt(TypeDef(Reference("⌿definitions⌿Links"), + Field(Reference("⌿definitions⌿ModelSchemaRoot⌿links"), Opt(TypeDef(Reference("⌿definitions⌿Links"), Seq( Field(Reference("⌿definitions⌿Links⌿self"), Opt(Str(None, TypeMeta(Some("The link that generated the current response document"), List())), TypeMeta(None, List()))), Field(Reference("⌿definitions⌿Links⌿related"), Opt(Str(None, TypeMeta(Some("A related resource link when the primary data represents a resource relationship"), List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 2"), List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 3"), List())), - Reference("⌿definitions⌿Errors") → - TypeDef(Reference("⌿definitions⌿Errors"), + Reference("⌿definitions⌿Errors") → + TypeDef(Reference("⌿definitions⌿Errors"), Seq( - Field(Reference("⌿definitions⌿Errors⌿errors"), Opt(ArrResult(TypeDef(Reference("⌿definitions⌿Error"), + Field(Reference("⌿definitions⌿Errors⌿errors"), Opt(ArrResult(TypeDef(Reference("⌿definitions⌿Error"), Seq( - Field(Reference("⌿definitions⌿Error⌿source"), Opt(TypeDef(Reference("⌿definitions⌿ErrorSource"), + Field(Reference("⌿definitions⌿Error⌿source"), Opt(TypeDef(Reference("⌿definitions⌿ErrorSource"), Seq( Field(Reference("⌿definitions⌿ErrorSource⌿pointer"), Opt(Str(None, TypeMeta(Some("""A JSON Pointer [RFC6901] to the associated entity in the request document [e.g. "/data" for a primary data object, or "/data/attributes/title" for a specific attribute]."""), List())), TypeMeta(None, List()))), Field(Reference("⌿definitions⌿ErrorSource⌿parameter"), Opt(Str(None, TypeMeta(Some("A string indicating which URI query parameter caused the error."), List())), TypeMeta(None, List()))) @@ -158,25 +158,25 @@ object hackweek_yaml extends WithModel { Field(Reference("⌿definitions⌿Error⌿title"), Opt(Str(None, TypeMeta(Some("A short, human-readable summary of the problem that SHOULD NOT change from occurrence to occurrenc of the problem, except for purposes of localization."), List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 5"), List())), TypeMeta(Some("All errors"), List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 1"), List())), - Reference("⌿definitions⌿ErrorSource") → - TypeDef(Reference("⌿definitions⌿ErrorSource"), + Reference("⌿definitions⌿ErrorSource") → + TypeDef(Reference("⌿definitions⌿ErrorSource"), Seq( Field(Reference("⌿definitions⌿ErrorSource⌿pointer"), Opt(Str(None, TypeMeta(Some("""A JSON Pointer [RFC6901] to the associated entity in the request document [e.g. "/data" for a primary data object, or "/data/attributes/title" for a specific attribute]."""), List())), TypeMeta(None, List()))), Field(Reference("⌿definitions⌿ErrorSource⌿parameter"), Opt(Str(None, TypeMeta(Some("A string indicating which URI query parameter caused the error."), List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 2"), List())), - Reference("⌿definitions⌿Meta") → - TypeDef(Reference("⌿definitions⌿Meta"), + Reference("⌿definitions⌿Meta") → + TypeDef(Reference("⌿definitions⌿Meta"), Seq( Field(Reference("⌿definitions⌿Meta⌿copyright"), Opt(Str(None, TypeMeta(Some("Zalando SE Copyright notice"), List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 1"), List())), - Reference("⌿definitions⌿ModelSchema") → - TypeDef(Reference("⌿definitions⌿ModelSchema"), + Reference("⌿definitions⌿ModelSchema") → + TypeDef(Reference("⌿definitions⌿ModelSchema"), Seq( Field(Reference("⌿definitions⌿ModelSchema⌿name"), Str(None, TypeMeta(Some("Product name"), List()))), Field(Reference("⌿definitions⌿ModelSchema⌿description"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), Field(Reference("⌿definitions⌿ModelSchema⌿sizeRegister"), Str(None, TypeMeta(None, List("maxLength(10)", "minLength(10)", """pattern("""+"""""""""+"""/[1-9][A-Z0-9]*/"""+"""""""""+""".r)""")))), Field(Reference("⌿definitions⌿ModelSchema⌿brand"), Str(None, TypeMeta(Some("Zalando brand code"), List("maxLength(3)", "minLength(3)", """pattern("""+"""""""""+"""/[A-Z0-9]{3,3}/"""+"""""""""+""".r)""")))), - Field(Reference("⌿definitions⌿ModelSchema⌿ageGroups"), ArrResult( EnumTrait(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), TypeMeta(None, List("""enum("baby,kid,teen,adult")""")), + Field(Reference("⌿definitions⌿ModelSchema⌿ageGroups"), ArrResult( EnumTrait(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), TypeMeta(None, List("""enum("baby,kid,teen,adult")""")), Set( EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "baby", TypeMeta(Some("baby"), List())), EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "kid", TypeMeta(Some("kid"), List())), @@ -187,7 +187,7 @@ object hackweek_yaml extends WithModel { Field(Reference("⌿definitions⌿ModelSchema⌿partnerArticleModelId"), BInt(TypeMeta(Some("???"), List()))), Field(Reference("⌿definitions⌿ModelSchema⌿keywords"), Opt(Str(None, TypeMeta(Some("Product Keywords. Comma-Space (', ') separated Keyword List. A keyword may contain letters both upper and lowercase as well as numbers and spaces. Each keyword has a maximum length of 255 characters. "), List("""pattern("""+"""""""""+"""/([\w\s]{1,255}|([\w\s]{1,255}, )+[\w\s]{1,255})/"""+"""""""""+""".r)"""))), TypeMeta(None, List()))), Field(Reference("⌿definitions⌿ModelSchema⌿lengthRegister"), Opt(Str(None, TypeMeta(Some("Zalando Product Length Grid"), List("maxLength(10)", "minLength(10)", """pattern("""+"""""""""+"""/[1-9][A-Z0-9]*/"""+"""""""""+""".r)"""))), TypeMeta(None, List()))), - Field(Reference("⌿definitions⌿ModelSchema⌿silhouetteId"), EnumTrait(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")""")), + Field(Reference("⌿definitions⌿ModelSchema⌿silhouetteId"), EnumTrait(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")""")), Set( EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "low_shoe", TypeMeta(Some("low_shoe"), List())), EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "headphones", TypeMeta(Some("headphones"), List())), @@ -287,10 +287,10 @@ object hackweek_yaml extends WithModel { Field(Reference("⌿definitions⌿ModelSchema⌿specialDescriptions"), Opt(ArrResult(Str(None, TypeMeta(Some("Each occurance of the 'specialDescription' node will be transformed into a single line in the Zalando Shop Frontend "), List())), TypeMeta(None, List())), TypeMeta(None, List()))), Field(Reference("⌿definitions⌿ModelSchema⌿articleModelAttributes"), Opt(ArrResult(Str(None, TypeMeta(None, List())), TypeMeta(Some("Optional collection of product attributes - if present at least one attribute is required "), List("minItems(1)"))), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 11"), List())), - Reference("⌿definitions⌿Error") → - TypeDef(Reference("⌿definitions⌿Error"), + Reference("⌿definitions⌿Error") → + TypeDef(Reference("⌿definitions⌿Error"), Seq( - Field(Reference("⌿definitions⌿Error⌿source"), Opt(TypeDef(Reference("⌿definitions⌿ErrorSource"), + Field(Reference("⌿definitions⌿Error⌿source"), Opt(TypeDef(Reference("⌿definitions⌿ErrorSource"), Seq( Field(Reference("⌿definitions⌿ErrorSource⌿pointer"), Opt(Str(None, TypeMeta(Some("""A JSON Pointer [RFC6901] to the associated entity in the request document [e.g. "/data" for a primary data object, or "/data/attributes/title" for a specific attribute]."""), List())), TypeMeta(None, List()))), Field(Reference("⌿definitions⌿ErrorSource⌿parameter"), Opt(Str(None, TypeMeta(Some("A string indicating which URI query parameter caused the error."), List())), TypeMeta(None, List()))) @@ -300,22 +300,22 @@ object hackweek_yaml extends WithModel { Field(Reference("⌿definitions⌿Error⌿detail"), Opt(Str(None, TypeMeta(Some("A human-readable explanation specific to this occurrence of the problem."), List())), TypeMeta(None, List()))), Field(Reference("⌿definitions⌿Error⌿title"), Opt(Str(None, TypeMeta(Some("A short, human-readable summary of the problem that SHOULD NOT change from occurrence to occurrenc of the problem, except for purposes of localization."), List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 5"), List())), - Reference("⌿definitions⌿Links") → - TypeDef(Reference("⌿definitions⌿Links"), + Reference("⌿definitions⌿Links") → + TypeDef(Reference("⌿definitions⌿Links"), Seq( Field(Reference("⌿definitions⌿Links⌿self"), Opt(Str(None, TypeMeta(Some("The link that generated the current response document"), List())), TypeMeta(None, List()))), Field(Reference("⌿definitions⌿Links⌿related"), Opt(Str(None, TypeMeta(Some("A related resource link when the primary data represents a resource relationship"), List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 2"), List())), - Reference("⌿paths⌿/schema/model⌿get⌿root") → - TypeDef(Reference("⌿definitions⌿ModelSchemaRoot"), + Reference("⌿paths⌿/schema/model⌿get⌿root") → + TypeDef(Reference("⌿definitions⌿ModelSchemaRoot"), Seq( - Field(Reference("⌿definitions⌿ModelSchemaRoot⌿data"), Opt(TypeDef(Reference("⌿definitions⌿ModelSchema"), + Field(Reference("⌿definitions⌿ModelSchemaRoot⌿data"), Opt(TypeDef(Reference("⌿definitions⌿ModelSchema"), Seq( Field(Reference("⌿definitions⌿ModelSchema⌿name"), Str(None, TypeMeta(Some("Product name"), List()))), Field(Reference("⌿definitions⌿ModelSchema⌿description"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), Field(Reference("⌿definitions⌿ModelSchema⌿sizeRegister"), Str(None, TypeMeta(None, List("maxLength(10)", "minLength(10)", """pattern("""+"""""""""+"""/[1-9][A-Z0-9]*/"""+"""""""""+""".r)""")))), Field(Reference("⌿definitions⌿ModelSchema⌿brand"), Str(None, TypeMeta(Some("Zalando brand code"), List("maxLength(3)", "minLength(3)", """pattern("""+"""""""""+"""/[A-Z0-9]{3,3}/"""+"""""""""+""".r)""")))), - Field(Reference("⌿definitions⌿ModelSchema⌿ageGroups"), ArrResult( EnumTrait(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), TypeMeta(None, List("""enum("baby,kid,teen,adult")""")), + Field(Reference("⌿definitions⌿ModelSchema⌿ageGroups"), ArrResult( EnumTrait(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), TypeMeta(None, List("""enum("baby,kid,teen,adult")""")), Set( EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "baby", TypeMeta(Some("baby"), List())), EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "kid", TypeMeta(Some("kid"), List())), @@ -326,7 +326,7 @@ object hackweek_yaml extends WithModel { Field(Reference("⌿definitions⌿ModelSchema⌿partnerArticleModelId"), BInt(TypeMeta(Some("???"), List()))), Field(Reference("⌿definitions⌿ModelSchema⌿keywords"), Opt(Str(None, TypeMeta(Some("Product Keywords. Comma-Space (', ') separated Keyword List. A keyword may contain letters both upper and lowercase as well as numbers and spaces. Each keyword has a maximum length of 255 characters. "), List("""pattern("""+"""""""""+"""/([\w\s]{1,255}|([\w\s]{1,255}, )+[\w\s]{1,255})/"""+"""""""""+""".r)"""))), TypeMeta(None, List()))), Field(Reference("⌿definitions⌿ModelSchema⌿lengthRegister"), Opt(Str(None, TypeMeta(Some("Zalando Product Length Grid"), List("maxLength(10)", "minLength(10)", """pattern("""+"""""""""+"""/[1-9][A-Z0-9]*/"""+"""""""""+""".r)"""))), TypeMeta(None, List()))), - Field(Reference("⌿definitions⌿ModelSchema⌿silhouetteId"), EnumTrait(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")""")), + Field(Reference("⌿definitions⌿ModelSchema⌿silhouetteId"), EnumTrait(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")""")), Set( EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "vest", TypeMeta(Some("vest"), List())), EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "ski", TypeMeta(Some("ski"), List())), @@ -426,26 +426,26 @@ object hackweek_yaml extends WithModel { Field(Reference("⌿definitions⌿ModelSchema⌿specialDescriptions"), Opt(ArrResult(Str(None, TypeMeta(Some("Each occurance of the 'specialDescription' node will be transformed into a single line in the Zalando Shop Frontend "), List())), TypeMeta(None, List())), TypeMeta(None, List()))), Field(Reference("⌿definitions⌿ModelSchema⌿articleModelAttributes"), Opt(ArrResult(Str(None, TypeMeta(None, List())), TypeMeta(Some("Optional collection of product attributes - if present at least one attribute is required "), List("minItems(1)"))), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 11"), List())), TypeMeta(None, List()))), - Field(Reference("⌿definitions⌿ModelSchemaRoot⌿meta"), Opt(TypeDef(Reference("⌿definitions⌿Meta"), + Field(Reference("⌿definitions⌿ModelSchemaRoot⌿meta"), Opt(TypeDef(Reference("⌿definitions⌿Meta"), Seq( Field(Reference("⌿definitions⌿Meta⌿copyright"), Opt(Str(None, TypeMeta(Some("Zalando SE Copyright notice"), List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 1"), List())), TypeMeta(None, List()))), - Field(Reference("⌿definitions⌿ModelSchemaRoot⌿links"), Opt(TypeDef(Reference("⌿definitions⌿Links"), + Field(Reference("⌿definitions⌿ModelSchemaRoot⌿links"), Opt(TypeDef(Reference("⌿definitions⌿Links"), Seq( Field(Reference("⌿definitions⌿Links⌿self"), Opt(Str(None, TypeMeta(Some("The link that generated the current response document"), List())), TypeMeta(None, List()))), Field(Reference("⌿definitions⌿Links⌿related"), Opt(Str(None, TypeMeta(Some("A related resource link when the primary data represents a resource relationship"), List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 2"), List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 3"), List())), - Reference("⌿paths⌿/schema/model⌿get⌿responses⌿200") → - TypeDef(Reference("⌿definitions⌿ModelSchemaRoot"), + Reference("⌿paths⌿/schema/model⌿get⌿responses⌿200") → + TypeDef(Reference("⌿definitions⌿ModelSchemaRoot"), Seq( - Field(Reference("⌿definitions⌿ModelSchemaRoot⌿data"), Opt(TypeDef(Reference("⌿definitions⌿ModelSchema"), + Field(Reference("⌿definitions⌿ModelSchemaRoot⌿data"), Opt(TypeDef(Reference("⌿definitions⌿ModelSchema"), Seq( Field(Reference("⌿definitions⌿ModelSchema⌿name"), Str(None, TypeMeta(Some("Product name"), List()))), Field(Reference("⌿definitions⌿ModelSchema⌿description"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), Field(Reference("⌿definitions⌿ModelSchema⌿sizeRegister"), Str(None, TypeMeta(None, List("maxLength(10)", "minLength(10)", """pattern("""+"""""""""+"""/[1-9][A-Z0-9]*/"""+"""""""""+""".r)""")))), Field(Reference("⌿definitions⌿ModelSchema⌿brand"), Str(None, TypeMeta(Some("Zalando brand code"), List("maxLength(3)", "minLength(3)", """pattern("""+"""""""""+"""/[A-Z0-9]{3,3}/"""+"""""""""+""".r)""")))), - Field(Reference("⌿definitions⌿ModelSchema⌿ageGroups"), ArrResult( EnumTrait(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), TypeMeta(None, List("""enum("baby,kid,teen,adult")""")), + Field(Reference("⌿definitions⌿ModelSchema⌿ageGroups"), ArrResult( EnumTrait(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), TypeMeta(None, List("""enum("baby,kid,teen,adult")""")), Set( EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "baby", TypeMeta(Some("baby"), List())), EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "kid", TypeMeta(Some("kid"), List())), @@ -456,7 +456,7 @@ object hackweek_yaml extends WithModel { Field(Reference("⌿definitions⌿ModelSchema⌿partnerArticleModelId"), BInt(TypeMeta(Some("???"), List()))), Field(Reference("⌿definitions⌿ModelSchema⌿keywords"), Opt(Str(None, TypeMeta(Some("Product Keywords. Comma-Space (', ') separated Keyword List. A keyword may contain letters both upper and lowercase as well as numbers and spaces. Each keyword has a maximum length of 255 characters. "), List("""pattern("""+"""""""""+"""/([\w\s]{1,255}|([\w\s]{1,255}, )+[\w\s]{1,255})/"""+"""""""""+""".r)"""))), TypeMeta(None, List()))), Field(Reference("⌿definitions⌿ModelSchema⌿lengthRegister"), Opt(Str(None, TypeMeta(Some("Zalando Product Length Grid"), List("maxLength(10)", "minLength(10)", """pattern("""+"""""""""+"""/[1-9][A-Z0-9]*/"""+"""""""""+""".r)"""))), TypeMeta(None, List()))), - Field(Reference("⌿definitions⌿ModelSchema⌿silhouetteId"), EnumTrait(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")""")), + Field(Reference("⌿definitions⌿ModelSchema⌿silhouetteId"), EnumTrait(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")""")), Set( EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "vest", TypeMeta(Some("vest"), List())), EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "ski", TypeMeta(Some("ski"), List())), @@ -556,28 +556,28 @@ object hackweek_yaml extends WithModel { Field(Reference("⌿definitions⌿ModelSchema⌿specialDescriptions"), Opt(ArrResult(Str(None, TypeMeta(Some("Each occurance of the 'specialDescription' node will be transformed into a single line in the Zalando Shop Frontend "), List())), TypeMeta(None, List())), TypeMeta(None, List()))), Field(Reference("⌿definitions⌿ModelSchema⌿articleModelAttributes"), Opt(ArrResult(Str(None, TypeMeta(None, List())), TypeMeta(Some("Optional collection of product attributes - if present at least one attribute is required "), List("minItems(1)"))), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 11"), List())), TypeMeta(None, List()))), - Field(Reference("⌿definitions⌿ModelSchemaRoot⌿meta"), Opt(TypeDef(Reference("⌿definitions⌿Meta"), + Field(Reference("⌿definitions⌿ModelSchemaRoot⌿meta"), Opt(TypeDef(Reference("⌿definitions⌿Meta"), Seq( Field(Reference("⌿definitions⌿Meta⌿copyright"), Opt(Str(None, TypeMeta(Some("Zalando SE Copyright notice"), List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 1"), List())), TypeMeta(None, List()))), - Field(Reference("⌿definitions⌿ModelSchemaRoot⌿links"), Opt(TypeDef(Reference("⌿definitions⌿Links"), + Field(Reference("⌿definitions⌿ModelSchemaRoot⌿links"), Opt(TypeDef(Reference("⌿definitions⌿Links"), Seq( Field(Reference("⌿definitions⌿Links⌿self"), Opt(Str(None, TypeMeta(Some("The link that generated the current response document"), List())), TypeMeta(None, List()))), Field(Reference("⌿definitions⌿Links⌿related"), Opt(Str(None, TypeMeta(Some("A related resource link when the primary data represents a resource relationship"), List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 2"), List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 3"), List())) -) - +) + def parameters = Map[ParameterRef, Parameter]( - ParameterRef( Reference("⌿paths⌿/schema/model⌿get⌿root")) → Parameter("root", TypeDef(Reference("⌿definitions⌿ModelSchemaRoot"), + ParameterRef( Reference("⌿paths⌿/schema/model⌿get⌿root")) → Parameter("root", TypeDef(Reference("⌿definitions⌿ModelSchemaRoot"), Seq( - Field(Reference("⌿definitions⌿ModelSchemaRoot⌿data"), Opt(TypeDef(Reference("⌿definitions⌿ModelSchema"), + Field(Reference("⌿definitions⌿ModelSchemaRoot⌿data"), Opt(TypeDef(Reference("⌿definitions⌿ModelSchema"), Seq( Field(Reference("⌿definitions⌿ModelSchema⌿name"), Str(None, TypeMeta(Some("Product name"), List()))), Field(Reference("⌿definitions⌿ModelSchema⌿description"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), Field(Reference("⌿definitions⌿ModelSchema⌿sizeRegister"), Str(None, TypeMeta(None, List("maxLength(10)", "minLength(10)", """pattern("""+"""""""""+"""/[1-9][A-Z0-9]*/"""+"""""""""+""".r)""")))), Field(Reference("⌿definitions⌿ModelSchema⌿brand"), Str(None, TypeMeta(Some("Zalando brand code"), List("maxLength(3)", "minLength(3)", """pattern("""+"""""""""+"""/[A-Z0-9]{3,3}/"""+"""""""""+""".r)""")))), - Field(Reference("⌿definitions⌿ModelSchema⌿ageGroups"), ArrResult( EnumTrait(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), TypeMeta(None, List("""enum("baby,kid,teen,adult")""")), + Field(Reference("⌿definitions⌿ModelSchema⌿ageGroups"), ArrResult( EnumTrait(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), TypeMeta(None, List("""enum("baby,kid,teen,adult")""")), Set( EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "baby", TypeMeta(Some("baby"), List())), EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "kid", TypeMeta(Some("kid"), List())), @@ -588,7 +588,7 @@ object hackweek_yaml extends WithModel { Field(Reference("⌿definitions⌿ModelSchema⌿partnerArticleModelId"), BInt(TypeMeta(Some("???"), List()))), Field(Reference("⌿definitions⌿ModelSchema⌿keywords"), Opt(Str(None, TypeMeta(Some("Product Keywords. Comma-Space (', ') separated Keyword List. A keyword may contain letters both upper and lowercase as well as numbers and spaces. Each keyword has a maximum length of 255 characters. "), List("""pattern("""+"""""""""+"""/([\w\s]{1,255}|([\w\s]{1,255}, )+[\w\s]{1,255})/"""+"""""""""+""".r)"""))), TypeMeta(None, List()))), Field(Reference("⌿definitions⌿ModelSchema⌿lengthRegister"), Opt(Str(None, TypeMeta(Some("Zalando Product Length Grid"), List("maxLength(10)", "minLength(10)", """pattern("""+"""""""""+"""/[1-9][A-Z0-9]*/"""+"""""""""+""".r)"""))), TypeMeta(None, List()))), - Field(Reference("⌿definitions⌿ModelSchema⌿silhouetteId"), EnumTrait(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")""")), + Field(Reference("⌿definitions⌿ModelSchema⌿silhouetteId"), EnumTrait(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")""")), Set( EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "night_trouser", TypeMeta(Some("night_trouser"), List())), EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "beach_shirt", TypeMeta(Some("beach_shirt"), List())), @@ -688,22 +688,22 @@ object hackweek_yaml extends WithModel { Field(Reference("⌿definitions⌿ModelSchema⌿specialDescriptions"), Opt(ArrResult(Str(None, TypeMeta(Some("Each occurance of the 'specialDescription' node will be transformed into a single line in the Zalando Shop Frontend "), List())), TypeMeta(None, List())), TypeMeta(None, List()))), Field(Reference("⌿definitions⌿ModelSchema⌿articleModelAttributes"), Opt(ArrResult(Str(None, TypeMeta(None, List())), TypeMeta(Some("Optional collection of product attributes - if present at least one attribute is required "), List("minItems(1)"))), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 11"), List())), TypeMeta(None, List()))), - Field(Reference("⌿definitions⌿ModelSchemaRoot⌿meta"), Opt(TypeDef(Reference("⌿definitions⌿Meta"), + Field(Reference("⌿definitions⌿ModelSchemaRoot⌿meta"), Opt(TypeDef(Reference("⌿definitions⌿Meta"), Seq( Field(Reference("⌿definitions⌿Meta⌿copyright"), Opt(Str(None, TypeMeta(Some("Zalando SE Copyright notice"), List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 1"), List())), TypeMeta(None, List()))), - Field(Reference("⌿definitions⌿ModelSchemaRoot⌿links"), Opt(TypeDef(Reference("⌿definitions⌿Links"), + Field(Reference("⌿definitions⌿ModelSchemaRoot⌿links"), Opt(TypeDef(Reference("⌿definitions⌿Links"), Seq( Field(Reference("⌿definitions⌿Links⌿self"), Opt(Str(None, TypeMeta(Some("The link that generated the current response document"), List())), TypeMeta(None, List()))), Field(Reference("⌿definitions⌿Links⌿related"), Opt(Str(None, TypeMeta(Some("A related resource link when the primary data represents a resource relationship"), List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 2"), List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 3"), List())), None, None, ".+", encode = false, ParameterPlace.withName("body")) -) - def basePath: String = "/boo" +) + def basePath: String = "/boo" def discriminators: DiscriminatorLookupTable = Map[Reference, Reference]( ) def securityDefinitions: SecurityDefinitionsTable = Map[String, Security.Definition]( - + ) def stateTransitions: StateTransitionsTable = Map[State, Map[State, TransitionProperties]]() def calls: Seq[ApiCall] = Seq( @@ -712,7 +712,7 @@ def calls: Seq[ApiCall] = Seq( "hackweek.yaml", "HackweekYaml", instantiate = false, - "getschemaModel",parameters = + "getschemaModel",parameters = Seq( ParameterRef(Reference("⌿paths⌿/schema/model⌿get⌿root")) ) @@ -733,5 +733,5 @@ def calls: Seq[ApiCall] = Seq( def packageName: Option[String] = Some("hackweek.yaml") def model = new StrictModel(calls, types, parameters, discriminators, basePath, packageName, stateTransitions, securityDefinitions) - -} \ No newline at end of file + +} diff --git a/play-scala-generator/src/main/scala/de/zalando/apifirst/generators/AstScalaPlayEnricher.scala b/play-scala-generator/src/main/scala/de/zalando/apifirst/generators/AstScalaPlayEnricher.scala index 5d0c2921..94535798 100644 --- a/play-scala-generator/src/main/scala/de/zalando/apifirst/generators/AstScalaPlayEnricher.scala +++ b/play-scala-generator/src/main/scala/de/zalando/apifirst/generators/AstScalaPlayEnricher.scala @@ -145,8 +145,10 @@ object DenotationNames { private val generatorsSuffix = "Generator" - def generator(r: Reference, table: DenotationTable): String = - append(typeNameDenotation(table, r), generatorsSuffix) + def generator(r: Reference, table: DenotationTable): String = { + val name = typeNameDenotation(table, r).replace("[", "").replace("]", "") + append(name, generatorsSuffix) + } private val validatorsSuffix = "Validator" @@ -183,7 +185,7 @@ object ReShaper { } def filterByType(tpe: String, table: DenotationTable): Iterable[Map[String, Any]] = table.collect { - case (r, m) if m.contains(tpe) => m(tpe) + case (_, denotation: Denotation) if denotation.contains(tpe) => denotation(tpe) } } @@ -226,4 +228,4 @@ object KeyCollector { case (ss, other) => Nil } -} \ No newline at end of file +} diff --git a/play-scala-generator/src/main/scala/de/zalando/apifirst/generators/CallTestsStep.scala b/play-scala-generator/src/main/scala/de/zalando/apifirst/generators/CallTestsStep.scala index 90abd7b8..f4949fa5 100644 --- a/play-scala-generator/src/main/scala/de/zalando/apifirst/generators/CallTestsStep.scala +++ b/play-scala-generator/src/main/scala/de/zalando/apifirst/generators/CallTestsStep.scala @@ -159,4 +159,4 @@ trait ActionResults extends EnrichmentStep[ApiCall] { } } -} \ No newline at end of file +} diff --git a/play-scala-generator/src/main/scala/de/zalando/apifirst/generators/DataGeneratorsStep.scala b/play-scala-generator/src/main/scala/de/zalando/apifirst/generators/DataGeneratorsStep.scala index 2505bfbd..a13d2ecf 100644 --- a/play-scala-generator/src/main/scala/de/zalando/apifirst/generators/DataGeneratorsStep.scala +++ b/play-scala-generator/src/main/scala/de/zalando/apifirst/generators/DataGeneratorsStep.scala @@ -112,4 +112,4 @@ trait DataGeneratorsStep extends EnrichmentStep[Type] { private def primitiveType(tpe: Type, t: DenotationTable) = s"arbitrary[${typeNameDenotation(t, tpe.name)}]" -} \ No newline at end of file +} diff --git a/play-scala-generator/src/main/scala/de/zalando/apifirst/generators/MarshallersStep.scala b/play-scala-generator/src/main/scala/de/zalando/apifirst/generators/MarshallersStep.scala index 5f712849..917635f3 100644 --- a/play-scala-generator/src/main/scala/de/zalando/apifirst/generators/MarshallersStep.scala +++ b/play-scala-generator/src/main/scala/de/zalando/apifirst/generators/MarshallersStep.scala @@ -44,10 +44,11 @@ trait MarshallersStep extends EnrichmentStep[StrictModel] { } yield (mime, resultType) requiredPairs map { p => val mime = p._1.replace('/', '_').replace('+', '_') + val typeName = p._2.replace("[", "").replace("]", "") Map( "mime_type" -> p._1, "result_type" -> p._2, - "writable_name" -> ScalaName.escape(s"writable_${mime}_${p._2})") + "writable_name" -> ScalaName.escape(s"writable_${mime}_${typeName}") ) } } diff --git a/play-scala-generator/src/main/scala/de/zalando/apifirst/generators/commonDataSteps.scala b/play-scala-generator/src/main/scala/de/zalando/apifirst/generators/commonDataSteps.scala index df037476..cc6d7bb3 100644 --- a/play-scala-generator/src/main/scala/de/zalando/apifirst/generators/commonDataSteps.scala +++ b/play-scala-generator/src/main/scala/de/zalando/apifirst/generators/commonDataSteps.scala @@ -1,12 +1,12 @@ package de.zalando.apifirst.generators -import de.zalando.apifirst.Application.{ StrictModel, ApiCall, Parameter } +import de.zalando.apifirst.Application.{ ApiCall, Parameter, StrictModel } import de.zalando.apifirst.Domain._ import de.zalando.apifirst.naming.Reference import scala.annotation.tailrec - import de.zalando.apifirst.ScalaName._ +import de.zalando.apifirst.TypeAnalyzer import de.zalando.apifirst.generators.DenotationNames._ /** @@ -76,7 +76,7 @@ trait CommonDataStep extends EnrichmentStep[Type] with CommonData { } -trait CommonData { +trait CommonData extends TypeAnalyzer { def app: StrictModel @@ -84,15 +84,19 @@ trait CommonData { case TypeRef(ref) => app.findType(ref) match { case p: PrimitiveType => useType(p.name, suffix, "") + case c: Container if isRecursiveContainerType(c) => getRecursiveContainerName(c, r, suffix) case d: TypeDef => useType(d.name, suffix, "") case _ => useType(ref, suffix, "") } case p: PrimitiveType => useType(p.name, suffix, "") - case TypeDef(name, _, _) if name.isDefinition && !r.isDefinition => - useType(name, suffix, "") + case TypeDef(name, _, _) if name.isDefinition && !r.isDefinition => useType(name, suffix, "") + case c: Container if isRecursiveContainerType(c) => getRecursiveContainerName(c, r, suffix) case _ => useType(r, suffix, "") } + protected def getRecursiveContainerName(c: Container, r: Reference, suffix: String) = + s"${c.name.simple}[${typeName(c.tpe, r, suffix)}]" + @tailrec protected final def memberName(t: Type, r: Reference, suffix: String = ""): String = t match { case TypeRef(ref) if !app.findType(ref).isInstanceOf[TypeRef] => memberName(app.findType(ref), ref, suffix) @@ -126,4 +130,4 @@ trait CommonData { fullName._2 } -} \ No newline at end of file +} diff --git a/play-scala-generator/src/main/scala/de/zalando/apifirst/generators/controllersStep.scala b/play-scala-generator/src/main/scala/de/zalando/apifirst/generators/controllersStep.scala index d36e5442..1f1c32dd 100644 --- a/play-scala-generator/src/main/scala/de/zalando/apifirst/generators/controllersStep.scala +++ b/play-scala-generator/src/main/scala/de/zalando/apifirst/generators/controllersStep.scala @@ -246,19 +246,19 @@ object PlayScalaControllerAnalyzer { } } -trait ParameterData { +trait ParameterData extends Denotator { def app: StrictModel def parameterMap(table: DenotationTable): ParameterRef => Map[String, String] = param => { val parameter = app.findParameter(param) val typeName = parameter.typeName - val commonTypeName = typeNameDenotation(table, typeName.name) + val commonTypeName = denotate(table, typeName) val (parser, parserType) = typeName match { case TypeRef(ref) => app.findType(ref) match { case Opt(underlyingType, _) => - val tpeName = typeNameDenotation(table, underlyingType.name) + val tpeName = denotate(table, underlyingType) ("optionParser", tpeName) case _ => ("anyParser", commonTypeName) } diff --git a/play-scala-generator/src/main/scala/de/zalando/apifirst/generators/modelSteps.scala b/play-scala-generator/src/main/scala/de/zalando/apifirst/generators/modelSteps.scala index 94dbfcd8..ce721386 100644 --- a/play-scala-generator/src/main/scala/de/zalando/apifirst/generators/modelSteps.scala +++ b/play-scala-generator/src/main/scala/de/zalando/apifirst/generators/modelSteps.scala @@ -2,7 +2,7 @@ package de.zalando.apifirst.generators import de.zalando.apifirst.Domain._ import de.zalando.apifirst.ScalaName._ -import de.zalando.apifirst.StringUtil +import de.zalando.apifirst.{ StringUtil, TypeAnalyzer } import de.zalando.apifirst.naming.Reference import de.zalando.apifirst.generators.DenotationNames._ @@ -11,7 +11,7 @@ import de.zalando.apifirst.generators.DenotationNames._ * @since 30.12.2015. */ -trait ClassesStep extends EnrichmentStep[Type] { +trait ClassesStep extends EnrichmentStep[Type] with Denotator { override def steps: Seq[SingleStep] = classes +: super.steps @@ -45,10 +45,11 @@ trait ClassesStep extends EnrichmentStep[Type] { if (underlying.isInstanceOf[Opt]) Option(typeNameDenotation(table, underlying.asInstanceOf[Opt].nestedTypes.head.name)) else None case _ => None } + Map( "name" -> escape(f.name.simple), "nullable_type_name" -> nullableType, - TYPE_NAME -> typeNameDenotation(table, f.tpe.name) + TYPE_NAME -> denotate(table, f.tpe) ) }, "imports" -> t.realImports @@ -113,7 +114,7 @@ trait TraitsStep extends EnrichmentStep[Type] { protected def typeDefProps(k: Reference, t: Type)(table: DenotationTable): Map[String, Any] // FIXME should be defined only once } -trait AliasesStep extends EnrichmentStep[Type] { +trait AliasesStep extends EnrichmentStep[Type] with Denotator with TypeAnalyzer { override def steps: Seq[SingleStep] = aliases +: super.steps @@ -124,7 +125,7 @@ trait AliasesStep extends EnrichmentStep[Type] { */ protected val aliases: SingleStep = typeDef => table => typeDef match { case (ref, t: EnumType) => empty - case (ref, t: Container) => + case (ref, t: Container) if !isRecursiveContainerType(t) => Map("aliases" -> aliasProps(ref, t)(table)) case (k, v: Null) => @@ -139,9 +140,7 @@ trait AliasesStep extends EnrichmentStep[Type] { Map( "name" -> typeNameDenotation(table, k), "alias" -> v.name.simple, - "underlying_type" -> v.nestedTypes.map { t => - abstractTypeNameDenotation(table, t.name).getOrElse(typeNameDenotation(table, t.name)) - }.mkString("[", ", ", "]"), + "underlying_type" -> v.nestedTypes.map { denotateWithAbstract(table, _) }.mkString("[", ", ", "]"), "imports" -> v.realImports ) } @@ -154,4 +153,20 @@ trait AliasesStep extends EnrichmentStep[Type] { "underlying_type" -> "" ) } -} \ No newline at end of file +} + +trait Denotator extends TypeAnalyzer { + + protected def denotate(table: DenotationTable, t: Type): String = t match { + case c: Container if isRecursiveContainerType(t) => + s"${typeNameDenotation(table, c.name)}[${denotate(table, c.tpe)}]" + case other => typeNameDenotation(table, other.name) + } + + protected def denotateWithAbstract(table: DenotationTable, t: Type): String = t match { + case c: Container if isRecursiveContainerType(t) => + s"${typeNameDenotation(table, c.name)}[${denotateWithAbstract(table, c.tpe)}]" + case other => + abstractTypeNameDenotation(table, other.name).getOrElse(typeNameDenotation(table, other.name)) + } +} diff --git a/play-scala-generator/src/main/scala/de/zalando/apifirst/generators/validationSteps.scala b/play-scala-generator/src/main/scala/de/zalando/apifirst/generators/validationSteps.scala index acef7ace..67aca116 100644 --- a/play-scala-generator/src/main/scala/de/zalando/apifirst/generators/validationSteps.scala +++ b/play-scala-generator/src/main/scala/de/zalando/apifirst/generators/validationSteps.scala @@ -54,7 +54,7 @@ trait CallValidatorsStep extends EnrichmentStep[ApiCall] with ValidatorsCommon { } -trait ParametersValidatorsStep extends EnrichmentStep[Parameter] with ValidatorsCommon { +trait ParametersValidatorsStep extends EnrichmentStep[Parameter] with ValidatorsCommon with CommonData { override def steps: Seq[SingleStep] = callValidators +: super.steps @@ -147,7 +147,7 @@ trait ParametersValidatorsStep extends EnrichmentStep[Parameter] with Validators private def delegateName(r: Reference, t: Type, suffix: String): Reference = { t match { case p: PrimitiveType => r / suffix - case t: CatchAll => r / suffix + case p: Container => r / suffix case _ => t.name } } @@ -160,7 +160,7 @@ trait ParametersValidatorsStep extends EnrichmentStep[Parameter] with Validators case f if constraints0(f.name -> f.tpe).nonEmpty => Map( "field_name" -> escape(f.name.simple), - "validation_name" -> validator(fieldName(f), table) + "validation_name" -> validator(f.name, table) ) } ) @@ -180,7 +180,10 @@ trait ParametersValidatorsStep extends EnrichmentStep[Parameter] with Validators } private def optValidations(r: Reference, t: Container, delegateName: Reference)(implicit table: DenotationTable) = { - val typeName = typeNameDenotation(table, r) + val typeName = t match { + case c: Container if isRecursiveContainerType(c) => getRecursiveContainerName(t, r, "") + case _ => typeNameDenotation(table, r) + } val nonEmptyConstraints = t.meta.constraints.filterNot(_.isEmpty) Map( "restrictions" -> nonEmptyConstraints.zipWithIndex.map { @@ -222,8 +225,6 @@ trait ParametersValidatorsStep extends EnrichmentStep[Parameter] with Validators ) } - def fieldName(f: Field): TypeName = if (f.tpe.isInstanceOf[PrimitiveType]) f.name else f.tpe.name - } trait ValidatorsCommon { @@ -237,4 +238,4 @@ trait ValidatorsCommon { def constraint(ref: Reference, table: DenotationTable): String = append(memberNameDenotation(table, ref), constraintsSuffix) -} \ No newline at end of file +} diff --git a/play-scala-generator/src/test/resources/expected_results/base_controllers/basic_polymorphism_yaml.base.scala b/play-scala-generator/src/test/resources/expected_results/base_controllers/basic_polymorphism_yaml.base.scala index 31edeae9..a1bed637 100644 --- a/play-scala-generator/src/test/resources/expected_results/base_controllers/basic_polymorphism_yaml.base.scala +++ b/play-scala-generator/src/test/resources/expected_results/base_controllers/basic_polymorphism_yaml.base.scala @@ -24,7 +24,7 @@ trait Basic_polymorphismYamlBase extends Controller with PlayBodyParsing { def Put200(headers: Seq[(String, String)] = Nil) = success(new EmptyReturn(200, headers){}) - private type putActionRequestType = (PutDummy) + private type putActionRequestType = (Option[Pet]) private type putActionType[T] = putActionRequestType => Future[PutType[T] forSome { type T }] @@ -39,9 +39,9 @@ trait Basic_polymorphismYamlBase extends Controller with PlayBodyParsing { val putActionConstructor = Action -def putAction[T] = (f: putActionType[T]) => putActionConstructor.async(putParser) { implicit request: Request[PutDummy] => +def putAction[T] = (f: putActionType[T]) => putActionConstructor.async(putParser) { implicit request: Request[Option[Pet]] => - def processValidputRequest(dummy: PutDummy): Either[Result, Future[PutType[_]]] = { + def processValidputRequest(dummy: Option[Pet]): Either[Result, Future[PutType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((dummy))) new PutValidator(dummy).errors match { @@ -55,7 +55,7 @@ def putAction[T] = (f: putActionType[T]) => putActionConstructor.async(putParser } - val dummy: PutDummy = request.body + val dummy: Option[Pet] = request.body diff --git a/play-scala-generator/src/test/resources/expected_results/base_controllers/echo_api_yaml.base.scala b/play-scala-generator/src/test/resources/expected_results/base_controllers/echo_api_yaml.base.scala index d2572edf..8bebd569 100644 --- a/play-scala-generator/src/test/resources/expected_results/base_controllers/echo_api_yaml.base.scala +++ b/play-scala-generator/src/test/resources/expected_results/base_controllers/echo_api_yaml.base.scala @@ -68,7 +68,7 @@ trait EchoApiYamlBase extends Controller with PlayBodyParsing { def Post200(resultF: Future[PostResponses200])(implicit writerP: String => Option[Writeable[PostResponses200]]) = resultF map { resultP => (new PostType[PostResponses200] { val statusCode = 200; val result = resultP; val writer = writerP }) } - private type postActionRequestType = (PostName, PostName) + private type postActionRequestType = (Option[String], Option[String]) private type postActionType[T] = postActionRequestType => Future[PostType[T] forSome { type T }] @@ -76,7 +76,7 @@ trait EchoApiYamlBase extends Controller with PlayBodyParsing { def postAction[T] = (f: postActionType[T]) => postActionConstructor.async { implicit request: Request[AnyContent] => - def processValidpostRequest(name: PostName, year: PostName): Either[Result, Future[PostType[_]]] = { + def processValidpostRequest(name: Option[String], year: Option[String]): Either[Result, Future[PostType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((name, year))) new PostValidator(name, year).errors match { diff --git a/play-scala-generator/src/test/resources/expected_results/base_controllers/enum_yaml.base.scala b/play-scala-generator/src/test/resources/expected_results/base_controllers/enum_yaml.base.scala new file mode 100644 index 00000000..603ffe6c --- /dev/null +++ b/play-scala-generator/src/test/resources/expected_results/base_controllers/enum_yaml.base.scala @@ -0,0 +1,71 @@ +package enum.yaml + +import scala.language.existentials +import play.api.mvc._ +import play.api.http._ +import play.api.libs.json._ +import de.zalando.play.controllers._ +import Results.Status +import PlayBodyParsing._ +import scala.concurrent.Future + +import scala.util._ + +import de.zalando.play.controllers.PlayPathBindables + + + +import de.zalando.play.controllers.ResponseWriters + + + +//noinspection ScalaStyle +trait EnumYamlBase extends Controller with PlayBodyParsing { + import play.api.libs.concurrent.Execution.Implicits.defaultContext + sealed trait GettestType[T] extends ResultWrapper[T] + def Gettest200(resultP: String)(implicit writerP: String => Option[Writeable[String]]) = success(new GettestType[String] { val statusCode = 200; val result = resultP; val writer = writerP }) + def Gettest200(resultF: Future[String])(implicit writerP: String => Option[Writeable[String]]) = resultF map { resultP => (new GettestType[String] { val statusCode = 200; val result = resultP; val writer = writerP }) } + + + private type gettestActionRequestType = (Option[TestGetIncludesOptionEnum]) + private type gettestActionType[T] = gettestActionRequestType => Future[GettestType[T] forSome { type T }] + + + val gettestActionConstructor = Action + +def gettestAction[T] = (f: gettestActionType[T]) => (includes: Option[TestGetIncludesOptionEnum]) => gettestActionConstructor.async { implicit request: Request[AnyContent] => + + def processValidgettestRequest(includes: Option[TestGetIncludesOptionEnum]): Either[Result, Future[GettestType[_]]] = { + lazy val apiFirstTempResultHolder = Right(f((includes))) + + new TestGetValidator(includes).errors match { + case e if e.isEmpty => + apiFirstTempResultHolder + case l => + import ResponseWriters.jsonParsingErrorsWrites + Left(BadRequest(Json.toJson(l))) + } + + + } + + + + + processValidgettestRequest(includes) match { + case Left(l) => success(l) + case Right(r: Future[GettestType[_] @unchecked]) => + val providedTypes = Seq[String]() + val result = negotiateContent(request.acceptedTypes, providedTypes) map { gettestResponseMimeType => + import MissingDefaultWrites._ + r.map(_.toResult(gettestResponseMimeType).getOrElse(Results.NotAcceptable)) + } + result getOrElse notAcceptable + } + + } + + abstract class EmptyReturn(override val statusCode: Int, headers: Seq[(String, String)]) extends ResultWrapper[Result] with GettestType[Result] { val result = Results.Status(statusCode).withHeaders(headers:_*); val writer = (x: String) => Some(new Writeable((_:Any) => emptyByteString, None)); override def toResult(mimeType: String): Option[play.api.mvc.Result] = Some(result) } + case object NotImplementedYetSync extends ResultWrapper[Results.EmptyContent] with GettestType[Results.EmptyContent] { val statusCode = 501; val result = Results.EmptyContent(); val writer = (x: String) => Some(new DefaultWriteables{}.writeableOf_EmptyContent); override def toResult(mimeType: String): Option[play.api.mvc.Result] = Some(Results.NotImplemented) } + lazy val NotImplementedYet = Future.successful(NotImplementedYetSync) +} diff --git a/play-scala-generator/src/test/resources/expected_results/base_controllers/expanded_polymorphism_yaml.base.scala b/play-scala-generator/src/test/resources/expected_results/base_controllers/expanded_polymorphism_yaml.base.scala index 3b82173e..8a6657b9 100644 --- a/play-scala-generator/src/test/resources/expected_results/base_controllers/expanded_polymorphism_yaml.base.scala +++ b/play-scala-generator/src/test/resources/expected_results/base_controllers/expanded_polymorphism_yaml.base.scala @@ -27,15 +27,15 @@ trait Expanded_polymorphismYamlBase extends Controller with PlayBodyParsing { def FindPetsNoSuchElementException(resultP: java.util.NoSuchElementException)(implicit writerP: String => Option[Writeable[java.lang.Exception]]) = success(new FindPetsType[java.util.NoSuchElementException] { val statusCode = 404; val result = resultP; val writer = writerP }) def FindPetsNoSuchElementException(resultF: Future[java.util.NoSuchElementException])(implicit writerP: String => Option[Writeable[java.lang.Exception]]) = resultF map { resultP => (new FindPetsType[java.util.NoSuchElementException] { val statusCode = 404; val result = resultP; val writer = writerP }) } - private type findPetsActionRequestType = (PetsGetTags, PetsGetLimit) + private type findPetsActionRequestType = (Option[ArrayWrapper[String]], Option[Int]) private type findPetsActionType[T] = findPetsActionRequestType => Future[FindPetsType[T] forSome { type T }] val findPetsActionConstructor = Action -def findPetsAction[T] = (f: findPetsActionType[T]) => (tags: PetsGetTags, limit: PetsGetLimit) => findPetsActionConstructor.async { implicit request: Request[AnyContent] => +def findPetsAction[T] = (f: findPetsActionType[T]) => (tags: Option[ArrayWrapper[String]], limit: Option[Int]) => findPetsActionConstructor.async { implicit request: Request[AnyContent] => - def processValidfindPetsRequest(tags: PetsGetTags, limit: PetsGetLimit): Either[Result, Future[FindPetsType[_]]] = { + def processValidfindPetsRequest(tags: Option[ArrayWrapper[String]], limit: Option[Int]): Either[Result, Future[FindPetsType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((tags, limit))) new PetsGetValidator(tags, limit).errors match { diff --git a/play-scala-generator/src/test/resources/expected_results/base_controllers/foodpanda_yaml.base.scala b/play-scala-generator/src/test/resources/expected_results/base_controllers/foodpanda_yaml.base.scala new file mode 100644 index 00000000..a9b0f3c8 --- /dev/null +++ b/play-scala-generator/src/test/resources/expected_results/base_controllers/foodpanda_yaml.base.scala @@ -0,0 +1,76 @@ +package com.foodpanda.popsey.api + +import scala.language.existentials +import play.api.mvc._ +import play.api.http._ +import play.api.libs.json._ +import de.zalando.play.controllers._ +import Results.Status +import PlayBodyParsing._ +import scala.concurrent.Future + +import scala.util._ + + + + +//noinspection ScalaStyle +trait FoodpandaYamlBase extends Controller with PlayBodyParsing { + import play.api.libs.concurrent.Execution.Implicits.defaultContext + sealed trait SearchVendorsType[T] extends ResultWrapper[T] + def SearchVendors200(resultP: Int)(implicit writerP: String => Option[Writeable[Int]]) = success(new SearchVendorsType[Int] { val statusCode = 200; val result = resultP; val writer = writerP }) + def SearchVendors200(resultF: Future[Int])(implicit writerP: String => Option[Writeable[Int]]) = resultF map { resultP => (new SearchVendorsType[Int] { val statusCode = 200; val result = resultP; val writer = writerP }) } + + + private type searchVendorsActionRequestType = (VendorQuery) + private type searchVendorsActionType[T] = searchVendorsActionRequestType => Future[SearchVendorsType[T] forSome { type T }] + + + import BodyReads._ + + val searchVendorsParser = parse.using { request => + request.contentType.map(_.toLowerCase(java.util.Locale.ENGLISH)) match { + + case other => play.api.mvc.BodyParsers.parse.error(Future.successful(UnsupportedMediaType(s"Invalid content type specified $other"))) + } + } + + val searchVendorsActionConstructor = Action + +def searchVendorsAction[T] = (f: searchVendorsActionType[T]) => searchVendorsActionConstructor.async(searchVendorsParser) { implicit request: Request[VendorQuery] => + + def processValidsearchVendorsRequest(query: VendorQuery): Either[Result, Future[SearchVendorsType[_]]] = { + lazy val apiFirstTempResultHolder = Right(f((query))) + + new VendorsGetValidator(query).errors match { + case e if e.isEmpty => + apiFirstTempResultHolder + case l => + import ResponseWriters.jsonParsingErrorsWrites + Left(BadRequest(Json.toJson(l))) + } + + + } + + val query: VendorQuery = request.body + + + + processValidsearchVendorsRequest(query) match { + case Left(l) => success(l) + case Right(r: Future[SearchVendorsType[_] @unchecked]) => + val providedTypes = Seq[String]("application/json") + val result = negotiateContent(request.acceptedTypes, providedTypes) map { searchVendorsResponseMimeType => + import MissingDefaultWrites._ + r.map(_.toResult(searchVendorsResponseMimeType).getOrElse(Results.NotAcceptable)) + } + result getOrElse notAcceptable + } + + } + + abstract class EmptyReturn(override val statusCode: Int, headers: Seq[(String, String)]) extends ResultWrapper[Result] with SearchVendorsType[Result] { val result = Results.Status(statusCode).withHeaders(headers:_*); val writer = (x: String) => Some(new Writeable((_:Any) => emptyByteString, None)); override def toResult(mimeType: String): Option[play.api.mvc.Result] = Some(result) } + case object NotImplementedYetSync extends ResultWrapper[Results.EmptyContent] with SearchVendorsType[Results.EmptyContent] { val statusCode = 501; val result = Results.EmptyContent(); val writer = (x: String) => Some(new DefaultWriteables{}.writeableOf_EmptyContent); override def toResult(mimeType: String): Option[play.api.mvc.Result] = Some(Results.NotImplemented) } + lazy val NotImplementedYet = Future.successful(NotImplementedYetSync) +} diff --git a/play-scala-generator/src/test/resources/expected_results/base_controllers/form_data_yaml.base.scala b/play-scala-generator/src/test/resources/expected_results/base_controllers/form_data_yaml.base.scala index eb021a62..03f18a0f 100644 --- a/play-scala-generator/src/test/resources/expected_results/base_controllers/form_data_yaml.base.scala +++ b/play-scala-generator/src/test/resources/expected_results/base_controllers/form_data_yaml.base.scala @@ -10,8 +10,8 @@ import PlayBodyParsing._ import scala.concurrent.Future import scala.util._ -import java.io.File import scala.math.BigInt +import java.io.File import de.zalando.play.controllers.PlayPathBindables @@ -26,7 +26,7 @@ trait Form_dataYamlBase extends Controller with PlayBodyParsing { def Postmultipart200(resultF: Future[MultipartPostResponses200])(implicit writerP: String => Option[Writeable[MultipartPostResponses200]]) = resultF map { resultP => (new PostmultipartType[MultipartPostResponses200] { val statusCode = 200; val result = resultP; val writer = writerP }) } - private type postmultipartActionRequestType = (String, BothPostYear, MultipartPostAvatar) + private type postmultipartActionRequestType = (String, Option[BigInt], Option[File]) private type postmultipartActionType[T] = postmultipartActionRequestType => Future[PostmultipartType[T] forSome { type T }] @@ -34,7 +34,7 @@ trait Form_dataYamlBase extends Controller with PlayBodyParsing { def postmultipartAction[T] = (f: postmultipartActionType[T]) => postmultipartActionConstructor.async { implicit request: Request[AnyContent] => - def processValidpostmultipartRequest(name: String, year: BothPostYear, avatar: MultipartPostAvatar): Either[Result, Future[PostmultipartType[_]]] = { + def processValidpostmultipartRequest(name: String, year: Option[BigInt], avatar: Option[File]): Either[Result, Future[PostmultipartType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((name, year, avatar))) new MultipartPostValidator(name, year, avatar).errors match { @@ -83,7 +83,7 @@ def postmultipartAction[T] = (f: postmultipartActionType[T]) => postmultipartAct def Posturl_encoded200(resultF: Future[MultipartPostResponses200])(implicit writerP: String => Option[Writeable[MultipartPostResponses200]]) = resultF map { resultP => (new Posturl_encodedType[MultipartPostResponses200] { val statusCode = 200; val result = resultP; val writer = writerP }) } - private type posturl_encodedActionRequestType = (String, BothPostYear, File) + private type posturl_encodedActionRequestType = (String, Option[BigInt], File) private type posturl_encodedActionType[T] = posturl_encodedActionRequestType => Future[Posturl_encodedType[T] forSome { type T }] @@ -91,7 +91,7 @@ def postmultipartAction[T] = (f: postmultipartActionType[T]) => postmultipartAct def posturl_encodedAction[T] = (f: posturl_encodedActionType[T]) => posturl_encodedActionConstructor.async { implicit request: Request[AnyContent] => - def processValidposturl_encodedRequest(name: String, year: BothPostYear, avatar: File): Either[Result, Future[Posturl_encodedType[_]]] = { + def processValidposturl_encodedRequest(name: String, year: Option[BigInt], avatar: File): Either[Result, Future[Posturl_encodedType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((name, year, avatar))) new Url_encodedPostValidator(name, year, avatar).errors match { @@ -140,7 +140,7 @@ def posturl_encodedAction[T] = (f: posturl_encodedActionType[T]) => posturl_enco def Postboth200(resultF: Future[BothPostResponses200])(implicit writerP: String => Option[Writeable[BothPostResponses200]]) = resultF map { resultP => (new PostbothType[BothPostResponses200] { val statusCode = 200; val result = resultP; val writer = writerP }) } - private type postbothActionRequestType = (String, BothPostYear, MultipartPostAvatar, File) + private type postbothActionRequestType = (String, Option[BigInt], Option[File], File) private type postbothActionType[T] = postbothActionRequestType => Future[PostbothType[T] forSome { type T }] @@ -148,7 +148,7 @@ def posturl_encodedAction[T] = (f: posturl_encodedActionType[T]) => posturl_enco def postbothAction[T] = (f: postbothActionType[T]) => postbothActionConstructor.async { implicit request: Request[AnyContent] => - def processValidpostbothRequest(name: String, year: BothPostYear, avatar: MultipartPostAvatar, ringtone: File): Either[Result, Future[PostbothType[_]]] = { + def processValidpostbothRequest(name: String, year: Option[BigInt], avatar: Option[File], ringtone: File): Either[Result, Future[PostbothType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((name, year, avatar, ringtone))) new BothPostValidator(name, year, avatar, ringtone).errors match { diff --git a/play-scala-generator/src/test/resources/expected_results/base_controllers/full_petstore_api_yaml.base.scala b/play-scala-generator/src/test/resources/expected_results/base_controllers/full_petstore_api_yaml.base.scala index 78422b3a..01af50f4 100644 --- a/play-scala-generator/src/test/resources/expected_results/base_controllers/full_petstore_api_yaml.base.scala +++ b/play-scala-generator/src/test/resources/expected_results/base_controllers/full_petstore_api_yaml.base.scala @@ -10,8 +10,8 @@ import PlayBodyParsing._ import scala.concurrent.Future import scala.util._ -import de.zalando.play.controllers.ArrayWrapper import java.time.ZonedDateTime +import de.zalando.play.controllers.ArrayWrapper import de.zalando.play.controllers.PlayPathBindables @@ -32,15 +32,15 @@ trait FullPetstoreApiYamlBase extends Controller with PlayBodyParsing with Full def FindPetsByTagsIndexOutOfBoundsException(resultP: java.lang.IndexOutOfBoundsException)(implicit writerP: String => Option[Writeable[java.lang.Exception]]) = success(new FindPetsByTagsType[java.lang.IndexOutOfBoundsException] { val statusCode = 405; val result = resultP; val writer = writerP }) def FindPetsByTagsIndexOutOfBoundsException(resultF: Future[java.lang.IndexOutOfBoundsException])(implicit writerP: String => Option[Writeable[java.lang.Exception]]) = resultF map { resultP => (new FindPetsByTagsType[java.lang.IndexOutOfBoundsException] { val statusCode = 405; val result = resultP; val writer = writerP }) } - private type findPetsByTagsActionRequestType = (PetsFindByStatusGetStatus) + private type findPetsByTagsActionRequestType = (Option[ArrayWrapper[String]]) private type findPetsByTagsActionType[T] = findPetsByTagsActionRequestType => Future[FindPetsByTagsType[T] forSome { type T }] val findPetsByTagsActionConstructor = new findPetsByTagsSecureAction("write_pets", "read_pets") -def findPetsByTagsAction[T] = (f: findPetsByTagsActionType[T]) => (tags: PetsFindByStatusGetStatus) => findPetsByTagsActionConstructor.async { implicit request: Request[AnyContent] => +def findPetsByTagsAction[T] = (f: findPetsByTagsActionType[T]) => (tags: Option[ArrayWrapper[String]]) => findPetsByTagsActionConstructor.async { implicit request: Request[AnyContent] => - def processValidfindPetsByTagsRequest(tags: PetsFindByStatusGetStatus): Either[Result, Future[FindPetsByTagsType[_]]] = { + def processValidfindPetsByTagsRequest(tags: Option[ArrayWrapper[String]]): Either[Result, Future[FindPetsByTagsType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((tags))) new PetsFindByTagsGetValidator(tags).errors match { @@ -81,7 +81,7 @@ def findPetsByTagsAction[T] = (f: findPetsByTagsActionType[T]) => (tags: PetsFin def PlaceOrderIndexOutOfBoundsException(resultP: java.lang.IndexOutOfBoundsException)(implicit writerP: String => Option[Writeable[java.lang.Exception]]) = success(new PlaceOrderType[java.lang.IndexOutOfBoundsException] { val statusCode = 405; val result = resultP; val writer = writerP }) def PlaceOrderIndexOutOfBoundsException(resultF: Future[java.lang.IndexOutOfBoundsException])(implicit writerP: String => Option[Writeable[java.lang.Exception]]) = resultF map { resultP => (new PlaceOrderType[java.lang.IndexOutOfBoundsException] { val statusCode = 405; val result = resultP; val writer = writerP }) } - private type placeOrderActionRequestType = (StoresOrderPostBody) + private type placeOrderActionRequestType = (Option[Order]) private type placeOrderActionType[T] = placeOrderActionRequestType => Future[PlaceOrderType[T] forSome { type T }] @@ -96,9 +96,9 @@ def findPetsByTagsAction[T] = (f: findPetsByTagsActionType[T]) => (tags: PetsFin val placeOrderActionConstructor = Action -def placeOrderAction[T] = (f: placeOrderActionType[T]) => placeOrderActionConstructor.async(placeOrderParser) { implicit request: Request[StoresOrderPostBody] => +def placeOrderAction[T] = (f: placeOrderActionType[T]) => placeOrderActionConstructor.async(placeOrderParser) { implicit request: Request[Option[Order]] => - def processValidplaceOrderRequest(body: StoresOrderPostBody): Either[Result, Future[PlaceOrderType[_]]] = { + def processValidplaceOrderRequest(body: Option[Order]): Either[Result, Future[PlaceOrderType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((body))) new StoresOrderPostValidator(body).errors match { @@ -112,7 +112,7 @@ def placeOrderAction[T] = (f: placeOrderActionType[T]) => placeOrderActionConstr } - val body: StoresOrderPostBody = request.body + val body: Option[Order] = request.body @@ -136,7 +136,7 @@ def placeOrderAction[T] = (f: placeOrderActionType[T]) => placeOrderActionConstr def CreateUserIndexOutOfBoundsException(resultP: java.lang.IndexOutOfBoundsException)(implicit writerP: String => Option[Writeable[java.lang.Exception]]) = success(new CreateUserType[java.lang.IndexOutOfBoundsException] { val statusCode = 405; val result = resultP; val writer = writerP }) def CreateUserIndexOutOfBoundsException(resultF: Future[java.lang.IndexOutOfBoundsException])(implicit writerP: String => Option[Writeable[java.lang.Exception]]) = resultF map { resultP => (new CreateUserType[java.lang.IndexOutOfBoundsException] { val statusCode = 405; val result = resultP; val writer = writerP }) } - private type createUserActionRequestType = (UsersUsernamePutBody) + private type createUserActionRequestType = (Option[User]) private type createUserActionType[T] = createUserActionRequestType => Future[CreateUserType[T] forSome { type T }] @@ -151,9 +151,9 @@ def placeOrderAction[T] = (f: placeOrderActionType[T]) => placeOrderActionConstr val createUserActionConstructor = Action -def createUserAction[T] = (f: createUserActionType[T]) => createUserActionConstructor.async(createUserParser) { implicit request: Request[UsersUsernamePutBody] => +def createUserAction[T] = (f: createUserActionType[T]) => createUserActionConstructor.async(createUserParser) { implicit request: Request[Option[User]] => - def processValidcreateUserRequest(body: UsersUsernamePutBody): Either[Result, Future[CreateUserType[_]]] = { + def processValidcreateUserRequest(body: Option[User]): Either[Result, Future[CreateUserType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((body))) new UsersPostValidator(body).errors match { @@ -167,7 +167,7 @@ def createUserAction[T] = (f: createUserActionType[T]) => createUserActionConstr } - val body: UsersUsernamePutBody = request.body + val body: Option[User] = request.body @@ -191,7 +191,7 @@ def createUserAction[T] = (f: createUserActionType[T]) => createUserActionConstr def CreateUsersWithListInputIndexOutOfBoundsException(resultP: java.lang.IndexOutOfBoundsException)(implicit writerP: String => Option[Writeable[java.lang.Exception]]) = success(new CreateUsersWithListInputType[java.lang.IndexOutOfBoundsException] { val statusCode = 405; val result = resultP; val writer = writerP }) def CreateUsersWithListInputIndexOutOfBoundsException(resultF: Future[java.lang.IndexOutOfBoundsException])(implicit writerP: String => Option[Writeable[java.lang.Exception]]) = resultF map { resultP => (new CreateUsersWithListInputType[java.lang.IndexOutOfBoundsException] { val statusCode = 405; val result = resultP; val writer = writerP }) } - private type createUsersWithListInputActionRequestType = (UsersCreateWithListPostBody) + private type createUsersWithListInputActionRequestType = (Option[Seq[User]]) private type createUsersWithListInputActionType[T] = createUsersWithListInputActionRequestType => Future[CreateUsersWithListInputType[T] forSome { type T }] @@ -206,9 +206,9 @@ def createUserAction[T] = (f: createUserActionType[T]) => createUserActionConstr val createUsersWithListInputActionConstructor = Action -def createUsersWithListInputAction[T] = (f: createUsersWithListInputActionType[T]) => createUsersWithListInputActionConstructor.async(createUsersWithListInputParser) { implicit request: Request[UsersCreateWithListPostBody] => +def createUsersWithListInputAction[T] = (f: createUsersWithListInputActionType[T]) => createUsersWithListInputActionConstructor.async(createUsersWithListInputParser) { implicit request: Request[Option[Seq[User]]] => - def processValidcreateUsersWithListInputRequest(body: UsersCreateWithListPostBody): Either[Result, Future[CreateUsersWithListInputType[_]]] = { + def processValidcreateUsersWithListInputRequest(body: Option[Seq[User]]): Either[Result, Future[CreateUsersWithListInputType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((body))) new UsersCreateWithListPostValidator(body).errors match { @@ -222,7 +222,7 @@ def createUsersWithListInputAction[T] = (f: createUsersWithListInputActionType[T } - val body: UsersCreateWithListPostBody = request.body + val body: Option[Seq[User]] = request.body @@ -301,7 +301,7 @@ def getUserByNameAction[T] = (f: getUserByNameActionType[T]) => (username: Strin def UpdateUserIndexOutOfBoundsException(resultP: java.lang.IndexOutOfBoundsException)(implicit writerP: String => Option[Writeable[java.lang.Exception]]) = success(new UpdateUserType[java.lang.IndexOutOfBoundsException] { val statusCode = 405; val result = resultP; val writer = writerP }) def UpdateUserIndexOutOfBoundsException(resultF: Future[java.lang.IndexOutOfBoundsException])(implicit writerP: String => Option[Writeable[java.lang.Exception]]) = resultF map { resultP => (new UpdateUserType[java.lang.IndexOutOfBoundsException] { val statusCode = 405; val result = resultP; val writer = writerP }) } - private type updateUserActionRequestType = (String, UsersUsernamePutBody) + private type updateUserActionRequestType = (String, Option[User]) private type updateUserActionType[T] = updateUserActionRequestType => Future[UpdateUserType[T] forSome { type T }] @@ -316,9 +316,9 @@ def getUserByNameAction[T] = (f: getUserByNameActionType[T]) => (username: Strin val updateUserActionConstructor = Action -def updateUserAction[T] = (f: updateUserActionType[T]) => (username: String) => updateUserActionConstructor.async(updateUserParser) { implicit request: Request[UsersUsernamePutBody] => +def updateUserAction[T] = (f: updateUserActionType[T]) => (username: String) => updateUserActionConstructor.async(updateUserParser) { implicit request: Request[Option[User]] => - def processValidupdateUserRequest(username: String, body: UsersUsernamePutBody): Either[Result, Future[UpdateUserType[_]]] = { + def processValidupdateUserRequest(username: String, body: Option[User]): Either[Result, Future[UpdateUserType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((username, body))) new UsersUsernamePutValidator(username, body).errors match { @@ -332,7 +332,7 @@ def updateUserAction[T] = (f: updateUserActionType[T]) => (username: String) => } - val body: UsersUsernamePutBody = request.body + val body: Option[User] = request.body @@ -411,7 +411,7 @@ def deleteUserAction[T] = (f: deleteUserActionType[T]) => (username: String) => def UpdatePetIndexOutOfBoundsException(resultP: java.lang.IndexOutOfBoundsException)(implicit writerP: String => Option[Writeable[java.lang.Exception]]) = success(new UpdatePetType[java.lang.IndexOutOfBoundsException] { val statusCode = 405; val result = resultP; val writer = writerP }) def UpdatePetIndexOutOfBoundsException(resultF: Future[java.lang.IndexOutOfBoundsException])(implicit writerP: String => Option[Writeable[java.lang.Exception]]) = resultF map { resultP => (new UpdatePetType[java.lang.IndexOutOfBoundsException] { val statusCode = 405; val result = resultP; val writer = writerP }) } - private type updatePetActionRequestType = (PetsPostBody) + private type updatePetActionRequestType = (Option[Pet]) private type updatePetActionType[T] = updatePetActionRequestType => Future[UpdatePetType[T] forSome { type T }] @@ -428,9 +428,9 @@ def deleteUserAction[T] = (f: deleteUserActionType[T]) => (username: String) => val updatePetActionConstructor = new updatePetSecureAction("write_pets", "read_pets") -def updatePetAction[T] = (f: updatePetActionType[T]) => updatePetActionConstructor.async(updatePetParser) { implicit request: Request[PetsPostBody] => +def updatePetAction[T] = (f: updatePetActionType[T]) => updatePetActionConstructor.async(updatePetParser) { implicit request: Request[Option[Pet]] => - def processValidupdatePetRequest(body: PetsPostBody): Either[Result, Future[UpdatePetType[_]]] = { + def processValidupdatePetRequest(body: Option[Pet]): Either[Result, Future[UpdatePetType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((body))) new PetsPutValidator(body).errors match { @@ -444,7 +444,7 @@ def updatePetAction[T] = (f: updatePetActionType[T]) => updatePetActionConstruct } - val body: PetsPostBody = request.body + val body: Option[Pet] = request.body @@ -470,7 +470,7 @@ def updatePetAction[T] = (f: updatePetActionType[T]) => updatePetActionConstruct def AddPetIndexOutOfBoundsException(resultP: java.lang.IndexOutOfBoundsException)(implicit writerP: String => Option[Writeable[java.lang.Exception]]) = success(new AddPetType[java.lang.IndexOutOfBoundsException] { val statusCode = 405; val result = resultP; val writer = writerP }) def AddPetIndexOutOfBoundsException(resultF: Future[java.lang.IndexOutOfBoundsException])(implicit writerP: String => Option[Writeable[java.lang.Exception]]) = resultF map { resultP => (new AddPetType[java.lang.IndexOutOfBoundsException] { val statusCode = 405; val result = resultP; val writer = writerP }) } - private type addPetActionRequestType = (PetsPostBody) + private type addPetActionRequestType = (Option[Pet]) private type addPetActionType[T] = addPetActionRequestType => Future[AddPetType[T] forSome { type T }] @@ -487,9 +487,9 @@ def updatePetAction[T] = (f: updatePetActionType[T]) => updatePetActionConstruct val addPetActionConstructor = new addPetSecureAction("write_pets", "read_pets") -def addPetAction[T] = (f: addPetActionType[T]) => addPetActionConstructor.async(addPetParser) { implicit request: Request[PetsPostBody] => +def addPetAction[T] = (f: addPetActionType[T]) => addPetActionConstructor.async(addPetParser) { implicit request: Request[Option[Pet]] => - def processValidaddPetRequest(body: PetsPostBody): Either[Result, Future[AddPetType[_]]] = { + def processValidaddPetRequest(body: Option[Pet]): Either[Result, Future[AddPetType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((body))) new PetsPostValidator(body).errors match { @@ -503,7 +503,7 @@ def addPetAction[T] = (f: addPetActionType[T]) => addPetActionConstructor.async( } - val body: PetsPostBody = request.body + val body: Option[Pet] = request.body @@ -527,7 +527,7 @@ def addPetAction[T] = (f: addPetActionType[T]) => addPetActionConstructor.async( def CreateUsersWithArrayInputIndexOutOfBoundsException(resultP: java.lang.IndexOutOfBoundsException)(implicit writerP: String => Option[Writeable[java.lang.Exception]]) = success(new CreateUsersWithArrayInputType[java.lang.IndexOutOfBoundsException] { val statusCode = 405; val result = resultP; val writer = writerP }) def CreateUsersWithArrayInputIndexOutOfBoundsException(resultF: Future[java.lang.IndexOutOfBoundsException])(implicit writerP: String => Option[Writeable[java.lang.Exception]]) = resultF map { resultP => (new CreateUsersWithArrayInputType[java.lang.IndexOutOfBoundsException] { val statusCode = 405; val result = resultP; val writer = writerP }) } - private type createUsersWithArrayInputActionRequestType = (UsersCreateWithListPostBody) + private type createUsersWithArrayInputActionRequestType = (Option[Seq[User]]) private type createUsersWithArrayInputActionType[T] = createUsersWithArrayInputActionRequestType => Future[CreateUsersWithArrayInputType[T] forSome { type T }] @@ -542,9 +542,9 @@ def addPetAction[T] = (f: addPetActionType[T]) => addPetActionConstructor.async( val createUsersWithArrayInputActionConstructor = Action -def createUsersWithArrayInputAction[T] = (f: createUsersWithArrayInputActionType[T]) => createUsersWithArrayInputActionConstructor.async(createUsersWithArrayInputParser) { implicit request: Request[UsersCreateWithListPostBody] => +def createUsersWithArrayInputAction[T] = (f: createUsersWithArrayInputActionType[T]) => createUsersWithArrayInputActionConstructor.async(createUsersWithArrayInputParser) { implicit request: Request[Option[Seq[User]]] => - def processValidcreateUsersWithArrayInputRequest(body: UsersCreateWithListPostBody): Either[Result, Future[CreateUsersWithArrayInputType[_]]] = { + def processValidcreateUsersWithArrayInputRequest(body: Option[Seq[User]]): Either[Result, Future[CreateUsersWithArrayInputType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((body))) new UsersCreateWithArrayPostValidator(body).errors match { @@ -558,7 +558,7 @@ def createUsersWithArrayInputAction[T] = (f: createUsersWithArrayInputActionType } - val body: UsersCreateWithListPostBody = request.body + val body: Option[Seq[User]] = request.body @@ -891,15 +891,15 @@ def deletePetAction[T] = (f: deletePetActionType[T]) => (petId: Long) => deleteP def FindPetsByStatusIndexOutOfBoundsException(resultP: java.lang.IndexOutOfBoundsException)(implicit writerP: String => Option[Writeable[java.lang.Exception]]) = success(new FindPetsByStatusType[java.lang.IndexOutOfBoundsException] { val statusCode = 405; val result = resultP; val writer = writerP }) def FindPetsByStatusIndexOutOfBoundsException(resultF: Future[java.lang.IndexOutOfBoundsException])(implicit writerP: String => Option[Writeable[java.lang.Exception]]) = resultF map { resultP => (new FindPetsByStatusType[java.lang.IndexOutOfBoundsException] { val statusCode = 405; val result = resultP; val writer = writerP }) } - private type findPetsByStatusActionRequestType = (PetsFindByStatusGetStatus) + private type findPetsByStatusActionRequestType = (Option[ArrayWrapper[String]]) private type findPetsByStatusActionType[T] = findPetsByStatusActionRequestType => Future[FindPetsByStatusType[T] forSome { type T }] val findPetsByStatusActionConstructor = new findPetsByStatusSecureAction("write_pets", "read_pets") -def findPetsByStatusAction[T] = (f: findPetsByStatusActionType[T]) => (status: PetsFindByStatusGetStatus) => findPetsByStatusActionConstructor.async { implicit request: Request[AnyContent] => +def findPetsByStatusAction[T] = (f: findPetsByStatusActionType[T]) => (status: Option[ArrayWrapper[String]]) => findPetsByStatusActionConstructor.async { implicit request: Request[AnyContent] => - def processValidfindPetsByStatusRequest(status: PetsFindByStatusGetStatus): Either[Result, Future[FindPetsByStatusType[_]]] = { + def processValidfindPetsByStatusRequest(status: Option[ArrayWrapper[String]]): Either[Result, Future[FindPetsByStatusType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((status))) new PetsFindByStatusGetValidator(status).errors match { @@ -940,15 +940,15 @@ def findPetsByStatusAction[T] = (f: findPetsByStatusActionType[T]) => (status: P def LoginUserIndexOutOfBoundsException(resultP: java.lang.IndexOutOfBoundsException)(implicit writerP: String => Option[Writeable[java.lang.Exception]]) = success(new LoginUserType[java.lang.IndexOutOfBoundsException] { val statusCode = 405; val result = resultP; val writer = writerP }) def LoginUserIndexOutOfBoundsException(resultF: Future[java.lang.IndexOutOfBoundsException])(implicit writerP: String => Option[Writeable[java.lang.Exception]]) = resultF map { resultP => (new LoginUserType[java.lang.IndexOutOfBoundsException] { val statusCode = 405; val result = resultP; val writer = writerP }) } - private type loginUserActionRequestType = (OrderStatus, OrderStatus) + private type loginUserActionRequestType = (Option[String], Option[String]) private type loginUserActionType[T] = loginUserActionRequestType => Future[LoginUserType[T] forSome { type T }] val loginUserActionConstructor = Action -def loginUserAction[T] = (f: loginUserActionType[T]) => (username: OrderStatus, password: OrderStatus) => loginUserActionConstructor.async { implicit request: Request[AnyContent] => +def loginUserAction[T] = (f: loginUserActionType[T]) => (username: Option[String], password: Option[String]) => loginUserActionConstructor.async { implicit request: Request[AnyContent] => - def processValidloginUserRequest(username: OrderStatus, password: OrderStatus): Either[Result, Future[LoginUserType[_]]] = { + def processValidloginUserRequest(username: Option[String], password: Option[String]): Either[Result, Future[LoginUserType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((username, password))) new UsersLoginGetValidator(username, password).errors match { diff --git a/play-scala-generator/src/test/resources/expected_results/base_controllers/heroku_petstore_api_yaml.base.scala b/play-scala-generator/src/test/resources/expected_results/base_controllers/heroku_petstore_api_yaml.base.scala index 654aa3e9..a9d712f1 100644 --- a/play-scala-generator/src/test/resources/expected_results/base_controllers/heroku_petstore_api_yaml.base.scala +++ b/play-scala-generator/src/test/resources/expected_results/base_controllers/heroku_petstore_api_yaml.base.scala @@ -68,7 +68,7 @@ def getAction[T] = (f: getActionType[T]) => (limit: BigInt) => getActionConstruc def Put200(headers: Seq[(String, String)] = Nil) = success(new EmptyReturn(200, headers){}) - private type putActionRequestType = (PutPet) + private type putActionRequestType = (Option[Pet]) private type putActionType[T] = putActionRequestType => Future[PutType[T] forSome { type T }] @@ -85,9 +85,9 @@ def getAction[T] = (f: getActionType[T]) => (limit: BigInt) => getActionConstruc val putActionConstructor = Action -def putAction[T] = (f: putActionType[T]) => putActionConstructor.async(putParser) { implicit request: Request[PutPet] => +def putAction[T] = (f: putActionType[T]) => putActionConstructor.async(putParser) { implicit request: Request[Option[Pet]] => - def processValidputRequest(pet: PutPet): Either[Result, Future[PutType[_]]] = { + def processValidputRequest(pet: Option[Pet]): Either[Result, Future[PutType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((pet))) new PutValidator(pet).errors match { @@ -101,7 +101,7 @@ def putAction[T] = (f: putActionType[T]) => putActionConstructor.async(putParser } - val pet: PutPet = request.body + val pet: Option[Pet] = request.body diff --git a/play-scala-generator/src/test/resources/expected_results/base_controllers/instagram_api_yaml.base.scala b/play-scala-generator/src/test/resources/expected_results/base_controllers/instagram_api_yaml.base.scala index eee6b29e..8c0635b6 100644 --- a/play-scala-generator/src/test/resources/expected_results/base_controllers/instagram_api_yaml.base.scala +++ b/play-scala-generator/src/test/resources/expected_results/base_controllers/instagram_api_yaml.base.scala @@ -241,15 +241,15 @@ def getlocationsByLocation_idAction[T] = (f: getlocationsByLocation_idActionType def GetusersSearch200(resultF: Future[UsersUser_idFollowsGetResponses200])(implicit writerP: String => Option[Writeable[UsersUser_idFollowsGetResponses200]]) = resultF map { resultP => (new GetusersSearchType[UsersUser_idFollowsGetResponses200] { val statusCode = 200; val result = resultP; val writer = writerP }) } - private type getusersSearchActionRequestType = (String, MediaFilter) + private type getusersSearchActionRequestType = (String, Option[String]) private type getusersSearchActionType[T] = getusersSearchActionRequestType => Future[GetusersSearchType[T] forSome { type T }] val getusersSearchActionConstructor = new getusersSearchSecureAction("basic", "comments", "relationships", "likes") -def getusersSearchAction[T] = (f: getusersSearchActionType[T]) => (q: String, count: MediaFilter) => getusersSearchActionConstructor.async { implicit request: Request[AnyContent] => +def getusersSearchAction[T] = (f: getusersSearchActionType[T]) => (q: String, count: Option[String]) => getusersSearchActionConstructor.async { implicit request: Request[AnyContent] => - def processValidgetusersSearchRequest(q: String, count: MediaFilter): Either[Result, Future[GetusersSearchType[_]]] = { + def processValidgetusersSearchRequest(q: String, count: Option[String]): Either[Result, Future[GetusersSearchType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((q, count))) new UsersSearchGetValidator(q, count).errors match { @@ -284,15 +284,15 @@ def getusersSearchAction[T] = (f: getusersSearchActionType[T]) => (q: String, co def GetusersSelfMediaLiked200(resultF: Future[UsersSelfFeedGetResponses200])(implicit writerP: String => Option[Writeable[UsersSelfFeedGetResponses200]]) = resultF map { resultP => (new GetusersSelfMediaLikedType[UsersSelfFeedGetResponses200] { val statusCode = 200; val result = resultP; val writer = writerP }) } - private type getusersSelfMediaLikedActionRequestType = (MediaId, MediaId) + private type getusersSelfMediaLikedActionRequestType = (Option[BigInt], Option[BigInt]) private type getusersSelfMediaLikedActionType[T] = getusersSelfMediaLikedActionRequestType => Future[GetusersSelfMediaLikedType[T] forSome { type T }] val getusersSelfMediaLikedActionConstructor = new getusersSelfMediaLikedSecureAction("basic", "comments", "relationships", "likes") -def getusersSelfMediaLikedAction[T] = (f: getusersSelfMediaLikedActionType[T]) => (count: MediaId, max_like_id: MediaId) => getusersSelfMediaLikedActionConstructor.async { implicit request: Request[AnyContent] => +def getusersSelfMediaLikedAction[T] = (f: getusersSelfMediaLikedActionType[T]) => (count: Option[BigInt], max_like_id: Option[BigInt]) => getusersSelfMediaLikedActionConstructor.async { implicit request: Request[AnyContent] => - def processValidgetusersSelfMediaLikedRequest(count: MediaId, max_like_id: MediaId): Either[Result, Future[GetusersSelfMediaLikedType[_]]] = { + def processValidgetusersSelfMediaLikedRequest(count: Option[BigInt], max_like_id: Option[BigInt]): Either[Result, Future[GetusersSelfMediaLikedType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((count, max_like_id))) new UsersSelfMediaLikedGetValidator(count, max_like_id).errors match { @@ -370,15 +370,15 @@ def gettagsByTag_nameAction[T] = (f: gettagsByTag_nameActionType[T]) => (tag_nam def GettagsSearch200(resultF: Future[TagsSearchGetResponses200])(implicit writerP: String => Option[Writeable[TagsSearchGetResponses200]]) = resultF map { resultP => (new GettagsSearchType[TagsSearchGetResponses200] { val statusCode = 200; val result = resultP; val writer = writerP }) } - private type gettagsSearchActionRequestType = (MediaFilter) + private type gettagsSearchActionRequestType = (Option[String]) private type gettagsSearchActionType[T] = gettagsSearchActionRequestType => Future[GettagsSearchType[T] forSome { type T }] val gettagsSearchActionConstructor = new gettagsSearchSecureAction("basic", "comments", "relationships", "likes") -def gettagsSearchAction[T] = (f: gettagsSearchActionType[T]) => (q: MediaFilter) => gettagsSearchActionConstructor.async { implicit request: Request[AnyContent] => +def gettagsSearchAction[T] = (f: gettagsSearchActionType[T]) => (q: Option[String]) => gettagsSearchActionConstructor.async { implicit request: Request[AnyContent] => - def processValidgettagsSearchRequest(q: MediaFilter): Either[Result, Future[GettagsSearchType[_]]] = { + def processValidgettagsSearchRequest(q: Option[String]): Either[Result, Future[GettagsSearchType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((q))) new TagsSearchGetValidator(q).errors match { @@ -499,7 +499,7 @@ def getmediaByMedia_idCommentsAction[T] = (f: getmediaByMedia_idCommentsActionTy def PostmediaByMedia_idComments200(resultF: Future[MediaMedia_idCommentsDeleteResponses200])(implicit writerP: String => Option[Writeable[MediaMedia_idCommentsDeleteResponses200]]) = resultF map { resultP => (new PostmediaByMedia_idCommentsType[MediaMedia_idCommentsDeleteResponses200] { val statusCode = 200; val result = resultP; val writer = writerP }) } - private type postmediaByMedia_idCommentsActionRequestType = (BigInt, LocationLatitude) + private type postmediaByMedia_idCommentsActionRequestType = (BigInt, Option[BigDecimal]) private type postmediaByMedia_idCommentsActionType[T] = postmediaByMedia_idCommentsActionRequestType => Future[PostmediaByMedia_idCommentsType[T] forSome { type T }] @@ -515,9 +515,9 @@ def getmediaByMedia_idCommentsAction[T] = (f: getmediaByMedia_idCommentsActionTy val postmediaByMedia_idCommentsActionConstructor = new postmediaByMedia_idCommentsSecureAction("comments") -def postmediaByMedia_idCommentsAction[T] = (f: postmediaByMedia_idCommentsActionType[T]) => (media_id: BigInt) => postmediaByMedia_idCommentsActionConstructor.async(postmediaByMedia_idCommentsParser) { implicit request: Request[LocationLatitude] => +def postmediaByMedia_idCommentsAction[T] = (f: postmediaByMedia_idCommentsActionType[T]) => (media_id: BigInt) => postmediaByMedia_idCommentsActionConstructor.async(postmediaByMedia_idCommentsParser) { implicit request: Request[Option[BigDecimal]] => - def processValidpostmediaByMedia_idCommentsRequest(media_id: BigInt, tEXT: LocationLatitude): Either[Result, Future[PostmediaByMedia_idCommentsType[_]]] = { + def processValidpostmediaByMedia_idCommentsRequest(media_id: BigInt, tEXT: Option[BigDecimal]): Either[Result, Future[PostmediaByMedia_idCommentsType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((media_id, tEXT))) new MediaMedia_idCommentsPostValidator(media_id, tEXT).errors match { @@ -531,7 +531,7 @@ def postmediaByMedia_idCommentsAction[T] = (f: postmediaByMedia_idCommentsAction } - val tEXT: LocationLatitude = request.body + val tEXT: Option[BigDecimal] = request.body @@ -639,7 +639,7 @@ def gettagsByTag_nameMediaRecentAction[T] = (f: gettagsByTag_nameMediaRecentActi def PostusersByUser_idRelationship200(resultF: Future[UsersUser_idFollowsGetResponses200])(implicit writerP: String => Option[Writeable[UsersUser_idFollowsGetResponses200]]) = resultF map { resultP => (new PostusersByUser_idRelationshipType[UsersUser_idFollowsGetResponses200] { val statusCode = 200; val result = resultP; val writer = writerP }) } - private type postusersByUser_idRelationshipActionRequestType = (BigDecimal, UsersUser_idRelationshipPostAction) + private type postusersByUser_idRelationshipActionRequestType = (BigDecimal, Option[UsersUser_idRelationshipPostActionOptionEnum]) private type postusersByUser_idRelationshipActionType[T] = postusersByUser_idRelationshipActionRequestType => Future[PostusersByUser_idRelationshipType[T] forSome { type T }] @@ -647,7 +647,7 @@ def gettagsByTag_nameMediaRecentAction[T] = (f: gettagsByTag_nameMediaRecentActi val postusersByUser_idRelationshipParser = parse.using { request => request.contentType.map(_.toLowerCase(java.util.Locale.ENGLISH)) match { - case Some("application/json") => play.api.mvc.BodyParsers.parse.tolerantJson.map(_.asOpt[UsersUser_idRelationshipPostActionOpt]) + case Some("application/json") => play.api.mvc.BodyParsers.parse.tolerantJson.map(_.asOpt[UsersUser_idRelationshipPostActionOptionEnum]) case other => play.api.mvc.BodyParsers.parse.error(Future.successful(UnsupportedMediaType(s"Invalid content type specified $other"))) } @@ -655,9 +655,9 @@ def gettagsByTag_nameMediaRecentAction[T] = (f: gettagsByTag_nameMediaRecentActi val postusersByUser_idRelationshipActionConstructor = new postusersByUser_idRelationshipSecureAction("relationships") -def postusersByUser_idRelationshipAction[T] = (f: postusersByUser_idRelationshipActionType[T]) => (user_id: BigDecimal) => postusersByUser_idRelationshipActionConstructor.async(postusersByUser_idRelationshipParser) { implicit request: Request[UsersUser_idRelationshipPostAction] => +def postusersByUser_idRelationshipAction[T] = (f: postusersByUser_idRelationshipActionType[T]) => (user_id: BigDecimal) => postusersByUser_idRelationshipActionConstructor.async(postusersByUser_idRelationshipParser) { implicit request: Request[Option[UsersUser_idRelationshipPostActionOptionEnum]] => - def processValidpostusersByUser_idRelationshipRequest(user_id: BigDecimal, action: UsersUser_idRelationshipPostAction): Either[Result, Future[PostusersByUser_idRelationshipType[_]]] = { + def processValidpostusersByUser_idRelationshipRequest(user_id: BigDecimal, action: Option[UsersUser_idRelationshipPostActionOptionEnum]): Either[Result, Future[PostusersByUser_idRelationshipType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((user_id, action))) new UsersUser_idRelationshipPostValidator(user_id, action).errors match { @@ -671,7 +671,7 @@ def postusersByUser_idRelationshipAction[T] = (f: postusersByUser_idRelationship } - val action: UsersUser_idRelationshipPostAction = request.body + val action: Option[UsersUser_idRelationshipPostActionOptionEnum] = request.body @@ -693,15 +693,15 @@ def postusersByUser_idRelationshipAction[T] = (f: postusersByUser_idRelationship def GetusersSelfFeed200(resultF: Future[UsersSelfFeedGetResponses200])(implicit writerP: String => Option[Writeable[UsersSelfFeedGetResponses200]]) = resultF map { resultP => (new GetusersSelfFeedType[UsersSelfFeedGetResponses200] { val statusCode = 200; val result = resultP; val writer = writerP }) } - private type getusersSelfFeedActionRequestType = (MediaId, MediaId, MediaId) + private type getusersSelfFeedActionRequestType = (Option[BigInt], Option[BigInt], Option[BigInt]) private type getusersSelfFeedActionType[T] = getusersSelfFeedActionRequestType => Future[GetusersSelfFeedType[T] forSome { type T }] val getusersSelfFeedActionConstructor = new getusersSelfFeedSecureAction("basic", "comments", "relationships", "likes") -def getusersSelfFeedAction[T] = (f: getusersSelfFeedActionType[T]) => (count: MediaId, max_id: MediaId, min_id: MediaId) => getusersSelfFeedActionConstructor.async { implicit request: Request[AnyContent] => +def getusersSelfFeedAction[T] = (f: getusersSelfFeedActionType[T]) => (count: Option[BigInt], max_id: Option[BigInt], min_id: Option[BigInt]) => getusersSelfFeedActionConstructor.async { implicit request: Request[AnyContent] => - def processValidgetusersSelfFeedRequest(count: MediaId, max_id: MediaId, min_id: MediaId): Either[Result, Future[GetusersSelfFeedType[_]]] = { + def processValidgetusersSelfFeedRequest(count: Option[BigInt], max_id: Option[BigInt], min_id: Option[BigInt]): Either[Result, Future[GetusersSelfFeedType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((count, max_id, min_id))) new UsersSelfFeedGetValidator(count, max_id, min_id).errors match { @@ -779,15 +779,15 @@ def getusersByUser_idAction[T] = (f: getusersByUser_idActionType[T]) => (user_id def GetmediaSearch200(resultF: Future[MediaSearchGetResponses200])(implicit writerP: String => Option[Writeable[MediaSearchGetResponses200]]) = resultF map { resultP => (new GetmediaSearchType[MediaSearchGetResponses200] { val statusCode = 200; val result = resultP; val writer = writerP }) } - private type getmediaSearchActionRequestType = (MediaId, BigInt, LocationLatitude, MediaId, LocationLatitude) + private type getmediaSearchActionRequestType = (Option[BigInt], BigInt, Option[BigDecimal], Option[BigInt], Option[BigDecimal]) private type getmediaSearchActionType[T] = getmediaSearchActionRequestType => Future[GetmediaSearchType[T] forSome { type T }] val getmediaSearchActionConstructor = new getmediaSearchSecureAction("basic", "comments", "relationships", "likes") -def getmediaSearchAction[T] = (f: getmediaSearchActionType[T]) => (mAX_TIMESTAMP: MediaId, dISTANCE: BigInt, lNG: LocationLatitude, mIN_TIMESTAMP: MediaId, lAT: LocationLatitude) => getmediaSearchActionConstructor.async { implicit request: Request[AnyContent] => +def getmediaSearchAction[T] = (f: getmediaSearchActionType[T]) => (mAX_TIMESTAMP: Option[BigInt], dISTANCE: BigInt, lNG: Option[BigDecimal], mIN_TIMESTAMP: Option[BigInt], lAT: Option[BigDecimal]) => getmediaSearchActionConstructor.async { implicit request: Request[AnyContent] => - def processValidgetmediaSearchRequest(mAX_TIMESTAMP: MediaId, dISTANCE: BigInt, lNG: LocationLatitude, mIN_TIMESTAMP: MediaId, lAT: LocationLatitude): Either[Result, Future[GetmediaSearchType[_]]] = { + def processValidgetmediaSearchRequest(mAX_TIMESTAMP: Option[BigInt], dISTANCE: BigInt, lNG: Option[BigDecimal], mIN_TIMESTAMP: Option[BigInt], lAT: Option[BigDecimal]): Either[Result, Future[GetmediaSearchType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((mAX_TIMESTAMP, dISTANCE, lNG, mIN_TIMESTAMP, lAT))) new MediaSearchGetValidator(mAX_TIMESTAMP, dISTANCE, lNG, mIN_TIMESTAMP, lAT).errors match { @@ -822,15 +822,15 @@ def getmediaSearchAction[T] = (f: getmediaSearchActionType[T]) => (mAX_TIMESTAMP def GetgeographiesByGeo_idMediaRecent200(headers: Seq[(String, String)] = Nil) = success(new EmptyReturn(200, headers){}) - private type getgeographiesByGeo_idMediaRecentActionRequestType = (BigInt, MediaId, MediaId) + private type getgeographiesByGeo_idMediaRecentActionRequestType = (BigInt, Option[BigInt], Option[BigInt]) private type getgeographiesByGeo_idMediaRecentActionType[T] = getgeographiesByGeo_idMediaRecentActionRequestType => Future[GetgeographiesByGeo_idMediaRecentType[T] forSome { type T }] val getgeographiesByGeo_idMediaRecentActionConstructor = new getgeographiesByGeo_idMediaRecentSecureAction("basic", "comments", "relationships", "likes") -def getgeographiesByGeo_idMediaRecentAction[T] = (f: getgeographiesByGeo_idMediaRecentActionType[T]) => (geo_id: BigInt, count: MediaId, min_id: MediaId) => getgeographiesByGeo_idMediaRecentActionConstructor.async { implicit request: Request[AnyContent] => +def getgeographiesByGeo_idMediaRecentAction[T] = (f: getgeographiesByGeo_idMediaRecentActionType[T]) => (geo_id: BigInt, count: Option[BigInt], min_id: Option[BigInt]) => getgeographiesByGeo_idMediaRecentActionConstructor.async { implicit request: Request[AnyContent] => - def processValidgetgeographiesByGeo_idMediaRecentRequest(geo_id: BigInt, count: MediaId, min_id: MediaId): Either[Result, Future[GetgeographiesByGeo_idMediaRecentType[_]]] = { + def processValidgetgeographiesByGeo_idMediaRecentRequest(geo_id: BigInt, count: Option[BigInt], min_id: Option[BigInt]): Either[Result, Future[GetgeographiesByGeo_idMediaRecentType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((geo_id, count, min_id))) new GeographiesGeo_idMediaRecentGetValidator(geo_id, count, min_id).errors match { @@ -908,15 +908,15 @@ def getmediaByShortcodeAction[T] = (f: getmediaByShortcodeActionType[T]) => (sho def GetlocationsSearch200(resultF: Future[LocationsSearchGetResponses200])(implicit writerP: String => Option[Writeable[LocationsSearchGetResponses200]]) = resultF map { resultP => (new GetlocationsSearchType[LocationsSearchGetResponses200] { val statusCode = 200; val result = resultP; val writer = writerP }) } - private type getlocationsSearchActionRequestType = (MediaId, MediaId, MediaId, LocationLatitude, MediaId, LocationLatitude) + private type getlocationsSearchActionRequestType = (Option[BigInt], Option[BigInt], Option[BigInt], Option[BigDecimal], Option[BigInt], Option[BigDecimal]) private type getlocationsSearchActionType[T] = getlocationsSearchActionRequestType => Future[GetlocationsSearchType[T] forSome { type T }] val getlocationsSearchActionConstructor = new getlocationsSearchSecureAction("basic", "comments", "relationships", "likes") -def getlocationsSearchAction[T] = (f: getlocationsSearchActionType[T]) => (foursquare_v2_id: MediaId, facebook_places_id: MediaId, distance: MediaId, lat: LocationLatitude, foursquare_id: MediaId, lng: LocationLatitude) => getlocationsSearchActionConstructor.async { implicit request: Request[AnyContent] => +def getlocationsSearchAction[T] = (f: getlocationsSearchActionType[T]) => (foursquare_v2_id: Option[BigInt], facebook_places_id: Option[BigInt], distance: Option[BigInt], lat: Option[BigDecimal], foursquare_id: Option[BigInt], lng: Option[BigDecimal]) => getlocationsSearchActionConstructor.async { implicit request: Request[AnyContent] => - def processValidgetlocationsSearchRequest(foursquare_v2_id: MediaId, facebook_places_id: MediaId, distance: MediaId, lat: LocationLatitude, foursquare_id: MediaId, lng: LocationLatitude): Either[Result, Future[GetlocationsSearchType[_]]] = { + def processValidgetlocationsSearchRequest(foursquare_v2_id: Option[BigInt], facebook_places_id: Option[BigInt], distance: Option[BigInt], lat: Option[BigDecimal], foursquare_id: Option[BigInt], lng: Option[BigDecimal]): Either[Result, Future[GetlocationsSearchType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((foursquare_v2_id, facebook_places_id, distance, lat, foursquare_id, lng))) new LocationsSearchGetValidator(foursquare_v2_id, facebook_places_id, distance, lat, foursquare_id, lng).errors match { @@ -1028,15 +1028,15 @@ def getmediaByMedia_idAction[T] = (f: getmediaByMedia_idActionType[T]) => (media def GetlocationsByLocation_idMediaRecent200(resultF: Future[UsersSelfFeedGetResponses200])(implicit writerP: String => Option[Writeable[UsersSelfFeedGetResponses200]]) = resultF map { resultP => (new GetlocationsByLocation_idMediaRecentType[UsersSelfFeedGetResponses200] { val statusCode = 200; val result = resultP; val writer = writerP }) } - private type getlocationsByLocation_idMediaRecentActionRequestType = (BigInt, MediaId, MediaId, MediaFilter, MediaFilter) + private type getlocationsByLocation_idMediaRecentActionRequestType = (BigInt, Option[BigInt], Option[BigInt], Option[String], Option[String]) private type getlocationsByLocation_idMediaRecentActionType[T] = getlocationsByLocation_idMediaRecentActionRequestType => Future[GetlocationsByLocation_idMediaRecentType[T] forSome { type T }] val getlocationsByLocation_idMediaRecentActionConstructor = new getlocationsByLocation_idMediaRecentSecureAction("basic", "comments", "relationships", "likes") -def getlocationsByLocation_idMediaRecentAction[T] = (f: getlocationsByLocation_idMediaRecentActionType[T]) => (location_id: BigInt, max_timestamp: MediaId, min_timestamp: MediaId, min_id: MediaFilter, max_id: MediaFilter) => getlocationsByLocation_idMediaRecentActionConstructor.async { implicit request: Request[AnyContent] => +def getlocationsByLocation_idMediaRecentAction[T] = (f: getlocationsByLocation_idMediaRecentActionType[T]) => (location_id: BigInt, max_timestamp: Option[BigInt], min_timestamp: Option[BigInt], min_id: Option[String], max_id: Option[String]) => getlocationsByLocation_idMediaRecentActionConstructor.async { implicit request: Request[AnyContent] => - def processValidgetlocationsByLocation_idMediaRecentRequest(location_id: BigInt, max_timestamp: MediaId, min_timestamp: MediaId, min_id: MediaFilter, max_id: MediaFilter): Either[Result, Future[GetlocationsByLocation_idMediaRecentType[_]]] = { + def processValidgetlocationsByLocation_idMediaRecentRequest(location_id: BigInt, max_timestamp: Option[BigInt], min_timestamp: Option[BigInt], min_id: Option[String], max_id: Option[String]): Either[Result, Future[GetlocationsByLocation_idMediaRecentType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((location_id, max_timestamp, min_timestamp, min_id, max_id))) new LocationsLocation_idMediaRecentGetValidator(location_id, max_timestamp, min_timestamp, min_id, max_id).errors match { @@ -1071,15 +1071,15 @@ def getlocationsByLocation_idMediaRecentAction[T] = (f: getlocationsByLocation_i def GetusersByUser_idMediaRecent200(resultF: Future[UsersSelfFeedGetResponses200])(implicit writerP: String => Option[Writeable[UsersSelfFeedGetResponses200]]) = resultF map { resultP => (new GetusersByUser_idMediaRecentType[UsersSelfFeedGetResponses200] { val statusCode = 200; val result = resultP; val writer = writerP }) } - private type getusersByUser_idMediaRecentActionRequestType = (BigDecimal, MediaId, MediaFilter, MediaId, MediaFilter, MediaId) + private type getusersByUser_idMediaRecentActionRequestType = (BigDecimal, Option[BigInt], Option[String], Option[BigInt], Option[String], Option[BigInt]) private type getusersByUser_idMediaRecentActionType[T] = getusersByUser_idMediaRecentActionRequestType => Future[GetusersByUser_idMediaRecentType[T] forSome { type T }] val getusersByUser_idMediaRecentActionConstructor = new getusersByUser_idMediaRecentSecureAction("basic", "comments", "relationships", "likes") -def getusersByUser_idMediaRecentAction[T] = (f: getusersByUser_idMediaRecentActionType[T]) => (user_id: BigDecimal, max_timestamp: MediaId, min_id: MediaFilter, min_timestamp: MediaId, max_id: MediaFilter, count: MediaId) => getusersByUser_idMediaRecentActionConstructor.async { implicit request: Request[AnyContent] => +def getusersByUser_idMediaRecentAction[T] = (f: getusersByUser_idMediaRecentActionType[T]) => (user_id: BigDecimal, max_timestamp: Option[BigInt], min_id: Option[String], min_timestamp: Option[BigInt], max_id: Option[String], count: Option[BigInt]) => getusersByUser_idMediaRecentActionConstructor.async { implicit request: Request[AnyContent] => - def processValidgetusersByUser_idMediaRecentRequest(user_id: BigDecimal, max_timestamp: MediaId, min_id: MediaFilter, min_timestamp: MediaId, max_id: MediaFilter, count: MediaId): Either[Result, Future[GetusersByUser_idMediaRecentType[_]]] = { + def processValidgetusersByUser_idMediaRecentRequest(user_id: BigDecimal, max_timestamp: Option[BigInt], min_id: Option[String], min_timestamp: Option[BigInt], max_id: Option[String], count: Option[BigInt]): Either[Result, Future[GetusersByUser_idMediaRecentType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((user_id, max_timestamp, min_id, min_timestamp, max_id, count))) new UsersUser_idMediaRecentGetValidator(user_id, max_timestamp, min_id, min_timestamp, max_id, count).errors match { diff --git a/play-scala-generator/src/test/resources/expected_results/base_controllers/nakadi_yaml.base.scala b/play-scala-generator/src/test/resources/expected_results/base_controllers/nakadi_yaml.base.scala index 697955dc..b738448d 100644 --- a/play-scala-generator/src/test/resources/expected_results/base_controllers/nakadi_yaml.base.scala +++ b/play-scala-generator/src/test/resources/expected_results/base_controllers/nakadi_yaml.base.scala @@ -71,15 +71,15 @@ def nakadiHackGet_metricsAction[T] = (f: nakadiHackGet_metricsActionType[T]) => def NakadiHackGet_events_from_single_partition200(resultF: Future[SimpleStreamEvent])(implicit writerP: String => Option[Writeable[SimpleStreamEvent]]) = resultF map { resultP => (new NakadiHackGet_events_from_single_partitionType[SimpleStreamEvent] { val statusCode = 200; val result = resultP; val writer = writerP }) } - private type nakadiHackGet_events_from_single_partitionActionRequestType = (String, String, TopicsTopicEventsGetStream_timeout, String, Int, TopicsTopicEventsGetStream_timeout, TopicsTopicEventsGetStream_timeout, TopicsTopicEventsGetStream_timeout) + private type nakadiHackGet_events_from_single_partitionActionRequestType = (String, String, Option[Int], String, Int, Option[Int], Option[Int], Option[Int]) private type nakadiHackGet_events_from_single_partitionActionType[T] = nakadiHackGet_events_from_single_partitionActionRequestType => Future[NakadiHackGet_events_from_single_partitionType[T] forSome { type T }] val nakadiHackGet_events_from_single_partitionActionConstructor = Action -def nakadiHackGet_events_from_single_partitionAction[T] = (f: nakadiHackGet_events_from_single_partitionActionType[T]) => (start_from: String, partition: String, stream_limit: TopicsTopicEventsGetStream_timeout, topic: String, batch_limit: Int, batch_flush_timeout: TopicsTopicEventsGetStream_timeout, stream_timeout: TopicsTopicEventsGetStream_timeout, batch_keep_alive_limit: TopicsTopicEventsGetStream_timeout) => nakadiHackGet_events_from_single_partitionActionConstructor.async { implicit request: Request[AnyContent] => +def nakadiHackGet_events_from_single_partitionAction[T] = (f: nakadiHackGet_events_from_single_partitionActionType[T]) => (start_from: String, partition: String, stream_limit: Option[Int], topic: String, batch_limit: Int, batch_flush_timeout: Option[Int], stream_timeout: Option[Int], batch_keep_alive_limit: Option[Int]) => nakadiHackGet_events_from_single_partitionActionConstructor.async { implicit request: Request[AnyContent] => - def processValidnakadiHackGet_events_from_single_partitionRequest(start_from: String, partition: String, stream_limit: TopicsTopicEventsGetStream_timeout, topic: String, batch_limit: Int, batch_flush_timeout: TopicsTopicEventsGetStream_timeout, stream_timeout: TopicsTopicEventsGetStream_timeout, batch_keep_alive_limit: TopicsTopicEventsGetStream_timeout): Either[Result, Future[NakadiHackGet_events_from_single_partitionType[_]]] = { + def processValidnakadiHackGet_events_from_single_partitionRequest(start_from: String, partition: String, stream_limit: Option[Int], topic: String, batch_limit: Int, batch_flush_timeout: Option[Int], stream_timeout: Option[Int], batch_keep_alive_limit: Option[Int]): Either[Result, Future[NakadiHackGet_events_from_single_partitionType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((start_from, partition, stream_limit, topic, batch_limit, batch_flush_timeout, stream_timeout, batch_keep_alive_limit))) new TopicsTopicPartitionsPartitionEventsGetValidator(start_from, partition, stream_limit, topic, batch_limit, batch_flush_timeout, stream_timeout, batch_keep_alive_limit).errors match { @@ -203,15 +203,15 @@ def nakadiHackGet_topicsAction[T] = (f: nakadiHackGet_topicsActionType[T]) => na def NakadiHackGet_events_from_multiple_partitions200(resultF: Future[SimpleStreamEvent])(implicit writerP: String => Option[Writeable[SimpleStreamEvent]]) = resultF map { resultP => (new NakadiHackGet_events_from_multiple_partitionsType[SimpleStreamEvent] { val statusCode = 200; val result = resultP; val writer = writerP }) } - private type nakadiHackGet_events_from_multiple_partitionsActionRequestType = (TopicsTopicEventsGetStream_timeout, TopicsTopicEventsGetStream_timeout, TopicsTopicEventsGetStream_timeout, String, Int, TopicsTopicEventsGetStream_timeout, String) + private type nakadiHackGet_events_from_multiple_partitionsActionRequestType = (Option[Int], Option[Int], Option[Int], String, Int, Option[Int], String) private type nakadiHackGet_events_from_multiple_partitionsActionType[T] = nakadiHackGet_events_from_multiple_partitionsActionRequestType => Future[NakadiHackGet_events_from_multiple_partitionsType[T] forSome { type T }] val nakadiHackGet_events_from_multiple_partitionsActionConstructor = Action -def nakadiHackGet_events_from_multiple_partitionsAction[T] = (f: nakadiHackGet_events_from_multiple_partitionsActionType[T]) => (stream_timeout: TopicsTopicEventsGetStream_timeout, stream_limit: TopicsTopicEventsGetStream_timeout, batch_flush_timeout: TopicsTopicEventsGetStream_timeout, batch_limit: Int, batch_keep_alive_limit: TopicsTopicEventsGetStream_timeout, topic: String) => nakadiHackGet_events_from_multiple_partitionsActionConstructor.async { implicit request: Request[AnyContent] => +def nakadiHackGet_events_from_multiple_partitionsAction[T] = (f: nakadiHackGet_events_from_multiple_partitionsActionType[T]) => (stream_timeout: Option[Int], stream_limit: Option[Int], batch_flush_timeout: Option[Int], batch_limit: Int, batch_keep_alive_limit: Option[Int], topic: String) => nakadiHackGet_events_from_multiple_partitionsActionConstructor.async { implicit request: Request[AnyContent] => - def processValidnakadiHackGet_events_from_multiple_partitionsRequest(stream_timeout: TopicsTopicEventsGetStream_timeout, stream_limit: TopicsTopicEventsGetStream_timeout, batch_flush_timeout: TopicsTopicEventsGetStream_timeout, x_nakadi_cursors: String, batch_limit: Int, batch_keep_alive_limit: TopicsTopicEventsGetStream_timeout, topic: String): Either[Result, Future[NakadiHackGet_events_from_multiple_partitionsType[_]]] = { + def processValidnakadiHackGet_events_from_multiple_partitionsRequest(stream_timeout: Option[Int], stream_limit: Option[Int], batch_flush_timeout: Option[Int], x_nakadi_cursors: String, batch_limit: Int, batch_keep_alive_limit: Option[Int], topic: String): Either[Result, Future[NakadiHackGet_events_from_multiple_partitionsType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((stream_timeout, stream_limit, batch_flush_timeout, x_nakadi_cursors, batch_limit, batch_keep_alive_limit, topic))) new TopicsTopicEventsGetValidator(stream_timeout, stream_limit, batch_flush_timeout, x_nakadi_cursors, batch_limit, batch_keep_alive_limit, topic).errors match { @@ -264,7 +264,7 @@ def nakadiHackGet_events_from_multiple_partitionsAction[T] = (f: nakadiHackGet_e def NakadiHackPost_event201(headers: Seq[(String, String)] = Nil) = success(new EmptyReturn(201, headers){}) - private type nakadiHackPost_eventActionRequestType = (String, TopicsTopicEventsBatchPostEvent) + private type nakadiHackPost_eventActionRequestType = (String, Option[Event]) private type nakadiHackPost_eventActionType[T] = nakadiHackPost_eventActionRequestType => Future[NakadiHackPost_eventType[T] forSome { type T }] @@ -280,9 +280,9 @@ def nakadiHackGet_events_from_multiple_partitionsAction[T] = (f: nakadiHackGet_e val nakadiHackPost_eventActionConstructor = Action -def nakadiHackPost_eventAction[T] = (f: nakadiHackPost_eventActionType[T]) => (topic: String) => nakadiHackPost_eventActionConstructor.async(nakadiHackPost_eventParser) { implicit request: Request[TopicsTopicEventsBatchPostEvent] => +def nakadiHackPost_eventAction[T] = (f: nakadiHackPost_eventActionType[T]) => (topic: String) => nakadiHackPost_eventActionConstructor.async(nakadiHackPost_eventParser) { implicit request: Request[Option[Event]] => - def processValidnakadiHackPost_eventRequest(topic: String, event: TopicsTopicEventsBatchPostEvent): Either[Result, Future[NakadiHackPost_eventType[_]]] = { + def processValidnakadiHackPost_eventRequest(topic: String, event: Option[Event]): Either[Result, Future[NakadiHackPost_eventType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((topic, event))) new TopicsTopicEventsPostValidator(topic, event).errors match { @@ -296,7 +296,7 @@ def nakadiHackPost_eventAction[T] = (f: nakadiHackPost_eventActionType[T]) => (t } - val event: TopicsTopicEventsBatchPostEvent = request.body + val event: Option[Event] = request.body @@ -369,7 +369,7 @@ def nakadiHackGet_partitionsAction[T] = (f: nakadiHackGet_partitionsActionType[T def NakadiHackPost_events201(headers: Seq[(String, String)] = Nil) = success(new EmptyReturn(201, headers){}) - private type nakadiHackPost_eventsActionRequestType = (String, TopicsTopicEventsBatchPostEvent) + private type nakadiHackPost_eventsActionRequestType = (String, Option[Event]) private type nakadiHackPost_eventsActionType[T] = nakadiHackPost_eventsActionRequestType => Future[NakadiHackPost_eventsType[T] forSome { type T }] @@ -385,9 +385,9 @@ def nakadiHackGet_partitionsAction[T] = (f: nakadiHackGet_partitionsActionType[T val nakadiHackPost_eventsActionConstructor = Action -def nakadiHackPost_eventsAction[T] = (f: nakadiHackPost_eventsActionType[T]) => (topic: String) => nakadiHackPost_eventsActionConstructor.async(nakadiHackPost_eventsParser) { implicit request: Request[TopicsTopicEventsBatchPostEvent] => +def nakadiHackPost_eventsAction[T] = (f: nakadiHackPost_eventsActionType[T]) => (topic: String) => nakadiHackPost_eventsActionConstructor.async(nakadiHackPost_eventsParser) { implicit request: Request[Option[Event]] => - def processValidnakadiHackPost_eventsRequest(topic: String, event: TopicsTopicEventsBatchPostEvent): Either[Result, Future[NakadiHackPost_eventsType[_]]] = { + def processValidnakadiHackPost_eventsRequest(topic: String, event: Option[Event]): Either[Result, Future[NakadiHackPost_eventsType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((topic, event))) new TopicsTopicEventsBatchPostValidator(topic, event).errors match { @@ -401,7 +401,7 @@ def nakadiHackPost_eventsAction[T] = (f: nakadiHackPost_eventsActionType[T]) => } - val event: TopicsTopicEventsBatchPostEvent = request.body + val event: Option[Event] = request.body diff --git a/play-scala-generator/src/test/resources/expected_results/base_controllers/security_api_yaml.base.scala b/play-scala-generator/src/test/resources/expected_results/base_controllers/security_api_yaml.base.scala index e4c8ee72..a4c37436 100644 --- a/play-scala-generator/src/test/resources/expected_results/base_controllers/security_api_yaml.base.scala +++ b/play-scala-generator/src/test/resources/expected_results/base_controllers/security_api_yaml.base.scala @@ -25,15 +25,15 @@ trait SecurityApiYamlBase extends Controller with PlayBodyParsing with Security def GetPetsById200(resultF: Future[Seq[Pet]])(implicit writerP: String => Option[Writeable[Seq[Pet]]]) = resultF map { resultP => (new GetPetsByIdType[Seq[Pet]] { val statusCode = 200; val result = resultP; val writer = writerP }) } - private type getPetsByIdActionRequestType = (PetsIdGetId) + private type getPetsByIdActionRequestType = (ArrayWrapper[String]) private type getPetsByIdActionType[T] = getPetsByIdActionRequestType => Future[GetPetsByIdType[T] forSome { type T }] val getPetsByIdActionConstructor = new getPetsByIdSecureAction("user") -def getPetsByIdAction[T] = (f: getPetsByIdActionType[T]) => (id: PetsIdGetId) => getPetsByIdActionConstructor.async { implicit request: Request[AnyContent] => +def getPetsByIdAction[T] = (f: getPetsByIdActionType[T]) => (id: ArrayWrapper[String]) => getPetsByIdActionConstructor.async { implicit request: Request[AnyContent] => - def processValidgetPetsByIdRequest(id: PetsIdGetId): Either[Result, Future[GetPetsByIdType[_]]] = { + def processValidgetPetsByIdRequest(id: ArrayWrapper[String]): Either[Result, Future[GetPetsByIdType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((id))) new PetsIdGetValidator(id).errors match { diff --git a/play-scala-generator/src/test/resources/expected_results/base_controllers/simple_petstore_api_yaml.base.scala b/play-scala-generator/src/test/resources/expected_results/base_controllers/simple_petstore_api_yaml.base.scala index 76c81506..0574a453 100644 --- a/play-scala-generator/src/test/resources/expected_results/base_controllers/simple_petstore_api_yaml.base.scala +++ b/play-scala-generator/src/test/resources/expected_results/base_controllers/simple_petstore_api_yaml.base.scala @@ -86,15 +86,15 @@ trait DashboardBase extends Controller with PlayBodyParsing { def MethodLevel200(resultF: Future[Seq[Pet]])(implicit writerP: String => Option[Writeable[Seq[Pet]]]) = resultF map { resultP => (new MethodLevelType[Seq[Pet]] { val statusCode = 200; val result = resultP; val writer = writerP }) } - private type methodLevelActionRequestType = (PetsGetTags, PetsGetLimit) + private type methodLevelActionRequestType = (Option[ArrayWrapper[String]], Option[Int]) private type methodLevelActionType[T] = methodLevelActionRequestType => Future[MethodLevelType[T] forSome { type T }] val methodLevelActionConstructor = Action -def methodLevelAction[T] = (f: methodLevelActionType[T]) => (tags: PetsGetTags, limit: PetsGetLimit) => methodLevelActionConstructor.async { implicit request: Request[AnyContent] => +def methodLevelAction[T] = (f: methodLevelActionType[T]) => (tags: Option[ArrayWrapper[String]], limit: Option[Int]) => methodLevelActionConstructor.async { implicit request: Request[AnyContent] => - def processValidmethodLevelRequest(tags: PetsGetTags, limit: PetsGetLimit): Either[Result, Future[MethodLevelType[_]]] = { + def processValidmethodLevelRequest(tags: Option[ArrayWrapper[String]], limit: Option[Int]): Either[Result, Future[MethodLevelType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((tags, limit))) new PetsGetValidator(tags, limit).errors match { diff --git a/play-scala-generator/src/test/resources/expected_results/base_controllers/split_petstore_api_yaml.base.scala b/play-scala-generator/src/test/resources/expected_results/base_controllers/split_petstore_api_yaml.base.scala index 65a93818..55d99fcf 100644 --- a/play-scala-generator/src/test/resources/expected_results/base_controllers/split_petstore_api_yaml.base.scala +++ b/play-scala-generator/src/test/resources/expected_results/base_controllers/split_petstore_api_yaml.base.scala @@ -10,8 +10,8 @@ import PlayBodyParsing._ import scala.concurrent.Future import scala.util._ -import de.zalando.play.controllers.ArrayWrapper import java.time.ZonedDateTime +import de.zalando.play.controllers.ArrayWrapper import de.zalando.play.controllers.PlayPathBindables @@ -32,15 +32,15 @@ trait SplitPetstoreApiYamlBase extends Controller with PlayBodyParsing with Spl def FindPetsByTagsIndexOutOfBoundsException(resultP: java.lang.IndexOutOfBoundsException)(implicit writerP: String => Option[Writeable[java.lang.Exception]]) = success(new FindPetsByTagsType[java.lang.IndexOutOfBoundsException] { val statusCode = 405; val result = resultP; val writer = writerP }) def FindPetsByTagsIndexOutOfBoundsException(resultF: Future[java.lang.IndexOutOfBoundsException])(implicit writerP: String => Option[Writeable[java.lang.Exception]]) = resultF map { resultP => (new FindPetsByTagsType[java.lang.IndexOutOfBoundsException] { val statusCode = 405; val result = resultP; val writer = writerP }) } - private type findPetsByTagsActionRequestType = (PetsFindByStatusGetStatus) + private type findPetsByTagsActionRequestType = (Option[ArrayWrapper[String]]) private type findPetsByTagsActionType[T] = findPetsByTagsActionRequestType => Future[FindPetsByTagsType[T] forSome { type T }] val findPetsByTagsActionConstructor = new findPetsByTagsSecureAction("write_pets", "read_pets") -def findPetsByTagsAction[T] = (f: findPetsByTagsActionType[T]) => (tags: PetsFindByStatusGetStatus) => findPetsByTagsActionConstructor.async { implicit request: Request[AnyContent] => +def findPetsByTagsAction[T] = (f: findPetsByTagsActionType[T]) => (tags: Option[ArrayWrapper[String]]) => findPetsByTagsActionConstructor.async { implicit request: Request[AnyContent] => - def processValidfindPetsByTagsRequest(tags: PetsFindByStatusGetStatus): Either[Result, Future[FindPetsByTagsType[_]]] = { + def processValidfindPetsByTagsRequest(tags: Option[ArrayWrapper[String]]): Either[Result, Future[FindPetsByTagsType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((tags))) new PetsFindByTagsGetValidator(tags).errors match { @@ -81,7 +81,7 @@ def findPetsByTagsAction[T] = (f: findPetsByTagsActionType[T]) => (tags: PetsFin def PlaceOrderIndexOutOfBoundsException(resultP: java.lang.IndexOutOfBoundsException)(implicit writerP: String => Option[Writeable[java.lang.Exception]]) = success(new PlaceOrderType[java.lang.IndexOutOfBoundsException] { val statusCode = 405; val result = resultP; val writer = writerP }) def PlaceOrderIndexOutOfBoundsException(resultF: Future[java.lang.IndexOutOfBoundsException])(implicit writerP: String => Option[Writeable[java.lang.Exception]]) = resultF map { resultP => (new PlaceOrderType[java.lang.IndexOutOfBoundsException] { val statusCode = 405; val result = resultP; val writer = writerP }) } - private type placeOrderActionRequestType = (StoresOrderPostBody) + private type placeOrderActionRequestType = (Option[Order]) private type placeOrderActionType[T] = placeOrderActionRequestType => Future[PlaceOrderType[T] forSome { type T }] @@ -96,9 +96,9 @@ def findPetsByTagsAction[T] = (f: findPetsByTagsActionType[T]) => (tags: PetsFin val placeOrderActionConstructor = Action -def placeOrderAction[T] = (f: placeOrderActionType[T]) => placeOrderActionConstructor.async(placeOrderParser) { implicit request: Request[StoresOrderPostBody] => +def placeOrderAction[T] = (f: placeOrderActionType[T]) => placeOrderActionConstructor.async(placeOrderParser) { implicit request: Request[Option[Order]] => - def processValidplaceOrderRequest(body: StoresOrderPostBody): Either[Result, Future[PlaceOrderType[_]]] = { + def processValidplaceOrderRequest(body: Option[Order]): Either[Result, Future[PlaceOrderType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((body))) new StoresOrderPostValidator(body).errors match { @@ -112,7 +112,7 @@ def placeOrderAction[T] = (f: placeOrderActionType[T]) => placeOrderActionConstr } - val body: StoresOrderPostBody = request.body + val body: Option[Order] = request.body @@ -136,7 +136,7 @@ def placeOrderAction[T] = (f: placeOrderActionType[T]) => placeOrderActionConstr def CreateUserIndexOutOfBoundsException(resultP: java.lang.IndexOutOfBoundsException)(implicit writerP: String => Option[Writeable[java.lang.Exception]]) = success(new CreateUserType[java.lang.IndexOutOfBoundsException] { val statusCode = 405; val result = resultP; val writer = writerP }) def CreateUserIndexOutOfBoundsException(resultF: Future[java.lang.IndexOutOfBoundsException])(implicit writerP: String => Option[Writeable[java.lang.Exception]]) = resultF map { resultP => (new CreateUserType[java.lang.IndexOutOfBoundsException] { val statusCode = 405; val result = resultP; val writer = writerP }) } - private type createUserActionRequestType = (UsersUsernamePutBody) + private type createUserActionRequestType = (Option[User]) private type createUserActionType[T] = createUserActionRequestType => Future[CreateUserType[T] forSome { type T }] @@ -151,9 +151,9 @@ def placeOrderAction[T] = (f: placeOrderActionType[T]) => placeOrderActionConstr val createUserActionConstructor = Action -def createUserAction[T] = (f: createUserActionType[T]) => createUserActionConstructor.async(createUserParser) { implicit request: Request[UsersUsernamePutBody] => +def createUserAction[T] = (f: createUserActionType[T]) => createUserActionConstructor.async(createUserParser) { implicit request: Request[Option[User]] => - def processValidcreateUserRequest(body: UsersUsernamePutBody): Either[Result, Future[CreateUserType[_]]] = { + def processValidcreateUserRequest(body: Option[User]): Either[Result, Future[CreateUserType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((body))) new UsersPostValidator(body).errors match { @@ -167,7 +167,7 @@ def createUserAction[T] = (f: createUserActionType[T]) => createUserActionConstr } - val body: UsersUsernamePutBody = request.body + val body: Option[User] = request.body @@ -191,7 +191,7 @@ def createUserAction[T] = (f: createUserActionType[T]) => createUserActionConstr def CreateUsersWithListInputIndexOutOfBoundsException(resultP: java.lang.IndexOutOfBoundsException)(implicit writerP: String => Option[Writeable[java.lang.Exception]]) = success(new CreateUsersWithListInputType[java.lang.IndexOutOfBoundsException] { val statusCode = 405; val result = resultP; val writer = writerP }) def CreateUsersWithListInputIndexOutOfBoundsException(resultF: Future[java.lang.IndexOutOfBoundsException])(implicit writerP: String => Option[Writeable[java.lang.Exception]]) = resultF map { resultP => (new CreateUsersWithListInputType[java.lang.IndexOutOfBoundsException] { val statusCode = 405; val result = resultP; val writer = writerP }) } - private type createUsersWithListInputActionRequestType = (UsersCreateWithListPostBody) + private type createUsersWithListInputActionRequestType = (Option[Seq[User]]) private type createUsersWithListInputActionType[T] = createUsersWithListInputActionRequestType => Future[CreateUsersWithListInputType[T] forSome { type T }] @@ -206,9 +206,9 @@ def createUserAction[T] = (f: createUserActionType[T]) => createUserActionConstr val createUsersWithListInputActionConstructor = Action -def createUsersWithListInputAction[T] = (f: createUsersWithListInputActionType[T]) => createUsersWithListInputActionConstructor.async(createUsersWithListInputParser) { implicit request: Request[UsersCreateWithListPostBody] => +def createUsersWithListInputAction[T] = (f: createUsersWithListInputActionType[T]) => createUsersWithListInputActionConstructor.async(createUsersWithListInputParser) { implicit request: Request[Option[Seq[User]]] => - def processValidcreateUsersWithListInputRequest(body: UsersCreateWithListPostBody): Either[Result, Future[CreateUsersWithListInputType[_]]] = { + def processValidcreateUsersWithListInputRequest(body: Option[Seq[User]]): Either[Result, Future[CreateUsersWithListInputType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((body))) new UsersCreateWithListPostValidator(body).errors match { @@ -222,7 +222,7 @@ def createUsersWithListInputAction[T] = (f: createUsersWithListInputActionType[T } - val body: UsersCreateWithListPostBody = request.body + val body: Option[Seq[User]] = request.body @@ -301,7 +301,7 @@ def getUserByNameAction[T] = (f: getUserByNameActionType[T]) => (username: Strin def UpdateUserIndexOutOfBoundsException(resultP: java.lang.IndexOutOfBoundsException)(implicit writerP: String => Option[Writeable[java.lang.Exception]]) = success(new UpdateUserType[java.lang.IndexOutOfBoundsException] { val statusCode = 405; val result = resultP; val writer = writerP }) def UpdateUserIndexOutOfBoundsException(resultF: Future[java.lang.IndexOutOfBoundsException])(implicit writerP: String => Option[Writeable[java.lang.Exception]]) = resultF map { resultP => (new UpdateUserType[java.lang.IndexOutOfBoundsException] { val statusCode = 405; val result = resultP; val writer = writerP }) } - private type updateUserActionRequestType = (String, UsersUsernamePutBody) + private type updateUserActionRequestType = (String, Option[User]) private type updateUserActionType[T] = updateUserActionRequestType => Future[UpdateUserType[T] forSome { type T }] @@ -316,9 +316,9 @@ def getUserByNameAction[T] = (f: getUserByNameActionType[T]) => (username: Strin val updateUserActionConstructor = Action -def updateUserAction[T] = (f: updateUserActionType[T]) => (username: String) => updateUserActionConstructor.async(updateUserParser) { implicit request: Request[UsersUsernamePutBody] => +def updateUserAction[T] = (f: updateUserActionType[T]) => (username: String) => updateUserActionConstructor.async(updateUserParser) { implicit request: Request[Option[User]] => - def processValidupdateUserRequest(username: String, body: UsersUsernamePutBody): Either[Result, Future[UpdateUserType[_]]] = { + def processValidupdateUserRequest(username: String, body: Option[User]): Either[Result, Future[UpdateUserType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((username, body))) new UsersUsernamePutValidator(username, body).errors match { @@ -332,7 +332,7 @@ def updateUserAction[T] = (f: updateUserActionType[T]) => (username: String) => } - val body: UsersUsernamePutBody = request.body + val body: Option[User] = request.body @@ -411,7 +411,7 @@ def deleteUserAction[T] = (f: deleteUserActionType[T]) => (username: String) => def UpdatePetIndexOutOfBoundsException(resultP: java.lang.IndexOutOfBoundsException)(implicit writerP: String => Option[Writeable[java.lang.Exception]]) = success(new UpdatePetType[java.lang.IndexOutOfBoundsException] { val statusCode = 405; val result = resultP; val writer = writerP }) def UpdatePetIndexOutOfBoundsException(resultF: Future[java.lang.IndexOutOfBoundsException])(implicit writerP: String => Option[Writeable[java.lang.Exception]]) = resultF map { resultP => (new UpdatePetType[java.lang.IndexOutOfBoundsException] { val statusCode = 405; val result = resultP; val writer = writerP }) } - private type updatePetActionRequestType = (PetsPostBody) + private type updatePetActionRequestType = (Option[Pet]) private type updatePetActionType[T] = updatePetActionRequestType => Future[UpdatePetType[T] forSome { type T }] @@ -428,9 +428,9 @@ def deleteUserAction[T] = (f: deleteUserActionType[T]) => (username: String) => val updatePetActionConstructor = new updatePetSecureAction("write_pets", "read_pets") -def updatePetAction[T] = (f: updatePetActionType[T]) => updatePetActionConstructor.async(updatePetParser) { implicit request: Request[PetsPostBody] => +def updatePetAction[T] = (f: updatePetActionType[T]) => updatePetActionConstructor.async(updatePetParser) { implicit request: Request[Option[Pet]] => - def processValidupdatePetRequest(body: PetsPostBody): Either[Result, Future[UpdatePetType[_]]] = { + def processValidupdatePetRequest(body: Option[Pet]): Either[Result, Future[UpdatePetType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((body))) new PetsPutValidator(body).errors match { @@ -444,7 +444,7 @@ def updatePetAction[T] = (f: updatePetActionType[T]) => updatePetActionConstruct } - val body: PetsPostBody = request.body + val body: Option[Pet] = request.body @@ -470,7 +470,7 @@ def updatePetAction[T] = (f: updatePetActionType[T]) => updatePetActionConstruct def AddPetIndexOutOfBoundsException(resultP: java.lang.IndexOutOfBoundsException)(implicit writerP: String => Option[Writeable[java.lang.Exception]]) = success(new AddPetType[java.lang.IndexOutOfBoundsException] { val statusCode = 405; val result = resultP; val writer = writerP }) def AddPetIndexOutOfBoundsException(resultF: Future[java.lang.IndexOutOfBoundsException])(implicit writerP: String => Option[Writeable[java.lang.Exception]]) = resultF map { resultP => (new AddPetType[java.lang.IndexOutOfBoundsException] { val statusCode = 405; val result = resultP; val writer = writerP }) } - private type addPetActionRequestType = (PetsPostBody) + private type addPetActionRequestType = (Option[Pet]) private type addPetActionType[T] = addPetActionRequestType => Future[AddPetType[T] forSome { type T }] @@ -487,9 +487,9 @@ def updatePetAction[T] = (f: updatePetActionType[T]) => updatePetActionConstruct val addPetActionConstructor = new addPetSecureAction("write_pets", "read_pets") -def addPetAction[T] = (f: addPetActionType[T]) => addPetActionConstructor.async(addPetParser) { implicit request: Request[PetsPostBody] => +def addPetAction[T] = (f: addPetActionType[T]) => addPetActionConstructor.async(addPetParser) { implicit request: Request[Option[Pet]] => - def processValidaddPetRequest(body: PetsPostBody): Either[Result, Future[AddPetType[_]]] = { + def processValidaddPetRequest(body: Option[Pet]): Either[Result, Future[AddPetType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((body))) new PetsPostValidator(body).errors match { @@ -503,7 +503,7 @@ def addPetAction[T] = (f: addPetActionType[T]) => addPetActionConstructor.async( } - val body: PetsPostBody = request.body + val body: Option[Pet] = request.body @@ -527,7 +527,7 @@ def addPetAction[T] = (f: addPetActionType[T]) => addPetActionConstructor.async( def CreateUsersWithArrayInputIndexOutOfBoundsException(resultP: java.lang.IndexOutOfBoundsException)(implicit writerP: String => Option[Writeable[java.lang.Exception]]) = success(new CreateUsersWithArrayInputType[java.lang.IndexOutOfBoundsException] { val statusCode = 405; val result = resultP; val writer = writerP }) def CreateUsersWithArrayInputIndexOutOfBoundsException(resultF: Future[java.lang.IndexOutOfBoundsException])(implicit writerP: String => Option[Writeable[java.lang.Exception]]) = resultF map { resultP => (new CreateUsersWithArrayInputType[java.lang.IndexOutOfBoundsException] { val statusCode = 405; val result = resultP; val writer = writerP }) } - private type createUsersWithArrayInputActionRequestType = (UsersCreateWithListPostBody) + private type createUsersWithArrayInputActionRequestType = (Option[Seq[User]]) private type createUsersWithArrayInputActionType[T] = createUsersWithArrayInputActionRequestType => Future[CreateUsersWithArrayInputType[T] forSome { type T }] @@ -542,9 +542,9 @@ def addPetAction[T] = (f: addPetActionType[T]) => addPetActionConstructor.async( val createUsersWithArrayInputActionConstructor = Action -def createUsersWithArrayInputAction[T] = (f: createUsersWithArrayInputActionType[T]) => createUsersWithArrayInputActionConstructor.async(createUsersWithArrayInputParser) { implicit request: Request[UsersCreateWithListPostBody] => +def createUsersWithArrayInputAction[T] = (f: createUsersWithArrayInputActionType[T]) => createUsersWithArrayInputActionConstructor.async(createUsersWithArrayInputParser) { implicit request: Request[Option[Seq[User]]] => - def processValidcreateUsersWithArrayInputRequest(body: UsersCreateWithListPostBody): Either[Result, Future[CreateUsersWithArrayInputType[_]]] = { + def processValidcreateUsersWithArrayInputRequest(body: Option[Seq[User]]): Either[Result, Future[CreateUsersWithArrayInputType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((body))) new UsersCreateWithArrayPostValidator(body).errors match { @@ -558,7 +558,7 @@ def createUsersWithArrayInputAction[T] = (f: createUsersWithArrayInputActionType } - val body: UsersCreateWithListPostBody = request.body + val body: Option[Seq[User]] = request.body @@ -891,15 +891,15 @@ def deletePetAction[T] = (f: deletePetActionType[T]) => (petId: Long) => deleteP def FindPetsByStatusIndexOutOfBoundsException(resultP: java.lang.IndexOutOfBoundsException)(implicit writerP: String => Option[Writeable[java.lang.Exception]]) = success(new FindPetsByStatusType[java.lang.IndexOutOfBoundsException] { val statusCode = 405; val result = resultP; val writer = writerP }) def FindPetsByStatusIndexOutOfBoundsException(resultF: Future[java.lang.IndexOutOfBoundsException])(implicit writerP: String => Option[Writeable[java.lang.Exception]]) = resultF map { resultP => (new FindPetsByStatusType[java.lang.IndexOutOfBoundsException] { val statusCode = 405; val result = resultP; val writer = writerP }) } - private type findPetsByStatusActionRequestType = (PetsFindByStatusGetStatus) + private type findPetsByStatusActionRequestType = (Option[ArrayWrapper[String]]) private type findPetsByStatusActionType[T] = findPetsByStatusActionRequestType => Future[FindPetsByStatusType[T] forSome { type T }] val findPetsByStatusActionConstructor = new findPetsByStatusSecureAction("write_pets", "read_pets") -def findPetsByStatusAction[T] = (f: findPetsByStatusActionType[T]) => (status: PetsFindByStatusGetStatus) => findPetsByStatusActionConstructor.async { implicit request: Request[AnyContent] => +def findPetsByStatusAction[T] = (f: findPetsByStatusActionType[T]) => (status: Option[ArrayWrapper[String]]) => findPetsByStatusActionConstructor.async { implicit request: Request[AnyContent] => - def processValidfindPetsByStatusRequest(status: PetsFindByStatusGetStatus): Either[Result, Future[FindPetsByStatusType[_]]] = { + def processValidfindPetsByStatusRequest(status: Option[ArrayWrapper[String]]): Either[Result, Future[FindPetsByStatusType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((status))) new PetsFindByStatusGetValidator(status).errors match { @@ -940,15 +940,15 @@ def findPetsByStatusAction[T] = (f: findPetsByStatusActionType[T]) => (status: P def LoginUserIndexOutOfBoundsException(resultP: java.lang.IndexOutOfBoundsException)(implicit writerP: String => Option[Writeable[java.lang.Exception]]) = success(new LoginUserType[java.lang.IndexOutOfBoundsException] { val statusCode = 405; val result = resultP; val writer = writerP }) def LoginUserIndexOutOfBoundsException(resultF: Future[java.lang.IndexOutOfBoundsException])(implicit writerP: String => Option[Writeable[java.lang.Exception]]) = resultF map { resultP => (new LoginUserType[java.lang.IndexOutOfBoundsException] { val statusCode = 405; val result = resultP; val writer = writerP }) } - private type loginUserActionRequestType = (OrderStatus, OrderStatus) + private type loginUserActionRequestType = (Option[String], Option[String]) private type loginUserActionType[T] = loginUserActionRequestType => Future[LoginUserType[T] forSome { type T }] val loginUserActionConstructor = Action -def loginUserAction[T] = (f: loginUserActionType[T]) => (username: OrderStatus, password: OrderStatus) => loginUserActionConstructor.async { implicit request: Request[AnyContent] => +def loginUserAction[T] = (f: loginUserActionType[T]) => (username: Option[String], password: Option[String]) => loginUserActionConstructor.async { implicit request: Request[AnyContent] => - def processValidloginUserRequest(username: OrderStatus, password: OrderStatus): Either[Result, Future[LoginUserType[_]]] = { + def processValidloginUserRequest(username: Option[String], password: Option[String]): Either[Result, Future[LoginUserType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((username, password))) new UsersLoginGetValidator(username, password).errors match { diff --git a/play-scala-generator/src/test/resources/expected_results/base_controllers/string_formats_yaml.base.scala b/play-scala-generator/src/test/resources/expected_results/base_controllers/string_formats_yaml.base.scala index 3caaf608..c9db6eb4 100644 --- a/play-scala-generator/src/test/resources/expected_results/base_controllers/string_formats_yaml.base.scala +++ b/play-scala-generator/src/test/resources/expected_results/base_controllers/string_formats_yaml.base.scala @@ -12,11 +12,11 @@ import scala.concurrent.Future import scala.util._ import de.zalando.play.controllers.Base64String import Base64String._ +import de.zalando.play.controllers.BinaryString +import BinaryString._ import java.time.ZonedDateTime import java.util.UUID import java.time.LocalDate -import de.zalando.play.controllers.BinaryString -import BinaryString._ import de.zalando.play.controllers.PlayPathBindables @@ -31,7 +31,7 @@ trait String_formatsYamlBase extends Controller with PlayBodyParsing { def Get200(headers: Seq[(String, String)] = Nil) = success(new EmptyReturn(200, headers){}) - private type getActionRequestType = (GetDate_time, GetDate, GetBase64, GetUuid, BinaryString) + private type getActionRequestType = (Option[ZonedDateTime], Option[LocalDate], Option[Base64String], Option[UUID], BinaryString) private type getActionType[T] = getActionRequestType => Future[GetType[T] forSome { type T }] @@ -46,9 +46,9 @@ trait String_formatsYamlBase extends Controller with PlayBodyParsing { val getActionConstructor = Action -def getAction[T] = (f: getActionType[T]) => (date_time: GetDate_time, date: GetDate, base64: GetBase64, uuid: GetUuid) => getActionConstructor.async(getParser) { implicit request: Request[BinaryString] => +def getAction[T] = (f: getActionType[T]) => (date_time: Option[ZonedDateTime], date: Option[LocalDate], base64: Option[Base64String], uuid: Option[UUID]) => getActionConstructor.async(getParser) { implicit request: Request[BinaryString] => - def processValidgetRequest(date_time: GetDate_time, date: GetDate, base64: GetBase64, uuid: GetUuid, petId: BinaryString): Either[Result, Future[GetType[_]]] = { + def processValidgetRequest(date_time: Option[ZonedDateTime], date: Option[LocalDate], base64: Option[Base64String], uuid: Option[UUID], petId: BinaryString): Either[Result, Future[GetType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((date_time, date, base64, uuid, petId))) new GetValidator(date_time, date, base64, uuid, petId).errors match { diff --git a/play-scala-generator/src/test/resources/expected_results/base_controllers/type_deduplication_yaml.base.scala b/play-scala-generator/src/test/resources/expected_results/base_controllers/type_deduplication_yaml.base.scala index 19f8eba7..f1494e90 100644 --- a/play-scala-generator/src/test/resources/expected_results/base_controllers/type_deduplication_yaml.base.scala +++ b/play-scala-generator/src/test/resources/expected_results/base_controllers/type_deduplication_yaml.base.scala @@ -251,15 +251,15 @@ def putplantsByPlant_idSunlight_needsAction[T] = (f: putplantsByPlant_idSunlight def Getusers200(resultF: Future[Seq[User]])(implicit writerP: String => Option[Writeable[Seq[User]]]) = resultF map { resultP => (new GetusersType[Seq[User]] { val statusCode = 200; val result = resultP; val writer = writerP }) } - private type getusersActionRequestType = (UsersGetLimit, UsersGetLimit) + private type getusersActionRequestType = (Option[BigInt], Option[BigInt]) private type getusersActionType[T] = getusersActionRequestType => Future[GetusersType[T] forSome { type T }] val getusersActionConstructor = Action -def getusersAction[T] = (f: getusersActionType[T]) => (limit: UsersGetLimit, offset: UsersGetLimit) => getusersActionConstructor.async { implicit request: Request[AnyContent] => +def getusersAction[T] = (f: getusersActionType[T]) => (limit: Option[BigInt], offset: Option[BigInt]) => getusersActionConstructor.async { implicit request: Request[AnyContent] => - def processValidgetusersRequest(limit: UsersGetLimit, offset: UsersGetLimit): Either[Result, Future[GetusersType[_]]] = { + def processValidgetusersRequest(limit: Option[BigInt], offset: Option[BigInt]): Either[Result, Future[GetusersType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((limit, offset))) new UsersGetValidator(limit, offset).errors match { @@ -478,15 +478,15 @@ def deleteareasByArea_idAction[T] = (f: deleteareasByArea_idActionType[T]) => (a def Getplants200(resultF: Future[Seq[Plant]])(implicit writerP: String => Option[Writeable[Seq[Plant]]]) = resultF map { resultP => (new GetplantsType[Seq[Plant]] { val statusCode = 200; val result = resultP; val writer = writerP }) } - private type getplantsActionRequestType = (PlantsGetLimit, PlantsGetOffset) + private type getplantsActionRequestType = (Option[BigInt], Option[BigInt]) private type getplantsActionType[T] = getplantsActionRequestType => Future[GetplantsType[T] forSome { type T }] val getplantsActionConstructor = Action -def getplantsAction[T] = (f: getplantsActionType[T]) => (limit: PlantsGetLimit, offset: PlantsGetOffset) => getplantsActionConstructor.async { implicit request: Request[AnyContent] => +def getplantsAction[T] = (f: getplantsActionType[T]) => (limit: Option[BigInt], offset: Option[BigInt]) => getplantsActionConstructor.async { implicit request: Request[AnyContent] => - def processValidgetplantsRequest(limit: PlantsGetLimit, offset: PlantsGetOffset): Either[Result, Future[GetplantsType[_]]] = { + def processValidgetplantsRequest(limit: Option[BigInt], offset: Option[BigInt]): Either[Result, Future[GetplantsType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((limit, offset))) new PlantsGetValidator(limit, offset).errors match { @@ -523,15 +523,15 @@ def getplantsAction[T] = (f: getplantsActionType[T]) => (limit: PlantsGetLimit, def GetuserByUser_idPlants404(headers: Seq[(String, String)] = Nil) = success(new EmptyReturn(404, headers){}) - private type getuserByUser_idPlantsActionRequestType = (String, UsersGetLimit, UsersGetLimit) + private type getuserByUser_idPlantsActionRequestType = (String, Option[BigInt], Option[BigInt]) private type getuserByUser_idPlantsActionType[T] = getuserByUser_idPlantsActionRequestType => Future[GetuserByUser_idPlantsType[T] forSome { type T }] val getuserByUser_idPlantsActionConstructor = Action -def getuserByUser_idPlantsAction[T] = (f: getuserByUser_idPlantsActionType[T]) => (user_id: String, limit: UsersGetLimit, offset: UsersGetLimit) => getuserByUser_idPlantsActionConstructor.async { implicit request: Request[AnyContent] => +def getuserByUser_idPlantsAction[T] = (f: getuserByUser_idPlantsActionType[T]) => (user_id: String, limit: Option[BigInt], offset: Option[BigInt]) => getuserByUser_idPlantsActionConstructor.async { implicit request: Request[AnyContent] => - def processValidgetuserByUser_idPlantsRequest(user_id: String, limit: UsersGetLimit, offset: UsersGetLimit): Either[Result, Future[GetuserByUser_idPlantsType[_]]] = { + def processValidgetuserByUser_idPlantsRequest(user_id: String, limit: Option[BigInt], offset: Option[BigInt]): Either[Result, Future[GetuserByUser_idPlantsType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((user_id, limit, offset))) new UserUser_idPlantsGetValidator(user_id, limit, offset).errors match { @@ -721,15 +721,15 @@ def deleteusersByUser_idAction[T] = (f: deleteusersByUser_idActionType[T]) => (u def Getareas200(resultF: Future[Seq[Area]])(implicit writerP: String => Option[Writeable[Seq[Area]]]) = resultF map { resultP => (new GetareasType[Seq[Area]] { val statusCode = 200; val result = resultP; val writer = writerP }) } - private type getareasActionRequestType = (UsersGetLimit, UsersGetLimit) + private type getareasActionRequestType = (Option[BigInt], Option[BigInt]) private type getareasActionType[T] = getareasActionRequestType => Future[GetareasType[T] forSome { type T }] val getareasActionConstructor = Action -def getareasAction[T] = (f: getareasActionType[T]) => (limit: UsersGetLimit, offset: UsersGetLimit) => getareasActionConstructor.async { implicit request: Request[AnyContent] => +def getareasAction[T] = (f: getareasActionType[T]) => (limit: Option[BigInt], offset: Option[BigInt]) => getareasActionConstructor.async { implicit request: Request[AnyContent] => - def processValidgetareasRequest(limit: UsersGetLimit, offset: UsersGetLimit): Either[Result, Future[GetareasType[_]]] = { + def processValidgetareasRequest(limit: Option[BigInt], offset: Option[BigInt]): Either[Result, Future[GetareasType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((limit, offset))) new AreasGetValidator(limit, offset).errors match { @@ -1048,15 +1048,15 @@ def deleteusersByUser_idPictureAction[T] = (f: deleteusersByUser_idPictureAction def GetplantsByPlant_idPictures404(headers: Seq[(String, String)] = Nil) = success(new EmptyReturn(404, headers){}) - private type getplantsByPlant_idPicturesActionRequestType = (String, UsersGetLimit, UsersGetLimit) + private type getplantsByPlant_idPicturesActionRequestType = (String, Option[BigInt], Option[BigInt]) private type getplantsByPlant_idPicturesActionType[T] = getplantsByPlant_idPicturesActionRequestType => Future[GetplantsByPlant_idPicturesType[T] forSome { type T }] val getplantsByPlant_idPicturesActionConstructor = Action -def getplantsByPlant_idPicturesAction[T] = (f: getplantsByPlant_idPicturesActionType[T]) => (plant_id: String, limit: UsersGetLimit, offset: UsersGetLimit) => getplantsByPlant_idPicturesActionConstructor.async { implicit request: Request[AnyContent] => +def getplantsByPlant_idPicturesAction[T] = (f: getplantsByPlant_idPicturesActionType[T]) => (plant_id: String, limit: Option[BigInt], offset: Option[BigInt]) => getplantsByPlant_idPicturesActionConstructor.async { implicit request: Request[AnyContent] => - def processValidgetplantsByPlant_idPicturesRequest(plant_id: String, limit: UsersGetLimit, offset: UsersGetLimit): Either[Result, Future[GetplantsByPlant_idPicturesType[_]]] = { + def processValidgetplantsByPlant_idPicturesRequest(plant_id: String, limit: Option[BigInt], offset: Option[BigInt]): Either[Result, Future[GetplantsByPlant_idPicturesType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((plant_id, limit, offset))) new PlantsPlant_idPicturesGetValidator(plant_id, limit, offset).errors match { @@ -1240,15 +1240,15 @@ def deleteplantsByPlant_idAction[T] = (f: deleteplantsByPlant_idActionType[T]) = def GetplantsByPlant_idWaterings404(headers: Seq[(String, String)] = Nil) = success(new EmptyReturn(404, headers){}) - private type getplantsByPlant_idWateringsActionRequestType = (String, UsersGetLimit, UsersGetLimit) + private type getplantsByPlant_idWateringsActionRequestType = (String, Option[BigInt], Option[BigInt]) private type getplantsByPlant_idWateringsActionType[T] = getplantsByPlant_idWateringsActionRequestType => Future[GetplantsByPlant_idWateringsType[T] forSome { type T }] val getplantsByPlant_idWateringsActionConstructor = Action -def getplantsByPlant_idWateringsAction[T] = (f: getplantsByPlant_idWateringsActionType[T]) => (plant_id: String, limit: UsersGetLimit, offset: UsersGetLimit) => getplantsByPlant_idWateringsActionConstructor.async { implicit request: Request[AnyContent] => +def getplantsByPlant_idWateringsAction[T] = (f: getplantsByPlant_idWateringsActionType[T]) => (plant_id: String, limit: Option[BigInt], offset: Option[BigInt]) => getplantsByPlant_idWateringsActionConstructor.async { implicit request: Request[AnyContent] => - def processValidgetplantsByPlant_idWateringsRequest(plant_id: String, limit: UsersGetLimit, offset: UsersGetLimit): Either[Result, Future[GetplantsByPlant_idWateringsType[_]]] = { + def processValidgetplantsByPlant_idWateringsRequest(plant_id: String, limit: Option[BigInt], offset: Option[BigInt]): Either[Result, Future[GetplantsByPlant_idWateringsType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((plant_id, limit, offset))) new PlantsPlant_idWateringsGetValidator(plant_id, limit, offset).errors match { diff --git a/play-scala-generator/src/test/resources/expected_results/base_controllers/uber_api_yaml.base.scala b/play-scala-generator/src/test/resources/expected_results/base_controllers/uber_api_yaml.base.scala index c603ed4a..5e1efd50 100644 --- a/play-scala-generator/src/test/resources/expected_results/base_controllers/uber_api_yaml.base.scala +++ b/play-scala-generator/src/test/resources/expected_results/base_controllers/uber_api_yaml.base.scala @@ -10,8 +10,8 @@ import PlayBodyParsing._ import scala.concurrent.Future import scala.util._ -import java.util.UUID import scala.math.BigDecimal +import java.util.UUID import de.zalando.play.controllers.PlayPathBindables @@ -103,15 +103,15 @@ def getproductsAction[T] = (f: getproductsActionType[T]) => (latitude: Double, l def GetestimatesTime200(resultF: Future[Seq[Product]])(implicit writerP: String => Option[Writeable[Seq[Product]]]) = resultF map { resultP => (new GetestimatesTimeType[Seq[Product]] { val statusCode = 200; val result = resultP; val writer = writerP }) } - private type getestimatesTimeActionRequestType = (Double, Double, EstimatesTimeGetCustomer_uuid, ProfilePicture) + private type getestimatesTimeActionRequestType = (Double, Double, Option[UUID], Option[String]) private type getestimatesTimeActionType[T] = getestimatesTimeActionRequestType => Future[GetestimatesTimeType[T] forSome { type T }] val getestimatesTimeActionConstructor = Action -def getestimatesTimeAction[T] = (f: getestimatesTimeActionType[T]) => (start_latitude: Double, start_longitude: Double, customer_uuid: EstimatesTimeGetCustomer_uuid, product_id: ProfilePicture) => getestimatesTimeActionConstructor.async { implicit request: Request[AnyContent] => +def getestimatesTimeAction[T] = (f: getestimatesTimeActionType[T]) => (start_latitude: Double, start_longitude: Double, customer_uuid: Option[UUID], product_id: Option[String]) => getestimatesTimeActionConstructor.async { implicit request: Request[AnyContent] => - def processValidgetestimatesTimeRequest(start_latitude: Double, start_longitude: Double, customer_uuid: EstimatesTimeGetCustomer_uuid, product_id: ProfilePicture): Either[Result, Future[GetestimatesTimeType[_]]] = { + def processValidgetestimatesTimeRequest(start_latitude: Double, start_longitude: Double, customer_uuid: Option[UUID], product_id: Option[String]): Either[Result, Future[GetestimatesTimeType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((start_latitude, start_longitude, customer_uuid, product_id))) new EstimatesTimeGetValidator(start_latitude, start_longitude, customer_uuid, product_id).errors match { @@ -189,15 +189,15 @@ def getestimatesPriceAction[T] = (f: getestimatesPriceActionType[T]) => (start_l def Gethistory200(resultF: Future[Activities])(implicit writerP: String => Option[Writeable[Activities]]) = resultF map { resultP => (new GethistoryType[Activities] { val statusCode = 200; val result = resultP; val writer = writerP }) } - private type gethistoryActionRequestType = (ErrorCode, ErrorCode) + private type gethistoryActionRequestType = (Option[Int], Option[Int]) private type gethistoryActionType[T] = gethistoryActionRequestType => Future[GethistoryType[T] forSome { type T }] val gethistoryActionConstructor = Action -def gethistoryAction[T] = (f: gethistoryActionType[T]) => (offset: ErrorCode, limit: ErrorCode) => gethistoryActionConstructor.async { implicit request: Request[AnyContent] => +def gethistoryAction[T] = (f: gethistoryActionType[T]) => (offset: Option[Int], limit: Option[Int]) => gethistoryActionConstructor.async { implicit request: Request[AnyContent] => - def processValidgethistoryRequest(offset: ErrorCode, limit: ErrorCode): Either[Result, Future[GethistoryType[_]]] = { + def processValidgethistoryRequest(offset: Option[Int], limit: Option[Int]): Either[Result, Future[GethistoryType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((offset, limit))) new HistoryGetValidator(offset, limit).errors match { diff --git a/play-scala-generator/src/test/resources/expected_results/base_controllers/wrong_field_name_yaml.base.scala b/play-scala-generator/src/test/resources/expected_results/base_controllers/wrong_field_name_yaml.base.scala index b4f7c3c7..8b7f2cdc 100644 --- a/play-scala-generator/src/test/resources/expected_results/base_controllers/wrong_field_name_yaml.base.scala +++ b/play-scala-generator/src/test/resources/expected_results/base_controllers/wrong_field_name_yaml.base.scala @@ -27,7 +27,7 @@ trait Wrong_field_nameYamlBase extends Controller with PlayBodyParsing { def Get200(resultF: Future[StatusAndCode])(implicit writerP: String => Option[Writeable[StatusAndCode]]) = resultF map { resultP => (new GetType[StatusAndCode] { val statusCode = 200; val result = resultP; val writer = writerP }) } - private type getActionRequestType = (GetOptCodes, GetCodes) + private type getActionRequestType = (Option[GetOptCodesOpt], GetCodes) private type getActionType[T] = getActionRequestType => Future[GetType[T] forSome { type T }] @@ -35,7 +35,7 @@ trait Wrong_field_nameYamlBase extends Controller with PlayBodyParsing { def getAction[T] = (f: getActionType[T]) => getActionConstructor.async { implicit request: Request[AnyContent] => - def processValidgetRequest(optCodes: GetOptCodes, codes: GetCodes): Either[Result, Future[GetType[_]]] = { + def processValidgetRequest(optCodes: Option[GetOptCodesOpt], codes: GetCodes): Either[Result, Future[GetType[_]]] = { lazy val apiFirstTempResultHolder = Right(f((optCodes, codes))) new GetValidator(optCodes, codes).errors match { @@ -50,7 +50,7 @@ def getAction[T] = (f: getActionType[T]) => getActionConstructor.async { implici } - val optCodes: Either[String,GetOptCodes] = fromParametersOptional[GetOptCodes]("header")("optCodes", request.headers.toMap, None) + val optCodes: Either[String,Option[GetOptCodesOpt]] = fromParametersOptional[Option[GetOptCodesOpt]]("header")("optCodes", request.headers.toMap, None) val codes: Either[String,GetCodes] = fromParameters[GetCodes]("header")("codes", request.headers.toMap, None) diff --git a/play-scala-generator/src/test/resources/expected_results/controllers/all_of_imports_yaml.scala b/play-scala-generator/src/test/resources/expected_results/controllers/all_of_imports_yaml.scala index 20f9c242..e9cae095 100644 --- a/play-scala-generator/src/test/resources/expected_results/controllers/all_of_imports_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/controllers/all_of_imports_yaml.scala @@ -23,6 +23,7 @@ import javax.inject._ package all_of_imports.yaml { // ----- Start of unmanaged code area for package All_of_importsYaml + // ----- End of unmanaged code area for package All_of_importsYaml class All_of_importsYaml @Inject() ( // ----- Start of unmanaged code area for injections All_of_importsYaml @@ -34,11 +35,11 @@ package all_of_imports.yaml { // ----- Start of unmanaged code area for constructor All_of_importsYaml // ----- End of unmanaged code area for constructor All_of_importsYaml - val post = postAction { (body: DatetimeValue) => + val post = postAction { (body: DatetimeValue) => // ----- Start of unmanaged code area for action All_of_importsYaml.post NotImplementedYet // ----- End of unmanaged code area for action All_of_importsYaml.post } - + } } diff --git a/play-scala-generator/src/test/resources/expected_results/controllers/basic_auth_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/controllers/basic_auth_api_yaml.scala index c0d9801a..3a8683b7 100644 --- a/play-scala-generator/src/test/resources/expected_results/controllers/basic_auth_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/controllers/basic_auth_api_yaml.scala @@ -23,6 +23,7 @@ import javax.inject._ package basic.auth.api.yaml { // ----- Start of unmanaged code area for package BasicAuthApiYaml + // ----- End of unmanaged code area for package BasicAuthApiYaml class BasicAuthApiYaml @Inject() ( // ----- Start of unmanaged code area for injections BasicAuthApiYaml @@ -34,11 +35,11 @@ package basic.auth.api.yaml { // ----- Start of unmanaged code area for constructor BasicAuthApiYaml // ----- End of unmanaged code area for constructor BasicAuthApiYaml - val get = getAction { _ => + val get = getAction { _ => // ----- Start of unmanaged code area for action BasicAuthApiYaml.get NotImplementedYet // ----- End of unmanaged code area for action BasicAuthApiYaml.get } - + } } diff --git a/play-scala-generator/src/test/resources/expected_results/controllers/basic_polymorphism_yaml.scala b/play-scala-generator/src/test/resources/expected_results/controllers/basic_polymorphism_yaml.scala index 01872ee2..b66d8d6d 100644 --- a/play-scala-generator/src/test/resources/expected_results/controllers/basic_polymorphism_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/controllers/basic_polymorphism_yaml.scala @@ -23,6 +23,7 @@ import javax.inject._ package basic_polymorphism.yaml { // ----- Start of unmanaged code area for package Basic_polymorphismYaml + // ----- End of unmanaged code area for package Basic_polymorphismYaml class Basic_polymorphismYaml @Inject() ( // ----- Start of unmanaged code area for injections Basic_polymorphismYaml @@ -34,11 +35,11 @@ package basic_polymorphism.yaml { // ----- Start of unmanaged code area for constructor Basic_polymorphismYaml // ----- End of unmanaged code area for constructor Basic_polymorphismYaml - val put = putAction { (dummy: PutDummy) => + val put = putAction { (dummy: Option[Pet]) => // ----- Start of unmanaged code area for action Basic_polymorphismYaml.put NotImplementedYet // ----- End of unmanaged code area for action Basic_polymorphismYaml.put } - + } } diff --git a/play-scala-generator/src/test/resources/expected_results/controllers/cross_spec_references_yaml.scala b/play-scala-generator/src/test/resources/expected_results/controllers/cross_spec_references_yaml.scala index 4f26491b..44d43f45 100644 --- a/play-scala-generator/src/test/resources/expected_results/controllers/cross_spec_references_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/controllers/cross_spec_references_yaml.scala @@ -23,6 +23,7 @@ import javax.inject._ package cross_spec_references.yaml { // ----- Start of unmanaged code area for package Cross_spec_referencesYaml + // ----- End of unmanaged code area for package Cross_spec_referencesYaml class Cross_spec_referencesYaml @Inject() ( // ----- Start of unmanaged code area for injections Cross_spec_referencesYaml @@ -34,11 +35,11 @@ package cross_spec_references.yaml { // ----- Start of unmanaged code area for constructor Cross_spec_referencesYaml // ----- End of unmanaged code area for constructor Cross_spec_referencesYaml - val post = postAction { (root: ModelSchemaRoot) => + val post = postAction { (root: ModelSchemaRoot) => // ----- Start of unmanaged code area for action Cross_spec_referencesYaml.post NotImplementedYet // ----- End of unmanaged code area for action Cross_spec_referencesYaml.post } - + } } diff --git a/play-scala-generator/src/test/resources/expected_results/controllers/echo_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/controllers/echo_api_yaml.scala index ebaa4605..b04033ab 100644 --- a/play-scala-generator/src/test/resources/expected_results/controllers/echo_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/controllers/echo_api_yaml.scala @@ -23,6 +23,7 @@ import javax.inject._ package echo { // ----- Start of unmanaged code area for package EchoHandler + // ----- End of unmanaged code area for package EchoHandler class EchoHandler @Inject() ( // ----- Start of unmanaged code area for injections EchoHandler @@ -34,16 +35,17 @@ package echo { // ----- Start of unmanaged code area for constructor EchoHandler // ----- End of unmanaged code area for constructor EchoHandler - val method = methodAction { _ => + val method = methodAction { _ => // ----- Start of unmanaged code area for action EchoHandler.method NotImplementedYet // ----- End of unmanaged code area for action EchoHandler.method } - + } } package echo { // ----- Start of unmanaged code area for package EchoApiYaml + // ----- End of unmanaged code area for package EchoApiYaml class EchoApiYaml @Inject() ( // ----- Start of unmanaged code area for injections EchoApiYaml @@ -55,17 +57,17 @@ package echo { // ----- Start of unmanaged code area for constructor EchoApiYaml // ----- End of unmanaged code area for constructor EchoApiYaml - val post = postAction { input: (PostName, PostName) => + val post = postAction { input: (Option[String], Option[String]) => val (name, year) = input // ----- Start of unmanaged code area for action EchoApiYaml.post NotImplementedYet // ----- End of unmanaged code area for action EchoApiYaml.post } - val gettest_pathById = gettest_pathByIdAction { (id: String) => + val gettest_pathById = gettest_pathByIdAction { (id: String) => // ----- Start of unmanaged code area for action EchoApiYaml.gettest_pathById NotImplementedYet // ----- End of unmanaged code area for action EchoApiYaml.gettest_pathById } - + } } diff --git a/play-scala-generator/src/test/resources/expected_results/controllers/enum_yaml.scala b/play-scala-generator/src/test/resources/expected_results/controllers/enum_yaml.scala new file mode 100644 index 00000000..4d21dcbc --- /dev/null +++ b/play-scala-generator/src/test/resources/expected_results/controllers/enum_yaml.scala @@ -0,0 +1,45 @@ + +import play.api.mvc.{ Action, Controller } + +import play.api.data.validation.Constraint + +import play.api.inject.{ ApplicationLifecycle, ConfigurationProvider } + +import de.zalando.play.controllers._ + +import PlayBodyParsing._ + +import PlayValidations._ + +import scala.util._ + +import javax.inject._ + + +/** + * This controller is re-generated after each change in the specification. + * Please only place your hand-written code between appropriate comments in the body of the controller. + */ + +package enum.yaml { + // ----- Start of unmanaged code area for package EnumYaml + + // ----- End of unmanaged code area for package EnumYaml + class EnumYaml @Inject() ( + // ----- Start of unmanaged code area for injections EnumYaml + + // ----- End of unmanaged code area for injections EnumYaml + lifecycle: ApplicationLifecycle, + config: ConfigurationProvider + ) extends EnumYamlBase { + // ----- Start of unmanaged code area for constructor EnumYaml + + // ----- End of unmanaged code area for constructor EnumYaml + val gettest = gettestAction { (includes: Option[TestGetIncludesOptionEnum]) => + // ----- Start of unmanaged code area for action EnumYaml.gettest + NotImplementedYet + // ----- End of unmanaged code area for action EnumYaml.gettest + } + + } +} diff --git a/play-scala-generator/src/test/resources/expected_results/controllers/error_in_array_yaml.scala b/play-scala-generator/src/test/resources/expected_results/controllers/error_in_array_yaml.scala index 6141d417..d902b823 100644 --- a/play-scala-generator/src/test/resources/expected_results/controllers/error_in_array_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/controllers/error_in_array_yaml.scala @@ -23,6 +23,7 @@ import javax.inject._ package error_in_array.yaml { // ----- Start of unmanaged code area for package Error_in_arrayYaml + // ----- End of unmanaged code area for package Error_in_arrayYaml class Error_in_arrayYaml @Inject() ( // ----- Start of unmanaged code area for injections Error_in_arrayYaml @@ -34,11 +35,11 @@ package error_in_array.yaml { // ----- Start of unmanaged code area for constructor Error_in_arrayYaml // ----- End of unmanaged code area for constructor Error_in_arrayYaml - val getschemaModel = getschemaModelAction { (root: ModelSchemaRoot) => + val getschemaModel = getschemaModelAction { (root: ModelSchemaRoot) => // ----- Start of unmanaged code area for action Error_in_arrayYaml.getschemaModel NotImplementedYet // ----- End of unmanaged code area for action Error_in_arrayYaml.getschemaModel } - + } } diff --git a/play-scala-generator/src/test/resources/expected_results/controllers/expanded_polymorphism_yaml.scala b/play-scala-generator/src/test/resources/expected_results/controllers/expanded_polymorphism_yaml.scala index 5c695620..e5af1708 100644 --- a/play-scala-generator/src/test/resources/expected_results/controllers/expanded_polymorphism_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/controllers/expanded_polymorphism_yaml.scala @@ -23,6 +23,7 @@ import javax.inject._ package expanded { // ----- Start of unmanaged code area for package Expanded_polymorphismYaml + // ----- End of unmanaged code area for package Expanded_polymorphismYaml class Expanded_polymorphismYaml @Inject() ( // ----- Start of unmanaged code area for injections Expanded_polymorphismYaml @@ -34,22 +35,22 @@ package expanded { // ----- Start of unmanaged code area for constructor Expanded_polymorphismYaml // ----- End of unmanaged code area for constructor Expanded_polymorphismYaml - val findPets = findPetsAction { input: (PetsGetTags, PetsGetLimit) => + val findPets = findPetsAction { input: (Option[ArrayWrapper[String]], Option[Int]) => val (tags, limit) = input // ----- Start of unmanaged code area for action Expanded_polymorphismYaml.findPets NotImplementedYet // ----- End of unmanaged code area for action Expanded_polymorphismYaml.findPets } - val addPet = addPetAction { (pet: NewPet) => + val addPet = addPetAction { (pet: NewPet) => // ----- Start of unmanaged code area for action Expanded_polymorphismYaml.addPet NotImplementedYet // ----- End of unmanaged code area for action Expanded_polymorphismYaml.addPet } - val deletePet = deletePetAction { (id: Long) => + val deletePet = deletePetAction { (id: Long) => // ----- Start of unmanaged code area for action Expanded_polymorphismYaml.deletePet NotImplementedYet // ----- End of unmanaged code area for action Expanded_polymorphismYaml.deletePet } - + } } diff --git a/play-scala-generator/src/test/resources/expected_results/controllers/foodpanda_yaml.scala b/play-scala-generator/src/test/resources/expected_results/controllers/foodpanda_yaml.scala new file mode 100644 index 00000000..17a990cf --- /dev/null +++ b/play-scala-generator/src/test/resources/expected_results/controllers/foodpanda_yaml.scala @@ -0,0 +1,45 @@ + +import play.api.mvc.{ Action, Controller } + +import play.api.data.validation.Constraint + +import play.api.inject.{ ApplicationLifecycle, ConfigurationProvider } + +import de.zalando.play.controllers._ + +import PlayBodyParsing._ + +import PlayValidations._ + +import scala.util._ + +import javax.inject._ + + +/** + * This controller is re-generated after each change in the specification. + * Please only place your hand-written code between appropriate comments in the body of the controller. + */ + +package com.foodpanda.popsey.api { + // ----- Start of unmanaged code area for package FoodpandaYaml + + // ----- End of unmanaged code area for package FoodpandaYaml + class FoodpandaYaml @Inject() ( + // ----- Start of unmanaged code area for injections FoodpandaYaml + + // ----- End of unmanaged code area for injections FoodpandaYaml + lifecycle: ApplicationLifecycle, + config: ConfigurationProvider + ) extends FoodpandaYamlBase { + // ----- Start of unmanaged code area for constructor FoodpandaYaml + + // ----- End of unmanaged code area for constructor FoodpandaYaml + val searchVendors = searchVendorsAction { (query: VendorQuery) => + // ----- Start of unmanaged code area for action FoodpandaYaml.searchVendors + NotImplementedYet + // ----- End of unmanaged code area for action FoodpandaYaml.searchVendors + } + + } +} diff --git a/play-scala-generator/src/test/resources/expected_results/controllers/form_data_yaml.scala b/play-scala-generator/src/test/resources/expected_results/controllers/form_data_yaml.scala index 67b5af5c..b84ea31a 100644 --- a/play-scala-generator/src/test/resources/expected_results/controllers/form_data_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/controllers/form_data_yaml.scala @@ -25,6 +25,7 @@ import java.io.File package form_data.yaml { // ----- Start of unmanaged code area for package Form_dataYaml + // ----- End of unmanaged code area for package Form_dataYaml class Form_dataYaml @Inject() ( // ----- Start of unmanaged code area for injections Form_dataYaml @@ -36,24 +37,24 @@ package form_data.yaml { // ----- Start of unmanaged code area for constructor Form_dataYaml // ----- End of unmanaged code area for constructor Form_dataYaml - val postmultipart = postmultipartAction { input: (String, BothPostYear, MultipartPostAvatar) => + val postmultipart = postmultipartAction { input: (String, Option[BigInt], Option[File]) => val (name, year, avatar) = input // ----- Start of unmanaged code area for action Form_dataYaml.postmultipart NotImplementedYet // ----- End of unmanaged code area for action Form_dataYaml.postmultipart } - val posturl_encoded = posturl_encodedAction { input: (String, BothPostYear, File) => + val posturl_encoded = posturl_encodedAction { input: (String, Option[BigInt], File) => val (name, year, avatar) = input // ----- Start of unmanaged code area for action Form_dataYaml.posturl_encoded NotImplementedYet // ----- End of unmanaged code area for action Form_dataYaml.posturl_encoded } - val postboth = postbothAction { input: (String, BothPostYear, MultipartPostAvatar, File) => + val postboth = postbothAction { input: (String, Option[BigInt], Option[File], File) => val (name, year, avatar, ringtone) = input // ----- Start of unmanaged code area for action Form_dataYaml.postboth NotImplementedYet // ----- End of unmanaged code area for action Form_dataYaml.postboth } - + } } diff --git a/play-scala-generator/src/test/resources/expected_results/controllers/full_petstore_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/controllers/full_petstore_api_yaml.scala index 03c68694..f309b803 100644 --- a/play-scala-generator/src/test/resources/expected_results/controllers/full_petstore_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/controllers/full_petstore_api_yaml.scala @@ -23,6 +23,7 @@ import javax.inject._ package full.petstore.api.yaml { // ----- Start of unmanaged code area for package FullPetstoreApiYaml + // ----- End of unmanaged code area for package FullPetstoreApiYaml class FullPetstoreApiYaml @Inject() ( // ----- Start of unmanaged code area for injections FullPetstoreApiYaml @@ -34,73 +35,73 @@ package full.petstore.api.yaml { // ----- Start of unmanaged code area for constructor FullPetstoreApiYaml // ----- End of unmanaged code area for constructor FullPetstoreApiYaml - val findPetsByTags = findPetsByTagsAction { (tags: PetsFindByStatusGetStatus) => + val findPetsByTags = findPetsByTagsAction { (tags: Option[ArrayWrapper[String]]) => // ----- Start of unmanaged code area for action FullPetstoreApiYaml.findPetsByTags NotImplementedYet // ----- End of unmanaged code area for action FullPetstoreApiYaml.findPetsByTags } - val placeOrder = placeOrderAction { (body: StoresOrderPostBody) => + val placeOrder = placeOrderAction { (body: Option[Order]) => // ----- Start of unmanaged code area for action FullPetstoreApiYaml.placeOrder NotImplementedYet // ----- End of unmanaged code area for action FullPetstoreApiYaml.placeOrder } - val createUser = createUserAction { (body: UsersUsernamePutBody) => + val createUser = createUserAction { (body: Option[User]) => // ----- Start of unmanaged code area for action FullPetstoreApiYaml.createUser NotImplementedYet // ----- End of unmanaged code area for action FullPetstoreApiYaml.createUser } - val createUsersWithListInput = createUsersWithListInputAction { (body: UsersCreateWithListPostBody) => + val createUsersWithListInput = createUsersWithListInputAction { (body: Option[Seq[User]]) => // ----- Start of unmanaged code area for action FullPetstoreApiYaml.createUsersWithListInput NotImplementedYet // ----- End of unmanaged code area for action FullPetstoreApiYaml.createUsersWithListInput } - val getUserByName = getUserByNameAction { (username: String) => + val getUserByName = getUserByNameAction { (username: String) => // ----- Start of unmanaged code area for action FullPetstoreApiYaml.getUserByName NotImplementedYet // ----- End of unmanaged code area for action FullPetstoreApiYaml.getUserByName } - val updateUser = updateUserAction { input: (String, UsersUsernamePutBody) => + val updateUser = updateUserAction { input: (String, Option[User]) => val (username, body) = input // ----- Start of unmanaged code area for action FullPetstoreApiYaml.updateUser NotImplementedYet // ----- End of unmanaged code area for action FullPetstoreApiYaml.updateUser } - val deleteUser = deleteUserAction { (username: String) => + val deleteUser = deleteUserAction { (username: String) => // ----- Start of unmanaged code area for action FullPetstoreApiYaml.deleteUser NotImplementedYet // ----- End of unmanaged code area for action FullPetstoreApiYaml.deleteUser } - val updatePet = updatePetAction { (body: PetsPostBody) => + val updatePet = updatePetAction { (body: Option[Pet]) => // ----- Start of unmanaged code area for action FullPetstoreApiYaml.updatePet NotImplementedYet // ----- End of unmanaged code area for action FullPetstoreApiYaml.updatePet } - val addPet = addPetAction { (body: PetsPostBody) => + val addPet = addPetAction { (body: Option[Pet]) => // ----- Start of unmanaged code area for action FullPetstoreApiYaml.addPet NotImplementedYet // ----- End of unmanaged code area for action FullPetstoreApiYaml.addPet } - val createUsersWithArrayInput = createUsersWithArrayInputAction { (body: UsersCreateWithListPostBody) => + val createUsersWithArrayInput = createUsersWithArrayInputAction { (body: Option[Seq[User]]) => // ----- Start of unmanaged code area for action FullPetstoreApiYaml.createUsersWithArrayInput NotImplementedYet // ----- End of unmanaged code area for action FullPetstoreApiYaml.createUsersWithArrayInput } - val getOrderById = getOrderByIdAction { (orderId: String) => + val getOrderById = getOrderByIdAction { (orderId: String) => // ----- Start of unmanaged code area for action FullPetstoreApiYaml.getOrderById NotImplementedYet // ----- End of unmanaged code area for action FullPetstoreApiYaml.getOrderById } - val deleteOrder = deleteOrderAction { (orderId: String) => + val deleteOrder = deleteOrderAction { (orderId: String) => // ----- Start of unmanaged code area for action FullPetstoreApiYaml.deleteOrder NotImplementedYet // ----- End of unmanaged code area for action FullPetstoreApiYaml.deleteOrder } - val logoutUser = logoutUserAction { _ => + val logoutUser = logoutUserAction { _ => // ----- Start of unmanaged code area for action FullPetstoreApiYaml.logoutUser NotImplementedYet // ----- End of unmanaged code area for action FullPetstoreApiYaml.logoutUser } - val getPetById = getPetByIdAction { (petId: Long) => + val getPetById = getPetByIdAction { (petId: Long) => // ----- Start of unmanaged code area for action FullPetstoreApiYaml.getPetById NotImplementedYet // ----- End of unmanaged code area for action FullPetstoreApiYaml.getPetById @@ -117,17 +118,17 @@ package full.petstore.api.yaml { NotImplementedYet // ----- End of unmanaged code area for action FullPetstoreApiYaml.deletePet } - val findPetsByStatus = findPetsByStatusAction { (status: PetsFindByStatusGetStatus) => + val findPetsByStatus = findPetsByStatusAction { (status: Option[ArrayWrapper[String]]) => // ----- Start of unmanaged code area for action FullPetstoreApiYaml.findPetsByStatus NotImplementedYet // ----- End of unmanaged code area for action FullPetstoreApiYaml.findPetsByStatus } - val loginUser = loginUserAction { input: (OrderStatus, OrderStatus) => + val loginUser = loginUserAction { input: (Option[String], Option[String]) => val (username, password) = input // ----- Start of unmanaged code area for action FullPetstoreApiYaml.loginUser NotImplementedYet // ----- End of unmanaged code area for action FullPetstoreApiYaml.loginUser } - + } } diff --git a/play-scala-generator/src/test/resources/expected_results/controllers/hackweek_yaml.scala b/play-scala-generator/src/test/resources/expected_results/controllers/hackweek_yaml.scala index 8b6b1781..cb116a5b 100644 --- a/play-scala-generator/src/test/resources/expected_results/controllers/hackweek_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/controllers/hackweek_yaml.scala @@ -23,6 +23,7 @@ import javax.inject._ package hackweek.yaml { // ----- Start of unmanaged code area for package HackweekYaml + // ----- End of unmanaged code area for package HackweekYaml class HackweekYaml @Inject() ( // ----- Start of unmanaged code area for injections HackweekYaml @@ -34,11 +35,11 @@ package hackweek.yaml { // ----- Start of unmanaged code area for constructor HackweekYaml // ----- End of unmanaged code area for constructor HackweekYaml - val getschemaModel = getschemaModelAction { (root: ModelSchemaRoot) => + val getschemaModel = getschemaModelAction { (root: ModelSchemaRoot) => // ----- Start of unmanaged code area for action HackweekYaml.getschemaModel NotImplementedYet // ----- End of unmanaged code area for action HackweekYaml.getschemaModel } - + } } diff --git a/play-scala-generator/src/test/resources/expected_results/controllers/heroku_petstore_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/controllers/heroku_petstore_api_yaml.scala index 7f1c8e54..fbd8f8cb 100644 --- a/play-scala-generator/src/test/resources/expected_results/controllers/heroku_petstore_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/controllers/heroku_petstore_api_yaml.scala @@ -25,6 +25,7 @@ import scala.math.BigInt package heroku.petstore.api.yaml { // ----- Start of unmanaged code area for package HerokuPetstoreApiYaml + // ----- End of unmanaged code area for package HerokuPetstoreApiYaml class HerokuPetstoreApiYaml @Inject() ( // ----- Start of unmanaged code area for injections HerokuPetstoreApiYaml @@ -36,26 +37,26 @@ package heroku.petstore.api.yaml { // ----- Start of unmanaged code area for constructor HerokuPetstoreApiYaml // ----- End of unmanaged code area for constructor HerokuPetstoreApiYaml - val get = getAction { (limit: BigInt) => + val get = getAction { (limit: BigInt) => // ----- Start of unmanaged code area for action HerokuPetstoreApiYaml.get NotImplementedYet // ----- End of unmanaged code area for action HerokuPetstoreApiYaml.get } - val put = putAction { (pet: PutPet) => + val put = putAction { (pet: Option[Pet]) => // ----- Start of unmanaged code area for action HerokuPetstoreApiYaml.put NotImplementedYet // ----- End of unmanaged code area for action HerokuPetstoreApiYaml.put } - val post = postAction { (pet: Pet) => + val post = postAction { (pet: Pet) => // ----- Start of unmanaged code area for action HerokuPetstoreApiYaml.post NotImplementedYet // ----- End of unmanaged code area for action HerokuPetstoreApiYaml.post } - val getbyPetId = getbyPetIdAction { (petId: String) => + val getbyPetId = getbyPetIdAction { (petId: String) => // ----- Start of unmanaged code area for action HerokuPetstoreApiYaml.getbyPetId NotImplementedYet // ----- End of unmanaged code area for action HerokuPetstoreApiYaml.getbyPetId } - + } } diff --git a/play-scala-generator/src/test/resources/expected_results/controllers/i038_invalid_enum_members_yaml.scala b/play-scala-generator/src/test/resources/expected_results/controllers/i038_invalid_enum_members_yaml.scala index d6f3d294..757f4098 100644 --- a/play-scala-generator/src/test/resources/expected_results/controllers/i038_invalid_enum_members_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/controllers/i038_invalid_enum_members_yaml.scala @@ -23,6 +23,7 @@ import javax.inject._ package i038_invalid_enum_members.yaml { // ----- Start of unmanaged code area for package I038_invalid_enum_membersYaml + // ----- End of unmanaged code area for package I038_invalid_enum_membersYaml class I038_invalid_enum_membersYaml @Inject() ( // ----- Start of unmanaged code area for injections I038_invalid_enum_membersYaml @@ -34,11 +35,11 @@ package i038_invalid_enum_members.yaml { // ----- Start of unmanaged code area for constructor I038_invalid_enum_membersYaml // ----- End of unmanaged code area for constructor I038_invalid_enum_membersYaml - val get = getAction { _ => + val get = getAction { _ => // ----- Start of unmanaged code area for action I038_invalid_enum_membersYaml.get NotImplementedYet // ----- End of unmanaged code area for action I038_invalid_enum_membersYaml.get } - + } } diff --git a/play-scala-generator/src/test/resources/expected_results/controllers/instagram_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/controllers/instagram_api_yaml.scala index b37e38f9..c307ec7e 100644 --- a/play-scala-generator/src/test/resources/expected_results/controllers/instagram_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/controllers/instagram_api_yaml.scala @@ -29,6 +29,7 @@ import scala.math.BigDecimal package instagram.api.yaml { // ----- Start of unmanaged code area for package InstagramApiYaml + // ----- End of unmanaged code area for package InstagramApiYaml class InstagramApiYaml @Inject() ( // ----- Start of unmanaged code area for injections InstagramApiYaml @@ -40,146 +41,146 @@ package instagram.api.yaml { // ----- Start of unmanaged code area for constructor InstagramApiYaml // ----- End of unmanaged code area for constructor InstagramApiYaml - val getmediaByMedia_idLikes = getmediaByMedia_idLikesAction { (media_id: BigInt) => + val getmediaByMedia_idLikes = getmediaByMedia_idLikesAction { (media_id: BigInt) => // ----- Start of unmanaged code area for action InstagramApiYaml.getmediaByMedia_idLikes NotImplementedYet // ----- End of unmanaged code area for action InstagramApiYaml.getmediaByMedia_idLikes } - val postmediaByMedia_idLikes = postmediaByMedia_idLikesAction { (media_id: BigInt) => + val postmediaByMedia_idLikes = postmediaByMedia_idLikesAction { (media_id: BigInt) => // ----- Start of unmanaged code area for action InstagramApiYaml.postmediaByMedia_idLikes NotImplementedYet // ----- End of unmanaged code area for action InstagramApiYaml.postmediaByMedia_idLikes } - val deletemediaByMedia_idLikes = deletemediaByMedia_idLikesAction { (media_id: BigInt) => + val deletemediaByMedia_idLikes = deletemediaByMedia_idLikesAction { (media_id: BigInt) => // ----- Start of unmanaged code area for action InstagramApiYaml.deletemediaByMedia_idLikes NotImplementedYet // ----- End of unmanaged code area for action InstagramApiYaml.deletemediaByMedia_idLikes } - val getusersByUser_idFollows = getusersByUser_idFollowsAction { (user_id: BigDecimal) => + val getusersByUser_idFollows = getusersByUser_idFollowsAction { (user_id: BigDecimal) => // ----- Start of unmanaged code area for action InstagramApiYaml.getusersByUser_idFollows NotImplementedYet // ----- End of unmanaged code area for action InstagramApiYaml.getusersByUser_idFollows } - val getlocationsByLocation_id = getlocationsByLocation_idAction { (location_id: BigInt) => + val getlocationsByLocation_id = getlocationsByLocation_idAction { (location_id: BigInt) => // ----- Start of unmanaged code area for action InstagramApiYaml.getlocationsByLocation_id NotImplementedYet // ----- End of unmanaged code area for action InstagramApiYaml.getlocationsByLocation_id } - val getusersSearch = getusersSearchAction { input: (String, MediaFilter) => + val getusersSearch = getusersSearchAction { input: (String, Option[String]) => val (q, count) = input // ----- Start of unmanaged code area for action InstagramApiYaml.getusersSearch NotImplementedYet // ----- End of unmanaged code area for action InstagramApiYaml.getusersSearch } - val getusersSelfMediaLiked = getusersSelfMediaLikedAction { input: (MediaId, MediaId) => + val getusersSelfMediaLiked = getusersSelfMediaLikedAction { input: (Option[BigInt], Option[BigInt]) => val (count, max_like_id) = input // ----- Start of unmanaged code area for action InstagramApiYaml.getusersSelfMediaLiked NotImplementedYet // ----- End of unmanaged code area for action InstagramApiYaml.getusersSelfMediaLiked } - val gettagsByTag_name = gettagsByTag_nameAction { (tag_name: String) => + val gettagsByTag_name = gettagsByTag_nameAction { (tag_name: String) => // ----- Start of unmanaged code area for action InstagramApiYaml.gettagsByTag_name NotImplementedYet // ----- End of unmanaged code area for action InstagramApiYaml.gettagsByTag_name } - val gettagsSearch = gettagsSearchAction { (q: MediaFilter) => + val gettagsSearch = gettagsSearchAction { (q: Option[String]) => // ----- Start of unmanaged code area for action InstagramApiYaml.gettagsSearch NotImplementedYet // ----- End of unmanaged code area for action InstagramApiYaml.gettagsSearch } - val getusersByUser_idFollowed_by = getusersByUser_idFollowed_byAction { (user_id: BigDecimal) => + val getusersByUser_idFollowed_by = getusersByUser_idFollowed_byAction { (user_id: BigDecimal) => // ----- Start of unmanaged code area for action InstagramApiYaml.getusersByUser_idFollowed_by NotImplementedYet // ----- End of unmanaged code area for action InstagramApiYaml.getusersByUser_idFollowed_by } - val getmediaByMedia_idComments = getmediaByMedia_idCommentsAction { (media_id: BigInt) => + val getmediaByMedia_idComments = getmediaByMedia_idCommentsAction { (media_id: BigInt) => // ----- Start of unmanaged code area for action InstagramApiYaml.getmediaByMedia_idComments NotImplementedYet // ----- End of unmanaged code area for action InstagramApiYaml.getmediaByMedia_idComments } - val postmediaByMedia_idComments = postmediaByMedia_idCommentsAction { input: (BigInt, LocationLatitude) => + val postmediaByMedia_idComments = postmediaByMedia_idCommentsAction { input: (BigInt, Option[BigDecimal]) => val (media_id, tEXT) = input // ----- Start of unmanaged code area for action InstagramApiYaml.postmediaByMedia_idComments NotImplementedYet // ----- End of unmanaged code area for action InstagramApiYaml.postmediaByMedia_idComments } - val deletemediaByMedia_idComments = deletemediaByMedia_idCommentsAction { (media_id: BigInt) => + val deletemediaByMedia_idComments = deletemediaByMedia_idCommentsAction { (media_id: BigInt) => // ----- Start of unmanaged code area for action InstagramApiYaml.deletemediaByMedia_idComments NotImplementedYet // ----- End of unmanaged code area for action InstagramApiYaml.deletemediaByMedia_idComments } - val gettagsByTag_nameMediaRecent = gettagsByTag_nameMediaRecentAction { (tag_name: String) => + val gettagsByTag_nameMediaRecent = gettagsByTag_nameMediaRecentAction { (tag_name: String) => // ----- Start of unmanaged code area for action InstagramApiYaml.gettagsByTag_nameMediaRecent NotImplementedYet // ----- End of unmanaged code area for action InstagramApiYaml.gettagsByTag_nameMediaRecent } - val postusersByUser_idRelationship = postusersByUser_idRelationshipAction { input: (BigDecimal, UsersUser_idRelationshipPostAction) => + val postusersByUser_idRelationship = postusersByUser_idRelationshipAction { input: (BigDecimal, Option[UsersUser_idRelationshipPostActionOptionEnum]) => val (user_id, action) = input // ----- Start of unmanaged code area for action InstagramApiYaml.postusersByUser_idRelationship NotImplementedYet // ----- End of unmanaged code area for action InstagramApiYaml.postusersByUser_idRelationship } - val getusersSelfFeed = getusersSelfFeedAction { input: (MediaId, MediaId, MediaId) => + val getusersSelfFeed = getusersSelfFeedAction { input: (Option[BigInt], Option[BigInt], Option[BigInt]) => val (count, max_id, min_id) = input // ----- Start of unmanaged code area for action InstagramApiYaml.getusersSelfFeed NotImplementedYet // ----- End of unmanaged code area for action InstagramApiYaml.getusersSelfFeed } - val getusersByUser_id = getusersByUser_idAction { (user_id: BigDecimal) => + val getusersByUser_id = getusersByUser_idAction { (user_id: BigDecimal) => // ----- Start of unmanaged code area for action InstagramApiYaml.getusersByUser_id NotImplementedYet // ----- End of unmanaged code area for action InstagramApiYaml.getusersByUser_id } - val getmediaSearch = getmediaSearchAction { input: (MediaId, BigInt, LocationLatitude, MediaId, LocationLatitude) => + val getmediaSearch = getmediaSearchAction { input: (Option[BigInt], BigInt, Option[BigDecimal], Option[BigInt], Option[BigDecimal]) => val (mAX_TIMESTAMP, dISTANCE, lNG, mIN_TIMESTAMP, lAT) = input // ----- Start of unmanaged code area for action InstagramApiYaml.getmediaSearch NotImplementedYet // ----- End of unmanaged code area for action InstagramApiYaml.getmediaSearch } - val getgeographiesByGeo_idMediaRecent = getgeographiesByGeo_idMediaRecentAction { input: (BigInt, MediaId, MediaId) => + val getgeographiesByGeo_idMediaRecent = getgeographiesByGeo_idMediaRecentAction { input: (BigInt, Option[BigInt], Option[BigInt]) => val (geo_id, count, min_id) = input // ----- Start of unmanaged code area for action InstagramApiYaml.getgeographiesByGeo_idMediaRecent NotImplementedYet // ----- End of unmanaged code area for action InstagramApiYaml.getgeographiesByGeo_idMediaRecent } - val getmediaByShortcode = getmediaByShortcodeAction { (shortcode: String) => + val getmediaByShortcode = getmediaByShortcodeAction { (shortcode: String) => // ----- Start of unmanaged code area for action InstagramApiYaml.getmediaByShortcode NotImplementedYet // ----- End of unmanaged code area for action InstagramApiYaml.getmediaByShortcode } - val getlocationsSearch = getlocationsSearchAction { input: (MediaId, MediaId, MediaId, LocationLatitude, MediaId, LocationLatitude) => + val getlocationsSearch = getlocationsSearchAction { input: (Option[BigInt], Option[BigInt], Option[BigInt], Option[BigDecimal], Option[BigInt], Option[BigDecimal]) => val (foursquare_v2_id, facebook_places_id, distance, lat, foursquare_id, lng) = input // ----- Start of unmanaged code area for action InstagramApiYaml.getlocationsSearch NotImplementedYet // ----- End of unmanaged code area for action InstagramApiYaml.getlocationsSearch } - val getusersSelfRequested_by = getusersSelfRequested_byAction { _ => + val getusersSelfRequested_by = getusersSelfRequested_byAction { _ => // ----- Start of unmanaged code area for action InstagramApiYaml.getusersSelfRequested_by NotImplementedYet // ----- End of unmanaged code area for action InstagramApiYaml.getusersSelfRequested_by } - val getmediaByMedia_id = getmediaByMedia_idAction { (media_id: BigInt) => + val getmediaByMedia_id = getmediaByMedia_idAction { (media_id: BigInt) => // ----- Start of unmanaged code area for action InstagramApiYaml.getmediaByMedia_id NotImplementedYet // ----- End of unmanaged code area for action InstagramApiYaml.getmediaByMedia_id } - val getlocationsByLocation_idMediaRecent = getlocationsByLocation_idMediaRecentAction { input: (BigInt, MediaId, MediaId, MediaFilter, MediaFilter) => + val getlocationsByLocation_idMediaRecent = getlocationsByLocation_idMediaRecentAction { input: (BigInt, Option[BigInt], Option[BigInt], Option[String], Option[String]) => val (location_id, max_timestamp, min_timestamp, min_id, max_id) = input // ----- Start of unmanaged code area for action InstagramApiYaml.getlocationsByLocation_idMediaRecent NotImplementedYet // ----- End of unmanaged code area for action InstagramApiYaml.getlocationsByLocation_idMediaRecent } - val getusersByUser_idMediaRecent = getusersByUser_idMediaRecentAction { input: (BigDecimal, MediaId, MediaFilter, MediaId, MediaFilter, MediaId) => + val getusersByUser_idMediaRecent = getusersByUser_idMediaRecentAction { input: (BigDecimal, Option[BigInt], Option[String], Option[BigInt], Option[String], Option[BigInt]) => val (user_id, max_timestamp, min_id, min_timestamp, max_id, count) = input // ----- Start of unmanaged code area for action InstagramApiYaml.getusersByUser_idMediaRecent NotImplementedYet // ----- End of unmanaged code area for action InstagramApiYaml.getusersByUser_idMediaRecent } - val getmediaPopular = getmediaPopularAction { _ => + val getmediaPopular = getmediaPopularAction { _ => // ----- Start of unmanaged code area for action InstagramApiYaml.getmediaPopular NotImplementedYet // ----- End of unmanaged code area for action InstagramApiYaml.getmediaPopular } - + } } diff --git a/play-scala-generator/src/test/resources/expected_results/controllers/minimal_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/controllers/minimal_api_yaml.scala index ad055fe4..4c441470 100644 --- a/play-scala-generator/src/test/resources/expected_results/controllers/minimal_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/controllers/minimal_api_yaml.scala @@ -23,6 +23,7 @@ import javax.inject._ package admin { // ----- Start of unmanaged code area for package Dashboard + // ----- End of unmanaged code area for package Dashboard class Dashboard @Inject() ( // ----- Start of unmanaged code area for injections Dashboard @@ -34,11 +35,11 @@ package admin { // ----- Start of unmanaged code area for constructor Dashboard // ----- End of unmanaged code area for constructor Dashboard - val index = indexAction { _ => + val index = indexAction { _ => // ----- Start of unmanaged code area for action Dashboard.index NotImplementedYet // ----- End of unmanaged code area for action Dashboard.index } - + } } diff --git a/play-scala-generator/src/test/resources/expected_results/controllers/nakadi_yaml.scala b/play-scala-generator/src/test/resources/expected_results/controllers/nakadi_yaml.scala index c6cb02eb..da1e9f0d 100644 --- a/play-scala-generator/src/test/resources/expected_results/controllers/nakadi_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/controllers/nakadi_yaml.scala @@ -23,6 +23,7 @@ import javax.inject._ package nakadi.yaml { // ----- Start of unmanaged code area for package NakadiYaml + // ----- End of unmanaged code area for package NakadiYaml class NakadiYaml @Inject() ( // ----- Start of unmanaged code area for injections NakadiYaml @@ -34,12 +35,12 @@ package nakadi.yaml { // ----- Start of unmanaged code area for constructor NakadiYaml // ----- End of unmanaged code area for constructor NakadiYaml - val nakadiHackGet_metrics = nakadiHackGet_metricsAction { _ => + val nakadiHackGet_metrics = nakadiHackGet_metricsAction { _ => // ----- Start of unmanaged code area for action NakadiYaml.nakadiHackGet_metrics NotImplementedYet // ----- End of unmanaged code area for action NakadiYaml.nakadiHackGet_metrics } - val nakadiHackGet_events_from_single_partition = nakadiHackGet_events_from_single_partitionAction { input: (String, String, TopicsTopicEventsGetStream_timeout, String, Int, TopicsTopicEventsGetStream_timeout, TopicsTopicEventsGetStream_timeout, TopicsTopicEventsGetStream_timeout) => + val nakadiHackGet_events_from_single_partition = nakadiHackGet_events_from_single_partitionAction { input: (String, String, Option[Int], String, Int, Option[Int], Option[Int], Option[Int]) => val (start_from, partition, stream_limit, topic, batch_limit, batch_flush_timeout, stream_timeout, batch_keep_alive_limit) = input // ----- Start of unmanaged code area for action NakadiYaml.nakadiHackGet_events_from_single_partition NotImplementedYet @@ -51,34 +52,34 @@ package nakadi.yaml { NotImplementedYet // ----- End of unmanaged code area for action NakadiYaml.nakadiHackGet_partition } - val nakadiHackGet_topics = nakadiHackGet_topicsAction { _ => + val nakadiHackGet_topics = nakadiHackGet_topicsAction { _ => // ----- Start of unmanaged code area for action NakadiYaml.nakadiHackGet_topics NotImplementedYet // ----- End of unmanaged code area for action NakadiYaml.nakadiHackGet_topics } - val nakadiHackGet_events_from_multiple_partitions = nakadiHackGet_events_from_multiple_partitionsAction { input: (TopicsTopicEventsGetStream_timeout, TopicsTopicEventsGetStream_timeout, TopicsTopicEventsGetStream_timeout, String, Int, TopicsTopicEventsGetStream_timeout, String) => + val nakadiHackGet_events_from_multiple_partitions = nakadiHackGet_events_from_multiple_partitionsAction { input: (Option[Int], Option[Int], Option[Int], String, Int, Option[Int], String) => val (stream_timeout, stream_limit, batch_flush_timeout, x_nakadi_cursors, batch_limit, batch_keep_alive_limit, topic) = input // ----- Start of unmanaged code area for action NakadiYaml.nakadiHackGet_events_from_multiple_partitions NotImplementedYet // ----- End of unmanaged code area for action NakadiYaml.nakadiHackGet_events_from_multiple_partitions } - val nakadiHackPost_event = nakadiHackPost_eventAction { input: (String, TopicsTopicEventsBatchPostEvent) => + val nakadiHackPost_event = nakadiHackPost_eventAction { input: (String, Option[Event]) => val (topic, event) = input // ----- Start of unmanaged code area for action NakadiYaml.nakadiHackPost_event NotImplementedYet // ----- End of unmanaged code area for action NakadiYaml.nakadiHackPost_event } - val nakadiHackGet_partitions = nakadiHackGet_partitionsAction { (topic: String) => + val nakadiHackGet_partitions = nakadiHackGet_partitionsAction { (topic: String) => // ----- Start of unmanaged code area for action NakadiYaml.nakadiHackGet_partitions NotImplementedYet // ----- End of unmanaged code area for action NakadiYaml.nakadiHackGet_partitions } - val nakadiHackPost_events = nakadiHackPost_eventsAction { input: (String, TopicsTopicEventsBatchPostEvent) => + val nakadiHackPost_events = nakadiHackPost_eventsAction { input: (String, Option[Event]) => val (topic, event) = input // ----- Start of unmanaged code area for action NakadiYaml.nakadiHackPost_events NotImplementedYet // ----- End of unmanaged code area for action NakadiYaml.nakadiHackPost_events } - + } } diff --git a/play-scala-generator/src/test/resources/expected_results/controllers/security_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/controllers/security_api_yaml.scala index 5ab3bb0d..356758a3 100644 --- a/play-scala-generator/src/test/resources/expected_results/controllers/security_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/controllers/security_api_yaml.scala @@ -23,6 +23,7 @@ import javax.inject._ package security.api.yaml { // ----- Start of unmanaged code area for package SecurityApiYaml + // ----- End of unmanaged code area for package SecurityApiYaml class SecurityApiYaml @Inject() ( // ----- Start of unmanaged code area for injections SecurityApiYaml @@ -34,11 +35,11 @@ package security.api.yaml { // ----- Start of unmanaged code area for constructor SecurityApiYaml // ----- End of unmanaged code area for constructor SecurityApiYaml - val getPetsById = getPetsByIdAction { (id: PetsIdGetId) => + val getPetsById = getPetsByIdAction { (id: ArrayWrapper[String]) => // ----- Start of unmanaged code area for action SecurityApiYaml.getPetsById NotImplementedYet // ----- End of unmanaged code area for action SecurityApiYaml.getPetsById } - + } } diff --git a/play-scala-generator/src/test/resources/expected_results/controllers/simple_petstore_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/controllers/simple_petstore_api_yaml.scala index f08d37c8..00008a54 100644 --- a/play-scala-generator/src/test/resources/expected_results/controllers/simple_petstore_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/controllers/simple_petstore_api_yaml.scala @@ -23,6 +23,7 @@ import javax.inject._ package simple_petstore_api_yaml { // ----- Start of unmanaged code area for package SimplePetstoreApiYaml + // ----- End of unmanaged code area for package SimplePetstoreApiYaml class SimplePetstoreApiYaml @Inject() ( // ----- Start of unmanaged code area for injections SimplePetstoreApiYaml @@ -34,16 +35,17 @@ package simple_petstore_api_yaml { // ----- Start of unmanaged code area for constructor SimplePetstoreApiYaml // ----- End of unmanaged code area for constructor SimplePetstoreApiYaml - val addPet = addPetAction { (pet: NewPet) => + val addPet = addPetAction { (pet: NewPet) => // ----- Start of unmanaged code area for action SimplePetstoreApiYaml.addPet NotImplementedYet // ----- End of unmanaged code area for action SimplePetstoreApiYaml.addPet } - + } } package simple_petstore_api_yaml { // ----- Start of unmanaged code area for package Dashboard + // ----- End of unmanaged code area for package Dashboard class Dashboard @Inject() ( // ----- Start of unmanaged code area for injections Dashboard @@ -55,22 +57,22 @@ package simple_petstore_api_yaml { // ----- Start of unmanaged code area for constructor Dashboard // ----- End of unmanaged code area for constructor Dashboard - val methodLevel = methodLevelAction { input: (PetsGetTags, PetsGetLimit) => + val methodLevel = methodLevelAction { input: (Option[ArrayWrapper[String]], Option[Int]) => val (tags, limit) = input // ----- Start of unmanaged code area for action Dashboard.methodLevel NotImplementedYet // ----- End of unmanaged code area for action Dashboard.methodLevel } - val pathLevelGet = pathLevelGetAction { (id: Long) => + val pathLevelGet = pathLevelGetAction { (id: Long) => // ----- Start of unmanaged code area for action Dashboard.pathLevelGet NotImplementedYet // ----- End of unmanaged code area for action Dashboard.pathLevelGet } - val pathLevelDelete = pathLevelDeleteAction { (id: Long) => + val pathLevelDelete = pathLevelDeleteAction { (id: Long) => // ----- Start of unmanaged code area for action Dashboard.pathLevelDelete NotImplementedYet // ----- End of unmanaged code area for action Dashboard.pathLevelDelete } - + } } diff --git a/play-scala-generator/src/test/resources/expected_results/controllers/split_petstore_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/controllers/split_petstore_api_yaml.scala index 7e4d545a..8a47ae58 100644 --- a/play-scala-generator/src/test/resources/expected_results/controllers/split_petstore_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/controllers/split_petstore_api_yaml.scala @@ -23,6 +23,7 @@ import javax.inject._ package split.petstore.api.yaml { // ----- Start of unmanaged code area for package SplitPetstoreApiYaml + // ----- End of unmanaged code area for package SplitPetstoreApiYaml class SplitPetstoreApiYaml @Inject() ( // ----- Start of unmanaged code area for injections SplitPetstoreApiYaml @@ -34,73 +35,73 @@ package split.petstore.api.yaml { // ----- Start of unmanaged code area for constructor SplitPetstoreApiYaml // ----- End of unmanaged code area for constructor SplitPetstoreApiYaml - val findPetsByTags = findPetsByTagsAction { (tags: PetsFindByStatusGetStatus) => + val findPetsByTags = findPetsByTagsAction { (tags: Option[ArrayWrapper[String]]) => // ----- Start of unmanaged code area for action SplitPetstoreApiYaml.findPetsByTags NotImplementedYet // ----- End of unmanaged code area for action SplitPetstoreApiYaml.findPetsByTags } - val placeOrder = placeOrderAction { (body: StoresOrderPostBody) => + val placeOrder = placeOrderAction { (body: Option[Order]) => // ----- Start of unmanaged code area for action SplitPetstoreApiYaml.placeOrder NotImplementedYet // ----- End of unmanaged code area for action SplitPetstoreApiYaml.placeOrder } - val createUser = createUserAction { (body: UsersUsernamePutBody) => + val createUser = createUserAction { (body: Option[User]) => // ----- Start of unmanaged code area for action SplitPetstoreApiYaml.createUser NotImplementedYet // ----- End of unmanaged code area for action SplitPetstoreApiYaml.createUser } - val createUsersWithListInput = createUsersWithListInputAction { (body: UsersCreateWithListPostBody) => + val createUsersWithListInput = createUsersWithListInputAction { (body: Option[Seq[User]]) => // ----- Start of unmanaged code area for action SplitPetstoreApiYaml.createUsersWithListInput NotImplementedYet // ----- End of unmanaged code area for action SplitPetstoreApiYaml.createUsersWithListInput } - val getUserByName = getUserByNameAction { (username: String) => + val getUserByName = getUserByNameAction { (username: String) => // ----- Start of unmanaged code area for action SplitPetstoreApiYaml.getUserByName NotImplementedYet // ----- End of unmanaged code area for action SplitPetstoreApiYaml.getUserByName } - val updateUser = updateUserAction { input: (String, UsersUsernamePutBody) => + val updateUser = updateUserAction { input: (String, Option[User]) => val (username, body) = input // ----- Start of unmanaged code area for action SplitPetstoreApiYaml.updateUser NotImplementedYet // ----- End of unmanaged code area for action SplitPetstoreApiYaml.updateUser } - val deleteUser = deleteUserAction { (username: String) => + val deleteUser = deleteUserAction { (username: String) => // ----- Start of unmanaged code area for action SplitPetstoreApiYaml.deleteUser NotImplementedYet // ----- End of unmanaged code area for action SplitPetstoreApiYaml.deleteUser } - val updatePet = updatePetAction { (body: PetsPostBody) => + val updatePet = updatePetAction { (body: Option[Pet]) => // ----- Start of unmanaged code area for action SplitPetstoreApiYaml.updatePet NotImplementedYet // ----- End of unmanaged code area for action SplitPetstoreApiYaml.updatePet } - val addPet = addPetAction { (body: PetsPostBody) => + val addPet = addPetAction { (body: Option[Pet]) => // ----- Start of unmanaged code area for action SplitPetstoreApiYaml.addPet NotImplementedYet // ----- End of unmanaged code area for action SplitPetstoreApiYaml.addPet } - val createUsersWithArrayInput = createUsersWithArrayInputAction { (body: UsersCreateWithListPostBody) => + val createUsersWithArrayInput = createUsersWithArrayInputAction { (body: Option[Seq[User]]) => // ----- Start of unmanaged code area for action SplitPetstoreApiYaml.createUsersWithArrayInput NotImplementedYet // ----- End of unmanaged code area for action SplitPetstoreApiYaml.createUsersWithArrayInput } - val getOrderById = getOrderByIdAction { (orderId: String) => + val getOrderById = getOrderByIdAction { (orderId: String) => // ----- Start of unmanaged code area for action SplitPetstoreApiYaml.getOrderById NotImplementedYet // ----- End of unmanaged code area for action SplitPetstoreApiYaml.getOrderById } - val deleteOrder = deleteOrderAction { (orderId: String) => + val deleteOrder = deleteOrderAction { (orderId: String) => // ----- Start of unmanaged code area for action SplitPetstoreApiYaml.deleteOrder NotImplementedYet // ----- End of unmanaged code area for action SplitPetstoreApiYaml.deleteOrder } - val logoutUser = logoutUserAction { _ => + val logoutUser = logoutUserAction { _ => // ----- Start of unmanaged code area for action SplitPetstoreApiYaml.logoutUser NotImplementedYet // ----- End of unmanaged code area for action SplitPetstoreApiYaml.logoutUser } - val getPetById = getPetByIdAction { (petId: Long) => + val getPetById = getPetByIdAction { (petId: Long) => // ----- Start of unmanaged code area for action SplitPetstoreApiYaml.getPetById NotImplementedYet // ----- End of unmanaged code area for action SplitPetstoreApiYaml.getPetById @@ -117,17 +118,17 @@ package split.petstore.api.yaml { NotImplementedYet // ----- End of unmanaged code area for action SplitPetstoreApiYaml.deletePet } - val findPetsByStatus = findPetsByStatusAction { (status: PetsFindByStatusGetStatus) => + val findPetsByStatus = findPetsByStatusAction { (status: Option[ArrayWrapper[String]]) => // ----- Start of unmanaged code area for action SplitPetstoreApiYaml.findPetsByStatus NotImplementedYet // ----- End of unmanaged code area for action SplitPetstoreApiYaml.findPetsByStatus } - val loginUser = loginUserAction { input: (OrderStatus, OrderStatus) => + val loginUser = loginUserAction { input: (Option[String], Option[String]) => val (username, password) = input // ----- Start of unmanaged code area for action SplitPetstoreApiYaml.loginUser NotImplementedYet // ----- End of unmanaged code area for action SplitPetstoreApiYaml.loginUser } - + } } diff --git a/play-scala-generator/src/test/resources/expected_results/controllers/string_formats_yaml.scala b/play-scala-generator/src/test/resources/expected_results/controllers/string_formats_yaml.scala index d1bc2983..08d6d4e2 100644 --- a/play-scala-generator/src/test/resources/expected_results/controllers/string_formats_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/controllers/string_formats_yaml.scala @@ -27,6 +27,7 @@ import BinaryString._ package string_formats.yaml { // ----- Start of unmanaged code area for package String_formatsYaml + // ----- End of unmanaged code area for package String_formatsYaml class String_formatsYaml @Inject() ( // ----- Start of unmanaged code area for injections String_formatsYaml @@ -38,12 +39,12 @@ package string_formats.yaml { // ----- Start of unmanaged code area for constructor String_formatsYaml // ----- End of unmanaged code area for constructor String_formatsYaml - val get = getAction { input: (GetDate_time, GetDate, GetBase64, GetUuid, BinaryString) => + val get = getAction { input: (Option[ZonedDateTime], Option[LocalDate], Option[Base64String], Option[UUID], BinaryString) => val (date_time, date, base64, uuid, petId) = input // ----- Start of unmanaged code area for action String_formatsYaml.get NotImplementedYet // ----- End of unmanaged code area for action String_formatsYaml.get } - + } } diff --git a/play-scala-generator/src/test/resources/expected_results/controllers/type_deduplication_yaml.scala b/play-scala-generator/src/test/resources/expected_results/controllers/type_deduplication_yaml.scala index 2a680e3d..9f72b89a 100644 --- a/play-scala-generator/src/test/resources/expected_results/controllers/type_deduplication_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/controllers/type_deduplication_yaml.scala @@ -23,6 +23,7 @@ import javax.inject._ package type_deduplication.yaml { // ----- Start of unmanaged code area for package Type_deduplicationYaml + // ----- End of unmanaged code area for package Type_deduplicationYaml class Type_deduplicationYaml @Inject() ( // ----- Start of unmanaged code area for injections Type_deduplicationYaml @@ -46,12 +47,12 @@ package type_deduplication.yaml { NotImplementedYet // ----- End of unmanaged code area for action Type_deduplicationYaml.putplantsByPlant_idWateringsByWatering_id } - val getusersMe = getusersMeAction { _ => + val getusersMe = getusersMeAction { _ => // ----- Start of unmanaged code area for action Type_deduplicationYaml.getusersMe NotImplementedYet // ----- End of unmanaged code area for action Type_deduplicationYaml.getusersMe } - val getplantsByPlant_idSunlight_needs = getplantsByPlant_idSunlight_needsAction { (plant_id: String) => + val getplantsByPlant_idSunlight_needs = getplantsByPlant_idSunlight_needsAction { (plant_id: String) => // ----- Start of unmanaged code area for action Type_deduplicationYaml.getplantsByPlant_idSunlight_needs NotImplementedYet // ----- End of unmanaged code area for action Type_deduplicationYaml.getplantsByPlant_idSunlight_needs @@ -62,45 +63,45 @@ package type_deduplication.yaml { NotImplementedYet // ----- End of unmanaged code area for action Type_deduplicationYaml.putplantsByPlant_idSunlight_needs } - val getusers = getusersAction { input: (UsersGetLimit, UsersGetLimit) => + val getusers = getusersAction { input: (Option[BigInt], Option[BigInt]) => val (limit, offset) = input // ----- Start of unmanaged code area for action Type_deduplicationYaml.getusers NotImplementedYet // ----- End of unmanaged code area for action Type_deduplicationYaml.getusers } - val postusers = postusersAction { (signin_data: SigninData) => + val postusers = postusersAction { (signin_data: SigninData) => // ----- Start of unmanaged code area for action Type_deduplicationYaml.postusers NotImplementedYet // ----- End of unmanaged code area for action Type_deduplicationYaml.postusers } - val getareasByArea_id = getareasByArea_idAction { (area_id: String) => + val getareasByArea_id = getareasByArea_idAction { (area_id: String) => // ----- Start of unmanaged code area for action Type_deduplicationYaml.getareasByArea_id NotImplementedYet // ----- End of unmanaged code area for action Type_deduplicationYaml.getareasByArea_id } - val putareasByArea_id = putareasByArea_idAction { (area_id: String) => + val putareasByArea_id = putareasByArea_idAction { (area_id: String) => // ----- Start of unmanaged code area for action Type_deduplicationYaml.putareasByArea_id NotImplementedYet // ----- End of unmanaged code area for action Type_deduplicationYaml.putareasByArea_id } - val deleteareasByArea_id = deleteareasByArea_idAction { (area_id: String) => + val deleteareasByArea_id = deleteareasByArea_idAction { (area_id: String) => // ----- Start of unmanaged code area for action Type_deduplicationYaml.deleteareasByArea_id NotImplementedYet // ----- End of unmanaged code area for action Type_deduplicationYaml.deleteareasByArea_id } - val getplants = getplantsAction { input: (PlantsGetLimit, PlantsGetOffset) => + val getplants = getplantsAction { input: (Option[BigInt], Option[BigInt]) => val (limit, offset) = input // ----- Start of unmanaged code area for action Type_deduplicationYaml.getplants NotImplementedYet // ----- End of unmanaged code area for action Type_deduplicationYaml.getplants } - val getuserByUser_idPlants = getuserByUser_idPlantsAction { input: (String, UsersGetLimit, UsersGetLimit) => + val getuserByUser_idPlants = getuserByUser_idPlantsAction { input: (String, Option[BigInt], Option[BigInt]) => val (user_id, limit, offset) = input // ----- Start of unmanaged code area for action Type_deduplicationYaml.getuserByUser_idPlants NotImplementedYet // ----- End of unmanaged code area for action Type_deduplicationYaml.getuserByUser_idPlants } - val getusersByUser_id = getusersByUser_idAction { (user_id: String) => + val getusersByUser_id = getusersByUser_idAction { (user_id: String) => // ----- Start of unmanaged code area for action Type_deduplicationYaml.getusersByUser_id NotImplementedYet // ----- End of unmanaged code area for action Type_deduplicationYaml.getusersByUser_id @@ -117,13 +118,13 @@ package type_deduplication.yaml { NotImplementedYet // ----- End of unmanaged code area for action Type_deduplicationYaml.deleteusersByUser_id } - val getareas = getareasAction { input: (UsersGetLimit, UsersGetLimit) => + val getareas = getareasAction { input: (Option[BigInt], Option[BigInt]) => val (limit, offset) = input // ----- Start of unmanaged code area for action Type_deduplicationYaml.getareas NotImplementedYet // ----- End of unmanaged code area for action Type_deduplicationYaml.getareas } - val getplantsByPlant_idLocation = getplantsByPlant_idLocationAction { (plant_id: String) => + val getplantsByPlant_idLocation = getplantsByPlant_idLocationAction { (plant_id: String) => // ----- Start of unmanaged code area for action Type_deduplicationYaml.getplantsByPlant_idLocation NotImplementedYet // ----- End of unmanaged code area for action Type_deduplicationYaml.getplantsByPlant_idLocation @@ -134,33 +135,33 @@ package type_deduplication.yaml { NotImplementedYet // ----- End of unmanaged code area for action Type_deduplicationYaml.putplantsByPlant_idLocation } - val deleteplantsByPlant_idLocation = deleteplantsByPlant_idLocationAction { (plant_id: String) => + val deleteplantsByPlant_idLocation = deleteplantsByPlant_idLocationAction { (plant_id: String) => // ----- Start of unmanaged code area for action Type_deduplicationYaml.deleteplantsByPlant_idLocation NotImplementedYet // ----- End of unmanaged code area for action Type_deduplicationYaml.deleteplantsByPlant_idLocation } - val getusersByUser_idPicture = getusersByUser_idPictureAction { (user_id: String) => + val getusersByUser_idPicture = getusersByUser_idPictureAction { (user_id: String) => // ----- Start of unmanaged code area for action Type_deduplicationYaml.getusersByUser_idPicture NotImplementedYet // ----- End of unmanaged code area for action Type_deduplicationYaml.getusersByUser_idPicture } - val putusersByUser_idPicture = putusersByUser_idPictureAction { (user_id: String) => + val putusersByUser_idPicture = putusersByUser_idPictureAction { (user_id: String) => // ----- Start of unmanaged code area for action Type_deduplicationYaml.putusersByUser_idPicture NotImplementedYet // ----- End of unmanaged code area for action Type_deduplicationYaml.putusersByUser_idPicture } - val deleteusersByUser_idPicture = deleteusersByUser_idPictureAction { (user_id: String) => + val deleteusersByUser_idPicture = deleteusersByUser_idPictureAction { (user_id: String) => // ----- Start of unmanaged code area for action Type_deduplicationYaml.deleteusersByUser_idPicture NotImplementedYet // ----- End of unmanaged code area for action Type_deduplicationYaml.deleteusersByUser_idPicture } - val getplantsByPlant_idPictures = getplantsByPlant_idPicturesAction { input: (String, UsersGetLimit, UsersGetLimit) => + val getplantsByPlant_idPictures = getplantsByPlant_idPicturesAction { input: (String, Option[BigInt], Option[BigInt]) => val (plant_id, limit, offset) = input // ----- Start of unmanaged code area for action Type_deduplicationYaml.getplantsByPlant_idPictures NotImplementedYet // ----- End of unmanaged code area for action Type_deduplicationYaml.getplantsByPlant_idPictures } - val getplantsByPlant_id = getplantsByPlant_idAction { (plant_id: String) => + val getplantsByPlant_id = getplantsByPlant_idAction { (plant_id: String) => // ----- Start of unmanaged code area for action Type_deduplicationYaml.getplantsByPlant_id NotImplementedYet // ----- End of unmanaged code area for action Type_deduplicationYaml.getplantsByPlant_id @@ -171,12 +172,12 @@ package type_deduplication.yaml { NotImplementedYet // ----- End of unmanaged code area for action Type_deduplicationYaml.putplantsByPlant_id } - val deleteplantsByPlant_id = deleteplantsByPlant_idAction { (plant_id: String) => + val deleteplantsByPlant_id = deleteplantsByPlant_idAction { (plant_id: String) => // ----- Start of unmanaged code area for action Type_deduplicationYaml.deleteplantsByPlant_id NotImplementedYet // ----- End of unmanaged code area for action Type_deduplicationYaml.deleteplantsByPlant_id } - val getplantsByPlant_idWaterings = getplantsByPlant_idWateringsAction { input: (String, UsersGetLimit, UsersGetLimit) => + val getplantsByPlant_idWaterings = getplantsByPlant_idWateringsAction { input: (String, Option[BigInt], Option[BigInt]) => val (plant_id, limit, offset) = input // ----- Start of unmanaged code area for action Type_deduplicationYaml.getplantsByPlant_idWaterings NotImplementedYet @@ -200,7 +201,7 @@ package type_deduplication.yaml { NotImplementedYet // ----- End of unmanaged code area for action Type_deduplicationYaml.deleteplantsByPlant_idPicturesByPicture_id } - val getplantsByPlant_idWater_needs = getplantsByPlant_idWater_needsAction { (plant_id: String) => + val getplantsByPlant_idWater_needs = getplantsByPlant_idWater_needsAction { (plant_id: String) => // ----- Start of unmanaged code area for action Type_deduplicationYaml.getplantsByPlant_idWater_needs NotImplementedYet // ----- End of unmanaged code area for action Type_deduplicationYaml.getplantsByPlant_idWater_needs @@ -211,6 +212,6 @@ package type_deduplication.yaml { NotImplementedYet // ----- End of unmanaged code area for action Type_deduplicationYaml.putplantsByPlant_idWater_needs } - + } } diff --git a/play-scala-generator/src/test/resources/expected_results/controllers/uber_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/controllers/uber_api_yaml.scala index 8da179f0..fb0a6a71 100644 --- a/play-scala-generator/src/test/resources/expected_results/controllers/uber_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/controllers/uber_api_yaml.scala @@ -23,6 +23,7 @@ import javax.inject._ package uber.api.yaml { // ----- Start of unmanaged code area for package UberApiYaml + // ----- End of unmanaged code area for package UberApiYaml class UberApiYaml @Inject() ( // ----- Start of unmanaged code area for injections UberApiYaml @@ -34,7 +35,7 @@ package uber.api.yaml { // ----- Start of unmanaged code area for constructor UberApiYaml // ----- End of unmanaged code area for constructor UberApiYaml - val getme = getmeAction { _ => + val getme = getmeAction { _ => // ----- Start of unmanaged code area for action UberApiYaml.getme NotImplementedYet // ----- End of unmanaged code area for action UberApiYaml.getme @@ -45,7 +46,7 @@ package uber.api.yaml { NotImplementedYet // ----- End of unmanaged code area for action UberApiYaml.getproducts } - val getestimatesTime = getestimatesTimeAction { input: (Double, Double, EstimatesTimeGetCustomer_uuid, ProfilePicture) => + val getestimatesTime = getestimatesTimeAction { input: (Double, Double, Option[UUID], Option[String]) => val (start_latitude, start_longitude, customer_uuid, product_id) = input // ----- Start of unmanaged code area for action UberApiYaml.getestimatesTime NotImplementedYet @@ -57,12 +58,12 @@ package uber.api.yaml { NotImplementedYet // ----- End of unmanaged code area for action UberApiYaml.getestimatesPrice } - val gethistory = gethistoryAction { input: (ErrorCode, ErrorCode) => + val gethistory = gethistoryAction { input: (Option[Int], Option[Int]) => val (offset, limit) = input // ----- Start of unmanaged code area for action UberApiYaml.gethistory NotImplementedYet // ----- End of unmanaged code area for action UberApiYaml.gethistory } - + } } diff --git a/play-scala-generator/src/test/resources/expected_results/controllers/wrong_field_name_yaml.scala b/play-scala-generator/src/test/resources/expected_results/controllers/wrong_field_name_yaml.scala index c72d3823..1c681d17 100644 --- a/play-scala-generator/src/test/resources/expected_results/controllers/wrong_field_name_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/controllers/wrong_field_name_yaml.scala @@ -23,6 +23,7 @@ import javax.inject._ package wrong_field_name.yaml { // ----- Start of unmanaged code area for package Wrong_field_nameYaml + // ----- End of unmanaged code area for package Wrong_field_nameYaml class Wrong_field_nameYaml @Inject() ( // ----- Start of unmanaged code area for injections Wrong_field_nameYaml @@ -34,12 +35,12 @@ package wrong_field_name.yaml { // ----- Start of unmanaged code area for constructor Wrong_field_nameYaml // ----- End of unmanaged code area for constructor Wrong_field_nameYaml - val get = getAction { input: (GetOptCodes, GetCodes) => + val get = getAction { input: (Option[GetOptCodesOpt], GetCodes) => val (optCodes, codes) = input // ----- Start of unmanaged code area for action Wrong_field_nameYaml.get NotImplementedYet // ----- End of unmanaged code area for action Wrong_field_nameYaml.get } - + } } diff --git a/play-scala-generator/src/test/resources/expected_results/form_parsers/echo_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/form_parsers/echo_api_yaml.scala index 4cfe9b4d..641d65a4 100644 --- a/play-scala-generator/src/test/resources/expected_results/form_parsers/echo_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/form_parsers/echo_api_yaml.scala @@ -14,11 +14,11 @@ object FormDataParser { - def postParseForm(request: Request[AnyContent]):Either[Seq[String],(PostName, PostName)] = { + def postParseForm(request: Request[AnyContent]):Either[Seq[String],(Option[String], Option[String])] = { val contentType = request.contentType.getOrElse("application/x-www-form-urlencoded") - def fromDataParts(data: Map[String, Seq[String]], files: Map[String, Option[FilePart[TemporaryFile]]], useFiles: Boolean):Either[Seq[String],(PostName, PostName)] = { - val name: Either[String,PostName] = PlayBodyParsing.fromParameters[PostName]("form")("name", data) - val year: Either[String,PostName] = PlayBodyParsing.fromParameters[PostName]("form")("year", data) + def fromDataParts(data: Map[String, Seq[String]], files: Map[String, Option[FilePart[TemporaryFile]]], useFiles: Boolean):Either[Seq[String],(Option[String], Option[String])] = { + val name: Either[String,Option[String]] = PlayBodyParsing.fromParameters[Option[String]]("form")("name", data) + val year: Either[String,Option[String]] = PlayBodyParsing.fromParameters[Option[String]]("form")("year", data) val all = Seq(name, year) val errors = all.filter(_.isLeft).flatMap(_.left.toSeq) if (errors.nonEmpty) Left(errors) else Right((name.right.toOption.get, year.right.toOption.get)) diff --git a/play-scala-generator/src/test/resources/expected_results/form_parsers/form_data_yaml.scala b/play-scala-generator/src/test/resources/expected_results/form_parsers/form_data_yaml.scala index 8e0f28f2..2b01de44 100644 --- a/play-scala-generator/src/test/resources/expected_results/form_parsers/form_data_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/form_parsers/form_data_yaml.scala @@ -6,20 +6,20 @@ import play.api.mvc.MultipartFormData.FilePart import play.api.mvc.{AnyContent, Request} import de.zalando.play.controllers.PlayBodyParsing -import java.io.File import scala.math.BigInt +import java.io.File import de.zalando.play.controllers.PlayPathBindables object FormDataParser { - def postmultipartParseForm(request: Request[AnyContent]):Either[Seq[String],(String, BothPostYear, MultipartPostAvatar)] = { + def postmultipartParseForm(request: Request[AnyContent]):Either[Seq[String],(String, Option[BigInt], Option[File])] = { val contentType = request.contentType.getOrElse("application/x-www-form-urlencoded") - def fromDataParts(data: Map[String, Seq[String]], files: Map[String, Option[FilePart[TemporaryFile]]], useFiles: Boolean):Either[Seq[String],(String, BothPostYear, MultipartPostAvatar)] = { + def fromDataParts(data: Map[String, Seq[String]], files: Map[String, Option[FilePart[TemporaryFile]]], useFiles: Boolean):Either[Seq[String],(String, Option[BigInt], Option[File])] = { val name: Either[String,String] = PlayBodyParsing.fromParameters[String]("form")("name", data) - val year: Either[String,BothPostYear] = PlayBodyParsing.fromParameters[BothPostYear]("form")("year", data) - val avatar: Either[String,MultipartPostAvatar] = if (useFiles) PlayBodyParsing.fromFileOptional("avatar", files("avatar")) else PlayBodyParsing.fromParameters[MultipartPostAvatar]("form")("avatar", data) + val year: Either[String,Option[BigInt]] = PlayBodyParsing.fromParameters[Option[BigInt]]("form")("year", data) + val avatar: Either[String,Option[File]] = if (useFiles) PlayBodyParsing.fromFileOptional("avatar", files("avatar")) else PlayBodyParsing.fromParameters[Option[File]]("form")("avatar", data) val all = Seq(name, year, avatar) val errors = all.filter(_.isLeft).flatMap(_.left.toSeq) if (errors.nonEmpty) Left(errors) else Right((name.right.toOption.get, year.right.toOption.get, avatar.right.toOption.get)) @@ -38,12 +38,12 @@ object FormDataParser { } - def postbothParseForm(request: Request[AnyContent]):Either[Seq[String],(String, BothPostYear, MultipartPostAvatar, File)] = { + def postbothParseForm(request: Request[AnyContent]):Either[Seq[String],(String, Option[BigInt], Option[File], File)] = { val contentType = request.contentType.getOrElse("application/x-www-form-urlencoded") - def fromDataParts(data: Map[String, Seq[String]], files: Map[String, Option[FilePart[TemporaryFile]]], useFiles: Boolean):Either[Seq[String],(String, BothPostYear, MultipartPostAvatar, File)] = { + def fromDataParts(data: Map[String, Seq[String]], files: Map[String, Option[FilePart[TemporaryFile]]], useFiles: Boolean):Either[Seq[String],(String, Option[BigInt], Option[File], File)] = { val name: Either[String,String] = PlayBodyParsing.fromParameters[String]("form")("name", data) - val year: Either[String,BothPostYear] = PlayBodyParsing.fromParameters[BothPostYear]("form")("year", data) - val avatar: Either[String,MultipartPostAvatar] = if (useFiles) PlayBodyParsing.fromFileOptional("avatar", files("avatar")) else PlayBodyParsing.fromParameters[MultipartPostAvatar]("form")("avatar", data) + val year: Either[String,Option[BigInt]] = PlayBodyParsing.fromParameters[Option[BigInt]]("form")("year", data) + val avatar: Either[String,Option[File]] = if (useFiles) PlayBodyParsing.fromFileOptional("avatar", files("avatar")) else PlayBodyParsing.fromParameters[Option[File]]("form")("avatar", data) val ringtone: Either[String,File] = if (useFiles) PlayBodyParsing.fromFileRequired("ringtone", files("ringtone")) else PlayBodyParsing.fromParameters[File]("form")("ringtone", data) val all = Seq(name, year, avatar, ringtone) val errors = all.filter(_.isLeft).flatMap(_.left.toSeq) @@ -67,11 +67,11 @@ object FormDataParser { } - def posturl_encodedParseForm(request: Request[AnyContent]):Either[Seq[String],(String, BothPostYear, File)] = { + def posturl_encodedParseForm(request: Request[AnyContent]):Either[Seq[String],(String, Option[BigInt], File)] = { val contentType = request.contentType.getOrElse("application/x-www-form-urlencoded") - def fromDataParts(data: Map[String, Seq[String]], files: Map[String, Option[FilePart[TemporaryFile]]], useFiles: Boolean):Either[Seq[String],(String, BothPostYear, File)] = { + def fromDataParts(data: Map[String, Seq[String]], files: Map[String, Option[FilePart[TemporaryFile]]], useFiles: Boolean):Either[Seq[String],(String, Option[BigInt], File)] = { val name: Either[String,String] = PlayBodyParsing.fromParameters[String]("form")("name", data) - val year: Either[String,BothPostYear] = PlayBodyParsing.fromParameters[BothPostYear]("form")("year", data) + val year: Either[String,Option[BigInt]] = PlayBodyParsing.fromParameters[Option[BigInt]]("form")("year", data) val avatar: Either[String,File] = if (useFiles) PlayBodyParsing.fromFileRequired("avatar", files("avatar")) else PlayBodyParsing.fromParameters[File]("form")("avatar", data) val all = Seq(name, year, avatar) val errors = all.filter(_.isLeft).flatMap(_.left.toSeq) diff --git a/play-scala-generator/src/test/resources/expected_results/form_parsers/full_petstore_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/form_parsers/full_petstore_api_yaml.scala index 489e49f8..1f539acd 100644 --- a/play-scala-generator/src/test/resources/expected_results/form_parsers/full_petstore_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/form_parsers/full_petstore_api_yaml.scala @@ -6,8 +6,8 @@ import play.api.mvc.MultipartFormData.FilePart import play.api.mvc.{AnyContent, Request} import de.zalando.play.controllers.PlayBodyParsing -import de.zalando.play.controllers.ArrayWrapper import java.time.ZonedDateTime +import de.zalando.play.controllers.ArrayWrapper import de.zalando.play.controllers.PlayPathBindables diff --git a/play-scala-generator/src/test/resources/expected_results/form_parsers/split_petstore_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/form_parsers/split_petstore_api_yaml.scala index 42f8c0ce..f699b23c 100644 --- a/play-scala-generator/src/test/resources/expected_results/form_parsers/split_petstore_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/form_parsers/split_petstore_api_yaml.scala @@ -6,8 +6,8 @@ import play.api.mvc.MultipartFormData.FilePart import play.api.mvc.{AnyContent, Request} import de.zalando.play.controllers.PlayBodyParsing -import de.zalando.play.controllers.ArrayWrapper import java.time.ZonedDateTime +import de.zalando.play.controllers.ArrayWrapper import de.zalando.play.controllers.PlayPathBindables diff --git a/play-scala-generator/src/test/resources/expected_results/marshallers/foodpanda_yaml.scala b/play-scala-generator/src/test/resources/expected_results/marshallers/foodpanda_yaml.scala new file mode 100644 index 00000000..d29f8a8c --- /dev/null +++ b/play-scala-generator/src/test/resources/expected_results/marshallers/foodpanda_yaml.scala @@ -0,0 +1,62 @@ + +package com.foodpanda.popsey.api + +import play.api.http.Writeable +import play.api.libs.iteratee.Execution.Implicits.trampoline +import play.api.mvc.RequestHeader +import de.zalando.play.controllers._ +import WriteableWrapper.writeable2wrapper +import akka.util.ByteString + + + + +/** +* This is a place to define definitions of custom serializers for results. +* Serializers are just instances of {@Writeable}s +* They must be placed into the {@custom} field of the ResponseWriters object +* +*/ +object ResponseWriters extends ResponseWritersBase { + + /** + * Transformer instance to be used as logic for {@Writeable} + * It is important to define the type of {@Writeable} explicit and as narrow as possible + * in order for play-swagger to be able to provide safety net for + * different response types + */ + val writable_application_json_Int: Writeable[Int] = + Writeable(a => ???, Some("application/json")) + + /** + * This collection contains all {@Writeable}s which could be used in + * as a marshaller for different mime types and types of response + */ + override val custom: Seq[WriteableWrapper[_]] = Seq( + writable_application_json_Int + ) +} + +/** +* This is a place to define definitions of custom deserializers for request body. +* They must be places into the {@custom} field of the ResponseWriters object +* +*/ +object WrappedBodyParsers extends WrappedBodyParsersBase { + + /** + * Transformer instance to be used as logic for {@Writeable} + * It is important to define the type of {@Writeable} explicit and as narrow as possible + * in order for play-swagger to be able to provide safety net for + * different response types + */ + val reader_application_json_VendorQuery_esc: Parser[VendorQuery] = + (content: ByteString) => ??? + /** + * This collection contains all {@Writeable}s which could be used in + * as a marshaller for different mime types and types of response + */ + override val custom: Seq[(String, ParserWrapper[_])] = Seq( + "application/json" -> reader_application_json_VendorQuery_esc + ) +} diff --git a/play-scala-generator/src/test/resources/expected_results/marshallers/form_data_yaml.scala b/play-scala-generator/src/test/resources/expected_results/marshallers/form_data_yaml.scala index 867dd5dd..cb158808 100644 --- a/play-scala-generator/src/test/resources/expected_results/marshallers/form_data_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/marshallers/form_data_yaml.scala @@ -8,8 +8,8 @@ import de.zalando.play.controllers._ import WriteableWrapper.writeable2wrapper import akka.util.ByteString -import java.io.File import scala.math.BigInt +import java.io.File @@ -27,10 +27,10 @@ object ResponseWriters extends ResponseWritersBase { * in order for play-swagger to be able to provide safety net for * different response types */ - val writable_application_json_MultipartPostResponses200_esc: Writeable[MultipartPostResponses200] = + val writable_application_json_MultipartPostResponses200: Writeable[MultipartPostResponses200] = Writeable(a => ???, Some("application/json")) - val writable_application_json_BothPostResponses200_esc: Writeable[BothPostResponses200] = + val writable_application_json_BothPostResponses200: Writeable[BothPostResponses200] = Writeable(a => ???, Some("application/json")) /** @@ -38,8 +38,8 @@ object ResponseWriters extends ResponseWritersBase { * as a marshaller for different mime types and types of response */ override val custom: Seq[WriteableWrapper[_]] = Seq( - writable_application_json_MultipartPostResponses200_esc, - writable_application_json_BothPostResponses200_esc + writable_application_json_MultipartPostResponses200, + writable_application_json_BothPostResponses200 ) } diff --git a/play-scala-generator/src/test/resources/expected_results/marshallers/full_petstore_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/marshallers/full_petstore_api_yaml.scala index 278450ca..fdbc14cb 100644 --- a/play-scala-generator/src/test/resources/expected_results/marshallers/full_petstore_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/marshallers/full_petstore_api_yaml.scala @@ -8,8 +8,8 @@ import de.zalando.play.controllers._ import WriteableWrapper.writeable2wrapper import akka.util.ByteString -import de.zalando.play.controllers.ArrayWrapper import java.time.ZonedDateTime +import de.zalando.play.controllers.ArrayWrapper @@ -27,40 +27,40 @@ object ResponseWriters extends ResponseWritersBase { * in order for play-swagger to be able to provide safety net for * different response types */ - val writable_application_json_Null_esc: Writeable[Null] = + val writable_application_json_Null: Writeable[Null] = Writeable(a => ???, Some("application/json")) - val writable_application_json_PetsFindByStatusGetResponses200_esc: Writeable[PetsFindByStatusGetResponses200] = + val writable_application_json_SeqPet: Writeable[Seq[Pet]] = Writeable(a => ???, Some("application/json")) - val writable_application_xml_Null_esc: Writeable[Null] = + val writable_application_xml_Null: Writeable[Null] = Writeable(a => ???, Some("application/xml")) - val writable_application_xml_PetsFindByStatusGetResponses200_esc: Writeable[PetsFindByStatusGetResponses200] = + val writable_application_xml_SeqPet: Writeable[Seq[Pet]] = Writeable(a => ???, Some("application/xml")) - val writable_application_json_Order_esc: Writeable[Order] = + val writable_application_json_Order: Writeable[Order] = Writeable(a => ???, Some("application/json")) - val writable_application_xml_Order_esc: Writeable[Order] = + val writable_application_xml_Order: Writeable[Order] = Writeable(a => ???, Some("application/xml")) - val writable_application_json_User_esc: Writeable[User] = + val writable_application_json_User: Writeable[User] = Writeable(a => ???, Some("application/json")) - val writable_application_xml_User_esc: Writeable[User] = + val writable_application_xml_User: Writeable[User] = Writeable(a => ???, Some("application/xml")) - val writable_application_json_Pet_esc: Writeable[Pet] = + val writable_application_json_Pet: Writeable[Pet] = Writeable(a => ???, Some("application/json")) - val writable_application_xml_Pet_esc: Writeable[Pet] = + val writable_application_xml_Pet: Writeable[Pet] = Writeable(a => ???, Some("application/xml")) - val writable_application_json_String_esc: Writeable[String] = + val writable_application_json_String: Writeable[String] = Writeable(a => ???, Some("application/json")) - val writable_application_xml_String_esc: Writeable[String] = + val writable_application_xml_String: Writeable[String] = Writeable(a => ???, Some("application/xml")) /** @@ -68,18 +68,18 @@ object ResponseWriters extends ResponseWritersBase { * as a marshaller for different mime types and types of response */ override val custom: Seq[WriteableWrapper[_]] = Seq( - writable_application_json_Null_esc, - writable_application_json_PetsFindByStatusGetResponses200_esc, - writable_application_xml_Null_esc, - writable_application_xml_PetsFindByStatusGetResponses200_esc, - writable_application_json_Order_esc, - writable_application_xml_Order_esc, - writable_application_json_User_esc, - writable_application_xml_User_esc, - writable_application_json_Pet_esc, - writable_application_xml_Pet_esc, - writable_application_json_String_esc, - writable_application_xml_String_esc + writable_application_json_Null, + writable_application_json_SeqPet, + writable_application_xml_Null, + writable_application_xml_SeqPet, + writable_application_json_Order, + writable_application_xml_Order, + writable_application_json_User, + writable_application_xml_User, + writable_application_json_Pet, + writable_application_xml_Pet, + writable_application_json_String, + writable_application_xml_String ) } @@ -96,25 +96,25 @@ object WrappedBodyParsers extends WrappedBodyParsersBase { * in order for play-swagger to be able to provide safety net for * different response types */ - val reader_application_json_StoresOrderPostBody_esc: Parser[StoresOrderPostBody] = + val reader_application_json_Option_Order__esc: Parser[Option[Order]] = (content: ByteString) => ??? - val reader_application_json_UsersUsernamePutBody_esc: Parser[UsersUsernamePutBody] = + val reader_application_json_Option_User__esc: Parser[Option[User]] = (content: ByteString) => ??? - val reader_application_json_UsersCreateWithListPostBody_esc: Parser[UsersCreateWithListPostBody] = + val reader_application_json_Option_Seq_User___esc: Parser[Option[Seq[User]]] = (content: ByteString) => ??? - val reader_application_json_PetsPostBody_esc: Parser[PetsPostBody] = + val reader_application_json_Option_Pet__esc: Parser[Option[Pet]] = (content: ByteString) => ??? - val reader_application_xml_PetsPostBody_esc: Parser[PetsPostBody] = + val reader_application_xml_Option_Pet__esc: Parser[Option[Pet]] = (content: ByteString) => ??? /** * This collection contains all {@Writeable}s which could be used in * as a marshaller for different mime types and types of response */ override val custom: Seq[(String, ParserWrapper[_])] = Seq( - "application/json" -> reader_application_json_StoresOrderPostBody_esc, - "application/json" -> reader_application_json_UsersUsernamePutBody_esc, - "application/json" -> reader_application_json_UsersCreateWithListPostBody_esc, - "application/json" -> reader_application_json_PetsPostBody_esc, - "application/xml" -> reader_application_xml_PetsPostBody_esc + "application/json" -> reader_application_json_Option_Order__esc, + "application/json" -> reader_application_json_Option_User__esc, + "application/json" -> reader_application_json_Option_Seq_User___esc, + "application/json" -> reader_application_json_Option_Pet__esc, + "application/xml" -> reader_application_xml_Option_Pet__esc ) } diff --git a/play-scala-generator/src/test/resources/expected_results/marshallers/heroku_petstore_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/marshallers/heroku_petstore_api_yaml.scala index 12ae6558..ddc3004f 100644 --- a/play-scala-generator/src/test/resources/expected_results/marshallers/heroku_petstore_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/marshallers/heroku_petstore_api_yaml.scala @@ -26,16 +26,16 @@ object ResponseWriters extends ResponseWritersBase { * in order for play-swagger to be able to provide safety net for * different response types */ - val writable_application_json_GetResponses200_esc: Writeable[GetResponses200] = + val writable_application_json_SeqPet: Writeable[Seq[Pet]] = Writeable(a => ???, Some("application/json")) - val writable_text_html_GetResponses200_esc: Writeable[GetResponses200] = + val writable_text_html_SeqPet: Writeable[Seq[Pet]] = Writeable(a => ???, Some("text/html")) - val writable_application_json_Null_esc: Writeable[Null] = + val writable_application_json_Null: Writeable[Null] = Writeable(a => ???, Some("application/json")) - val writable_text_html_Null_esc: Writeable[Null] = + val writable_text_html_Null: Writeable[Null] = Writeable(a => ???, Some("text/html")) /** @@ -43,10 +43,10 @@ object ResponseWriters extends ResponseWritersBase { * as a marshaller for different mime types and types of response */ override val custom: Seq[WriteableWrapper[_]] = Seq( - writable_application_json_GetResponses200_esc, - writable_text_html_GetResponses200_esc, - writable_application_json_Null_esc, - writable_text_html_Null_esc + writable_application_json_SeqPet, + writable_text_html_SeqPet, + writable_application_json_Null, + writable_text_html_Null ) } @@ -63,9 +63,9 @@ object WrappedBodyParsers extends WrappedBodyParsersBase { * in order for play-swagger to be able to provide safety net for * different response types */ - val reader_application_json_PutPet_esc: Parser[PutPet] = + val reader_application_json_Option_Pet__esc: Parser[Option[Pet]] = (content: ByteString) => ??? - val reader_text_xml_PutPet_esc: Parser[PutPet] = + val reader_text_xml_Option_Pet__esc: Parser[Option[Pet]] = (content: ByteString) => ??? val reader_application_json_Pet_esc: Parser[Pet] = (content: ByteString) => ??? @@ -76,8 +76,8 @@ object WrappedBodyParsers extends WrappedBodyParsersBase { * as a marshaller for different mime types and types of response */ override val custom: Seq[(String, ParserWrapper[_])] = Seq( - "application/json" -> reader_application_json_PutPet_esc, - "text/xml" -> reader_text_xml_PutPet_esc, + "application/json" -> reader_application_json_Option_Pet__esc, + "text/xml" -> reader_text_xml_Option_Pet__esc, "application/json" -> reader_application_json_Pet_esc, "text/xml" -> reader_text_xml_Pet_esc ) diff --git a/play-scala-generator/src/test/resources/expected_results/marshallers/instagram_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/marshallers/instagram_api_yaml.scala index 7f79386f..24561ac6 100644 --- a/play-scala-generator/src/test/resources/expected_results/marshallers/instagram_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/marshallers/instagram_api_yaml.scala @@ -27,49 +27,49 @@ object ResponseWriters extends ResponseWritersBase { * in order for play-swagger to be able to provide safety net for * different response types */ - val writable_application_json_MediaMedia_idLikesGetResponses200_esc: Writeable[MediaMedia_idLikesGetResponses200] = + val writable_application_json_MediaMedia_idLikesGetResponses200: Writeable[MediaMedia_idLikesGetResponses200] = Writeable(a => ???, Some("application/json")) - val writable_application_json_MediaMedia_idCommentsDeleteResponses200_esc: Writeable[MediaMedia_idCommentsDeleteResponses200] = + val writable_application_json_MediaMedia_idCommentsDeleteResponses200: Writeable[MediaMedia_idCommentsDeleteResponses200] = Writeable(a => ???, Some("application/json")) - val writable_application_json_UsersUser_idFollowsGetResponses200_esc: Writeable[UsersUser_idFollowsGetResponses200] = + val writable_application_json_UsersUser_idFollowsGetResponses200: Writeable[UsersUser_idFollowsGetResponses200] = Writeable(a => ???, Some("application/json")) - val writable_application_json_LocationsLocation_idGetResponses200_esc: Writeable[LocationsLocation_idGetResponses200] = + val writable_application_json_LocationsLocation_idGetResponses200: Writeable[LocationsLocation_idGetResponses200] = Writeable(a => ???, Some("application/json")) - val writable_application_json_UsersSelfFeedGetResponses200_esc: Writeable[UsersSelfFeedGetResponses200] = + val writable_application_json_UsersSelfFeedGetResponses200: Writeable[UsersSelfFeedGetResponses200] = Writeable(a => ???, Some("application/json")) - val writable_application_json_Tag_esc: Writeable[Tag] = + val writable_application_json_Tag: Writeable[Tag] = Writeable(a => ???, Some("application/json")) - val writable_application_json_TagsSearchGetResponses200_esc: Writeable[TagsSearchGetResponses200] = + val writable_application_json_TagsSearchGetResponses200: Writeable[TagsSearchGetResponses200] = Writeable(a => ???, Some("application/json")) - val writable_application_json_MediaMedia_idCommentsGetResponses200_esc: Writeable[MediaMedia_idCommentsGetResponses200] = + val writable_application_json_MediaMedia_idCommentsGetResponses200: Writeable[MediaMedia_idCommentsGetResponses200] = Writeable(a => ???, Some("application/json")) - val writable_application_json_TagsTag_nameMediaRecentGetResponses200_esc: Writeable[TagsTag_nameMediaRecentGetResponses200] = + val writable_application_json_TagsTag_nameMediaRecentGetResponses200: Writeable[TagsTag_nameMediaRecentGetResponses200] = Writeable(a => ???, Some("application/json")) - val writable_application_json_UsersUser_idGetResponses200_esc: Writeable[UsersUser_idGetResponses200] = + val writable_application_json_UsersUser_idGetResponses200: Writeable[UsersUser_idGetResponses200] = Writeable(a => ???, Some("application/json")) - val writable_application_json_MediaSearchGetResponses200_esc: Writeable[MediaSearchGetResponses200] = + val writable_application_json_MediaSearchGetResponses200: Writeable[MediaSearchGetResponses200] = Writeable(a => ???, Some("application/json")) - val writable_application_json_Null_esc: Writeable[Null] = + val writable_application_json_Null: Writeable[Null] = Writeable(a => ???, Some("application/json")) - val writable_application_json_Media_esc: Writeable[Media] = + val writable_application_json_Media: Writeable[Media] = Writeable(a => ???, Some("application/json")) - val writable_application_json_LocationsSearchGetResponses200_esc: Writeable[LocationsSearchGetResponses200] = + val writable_application_json_LocationsSearchGetResponses200: Writeable[LocationsSearchGetResponses200] = Writeable(a => ???, Some("application/json")) - val writable_application_json_UsersSelfRequested_byGetResponses200_esc: Writeable[UsersSelfRequested_byGetResponses200] = + val writable_application_json_UsersSelfRequested_byGetResponses200: Writeable[UsersSelfRequested_byGetResponses200] = Writeable(a => ???, Some("application/json")) /** @@ -77,21 +77,21 @@ object ResponseWriters extends ResponseWritersBase { * as a marshaller for different mime types and types of response */ override val custom: Seq[WriteableWrapper[_]] = Seq( - writable_application_json_MediaMedia_idLikesGetResponses200_esc, - writable_application_json_MediaMedia_idCommentsDeleteResponses200_esc, - writable_application_json_UsersUser_idFollowsGetResponses200_esc, - writable_application_json_LocationsLocation_idGetResponses200_esc, - writable_application_json_UsersSelfFeedGetResponses200_esc, - writable_application_json_Tag_esc, - writable_application_json_TagsSearchGetResponses200_esc, - writable_application_json_MediaMedia_idCommentsGetResponses200_esc, - writable_application_json_TagsTag_nameMediaRecentGetResponses200_esc, - writable_application_json_UsersUser_idGetResponses200_esc, - writable_application_json_MediaSearchGetResponses200_esc, - writable_application_json_Null_esc, - writable_application_json_Media_esc, - writable_application_json_LocationsSearchGetResponses200_esc, - writable_application_json_UsersSelfRequested_byGetResponses200_esc + writable_application_json_MediaMedia_idLikesGetResponses200, + writable_application_json_MediaMedia_idCommentsDeleteResponses200, + writable_application_json_UsersUser_idFollowsGetResponses200, + writable_application_json_LocationsLocation_idGetResponses200, + writable_application_json_UsersSelfFeedGetResponses200, + writable_application_json_Tag, + writable_application_json_TagsSearchGetResponses200, + writable_application_json_MediaMedia_idCommentsGetResponses200, + writable_application_json_TagsTag_nameMediaRecentGetResponses200, + writable_application_json_UsersUser_idGetResponses200, + writable_application_json_MediaSearchGetResponses200, + writable_application_json_Null, + writable_application_json_Media, + writable_application_json_LocationsSearchGetResponses200, + writable_application_json_UsersSelfRequested_byGetResponses200 ) } @@ -108,16 +108,16 @@ object WrappedBodyParsers extends WrappedBodyParsersBase { * in order for play-swagger to be able to provide safety net for * different response types */ - val reader_application_json_LocationLatitude_esc: Parser[LocationLatitude] = + val reader_application_json_Option_BigDecimal__esc: Parser[Option[BigDecimal]] = (content: ByteString) => ??? - val reader_application_json_UsersUser_idRelationshipPostAction_esc: Parser[UsersUser_idRelationshipPostAction] = + val reader_application_json_Option_UsersUser_idRelationshipPostActionOptionEnum__esc: Parser[Option[UsersUser_idRelationshipPostActionOptionEnum]] = (content: ByteString) => ??? /** * This collection contains all {@Writeable}s which could be used in * as a marshaller for different mime types and types of response */ override val custom: Seq[(String, ParserWrapper[_])] = Seq( - "application/json" -> reader_application_json_LocationLatitude_esc, - "application/json" -> reader_application_json_UsersUser_idRelationshipPostAction_esc + "application/json" -> reader_application_json_Option_BigDecimal__esc, + "application/json" -> reader_application_json_Option_UsersUser_idRelationshipPostActionOptionEnum__esc ) } diff --git a/play-scala-generator/src/test/resources/expected_results/marshallers/nakadi_yaml.scala b/play-scala-generator/src/test/resources/expected_results/marshallers/nakadi_yaml.scala index 12d1d3af..3b006344 100644 --- a/play-scala-generator/src/test/resources/expected_results/marshallers/nakadi_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/marshallers/nakadi_yaml.scala @@ -26,25 +26,25 @@ object ResponseWriters extends ResponseWritersBase { * in order for play-swagger to be able to provide safety net for * different response types */ - val writable_application_json_Problem_esc: Writeable[Problem] = + val writable_application_json_Problem: Writeable[Problem] = Writeable(a => ???, Some("application/json")) - val writable_application_json_Metrics_esc: Writeable[Metrics] = + val writable_application_json_Metrics: Writeable[Metrics] = Writeable(a => ???, Some("application/json")) - val writable_application_json_SimpleStreamEvent_esc: Writeable[SimpleStreamEvent] = + val writable_application_json_SimpleStreamEvent: Writeable[SimpleStreamEvent] = Writeable(a => ???, Some("application/json")) - val writable_application_json_TopicPartition_esc: Writeable[TopicPartition] = + val writable_application_json_TopicPartition: Writeable[TopicPartition] = Writeable(a => ???, Some("application/json")) - val writable_application_json_TopicsGetResponses200_esc: Writeable[TopicsGetResponses200] = + val writable_application_json_SeqTopic: Writeable[Seq[Topic]] = Writeable(a => ???, Some("application/json")) - val writable_application_json_Null_esc: Writeable[Null] = + val writable_application_json_Null: Writeable[Null] = Writeable(a => ???, Some("application/json")) - val writable_application_json_TopicsTopicPartitionsGetResponses200_esc: Writeable[TopicsTopicPartitionsGetResponses200] = + val writable_application_json_SeqTopicPartition: Writeable[Seq[TopicPartition]] = Writeable(a => ???, Some("application/json")) /** @@ -52,13 +52,13 @@ object ResponseWriters extends ResponseWritersBase { * as a marshaller for different mime types and types of response */ override val custom: Seq[WriteableWrapper[_]] = Seq( - writable_application_json_Problem_esc, - writable_application_json_Metrics_esc, - writable_application_json_SimpleStreamEvent_esc, - writable_application_json_TopicPartition_esc, - writable_application_json_TopicsGetResponses200_esc, - writable_application_json_Null_esc, - writable_application_json_TopicsTopicPartitionsGetResponses200_esc + writable_application_json_Problem, + writable_application_json_Metrics, + writable_application_json_SimpleStreamEvent, + writable_application_json_TopicPartition, + writable_application_json_SeqTopic, + writable_application_json_Null, + writable_application_json_SeqTopicPartition ) } @@ -75,13 +75,13 @@ object WrappedBodyParsers extends WrappedBodyParsersBase { * in order for play-swagger to be able to provide safety net for * different response types */ - val reader_application_json_TopicsTopicEventsBatchPostEvent_esc: Parser[TopicsTopicEventsBatchPostEvent] = + val reader_application_json_Option_Event__esc: Parser[Option[Event]] = (content: ByteString) => ??? /** * This collection contains all {@Writeable}s which could be used in * as a marshaller for different mime types and types of response */ override val custom: Seq[(String, ParserWrapper[_])] = Seq( - "application/json" -> reader_application_json_TopicsTopicEventsBatchPostEvent_esc + "application/json" -> reader_application_json_Option_Event__esc ) } diff --git a/play-scala-generator/src/test/resources/expected_results/marshallers/security_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/marshallers/security_api_yaml.scala index 9871ffc9..fa9522fe 100644 --- a/play-scala-generator/src/test/resources/expected_results/marshallers/security_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/marshallers/security_api_yaml.scala @@ -26,16 +26,16 @@ object ResponseWriters extends ResponseWritersBase { * in order for play-swagger to be able to provide safety net for * different response types */ - val writable_application_json_PetsIdGetResponses200_esc: Writeable[PetsIdGetResponses200] = + val writable_application_json_SeqPet: Writeable[Seq[Pet]] = Writeable(a => ???, Some("application/json")) - val writable_application_json_ErrorModel_esc: Writeable[ErrorModel] = + val writable_application_json_ErrorModel: Writeable[ErrorModel] = Writeable(a => ???, Some("application/json")) - val writable_text_html_PetsIdGetResponses200_esc: Writeable[PetsIdGetResponses200] = + val writable_text_html_SeqPet: Writeable[Seq[Pet]] = Writeable(a => ???, Some("text/html")) - val writable_text_html_ErrorModel_esc: Writeable[ErrorModel] = + val writable_text_html_ErrorModel: Writeable[ErrorModel] = Writeable(a => ???, Some("text/html")) /** @@ -43,10 +43,10 @@ object ResponseWriters extends ResponseWritersBase { * as a marshaller for different mime types and types of response */ override val custom: Seq[WriteableWrapper[_]] = Seq( - writable_application_json_PetsIdGetResponses200_esc, - writable_application_json_ErrorModel_esc, - writable_text_html_PetsIdGetResponses200_esc, - writable_text_html_ErrorModel_esc + writable_application_json_SeqPet, + writable_application_json_ErrorModel, + writable_text_html_SeqPet, + writable_text_html_ErrorModel ) } diff --git a/play-scala-generator/src/test/resources/expected_results/marshallers/simple_petstore_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/marshallers/simple_petstore_api_yaml.scala index 168553fc..69b53902 100644 --- a/play-scala-generator/src/test/resources/expected_results/marshallers/simple_petstore_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/marshallers/simple_petstore_api_yaml.scala @@ -26,43 +26,43 @@ object ResponseWriters extends ResponseWritersBase { * in order for play-swagger to be able to provide safety net for * different response types */ - val writable_application_json_PetsGetResponses200_esc: Writeable[PetsGetResponses200] = - Writeable(a => ???, Some("application/json")) + val writable_application_xml_SeqPet: Writeable[Seq[Pet]] = + Writeable(a => ???, Some("application/xml")) + + val writable_text_html_SeqPet: Writeable[Seq[Pet]] = + Writeable(a => ???, Some("text/html")) - val writable_application_json_ErrorModel_esc: Writeable[ErrorModel] = + val writable_application_json_ErrorModel: Writeable[ErrorModel] = Writeable(a => ???, Some("application/json")) - val writable_text_xml_PetsGetResponses200_esc: Writeable[PetsGetResponses200] = + val writable_text_xml_SeqPet: Writeable[Seq[Pet]] = Writeable(a => ???, Some("text/xml")) - val writable_text_html_PetsGetResponses200_esc: Writeable[PetsGetResponses200] = - Writeable(a => ???, Some("text/html")) - - val writable_application_xml_PetsGetResponses200_esc: Writeable[PetsGetResponses200] = - Writeable(a => ???, Some("application/xml")) + val writable_application_json_SeqPet: Writeable[Seq[Pet]] = + Writeable(a => ???, Some("application/json")) - val writable_application_xml_ErrorModel_esc: Writeable[ErrorModel] = + val writable_application_xml_ErrorModel: Writeable[ErrorModel] = Writeable(a => ???, Some("application/xml")) - val writable_text_html_ErrorModel_esc: Writeable[ErrorModel] = + val writable_text_html_ErrorModel: Writeable[ErrorModel] = Writeable(a => ???, Some("text/html")) - val writable_text_xml_ErrorModel_esc: Writeable[ErrorModel] = + val writable_text_xml_ErrorModel: Writeable[ErrorModel] = Writeable(a => ???, Some("text/xml")) - val writable_application_json_Pet_esc: Writeable[Pet] = + val writable_application_json_Pet: Writeable[Pet] = Writeable(a => ???, Some("application/json")) - val writable_application_xml_Pet_esc: Writeable[Pet] = + val writable_application_xml_Pet: Writeable[Pet] = Writeable(a => ???, Some("application/xml")) - val writable_text_html_Pet_esc: Writeable[Pet] = + val writable_text_html_Pet: Writeable[Pet] = Writeable(a => ???, Some("text/html")) - val writable_text_xml_Pet_esc: Writeable[Pet] = + val writable_text_xml_Pet: Writeable[Pet] = Writeable(a => ???, Some("text/xml")) - val writable_application_json_Null_esc: Writeable[Null] = + val writable_application_json_Null: Writeable[Null] = Writeable(a => ???, Some("application/json")) /** @@ -70,19 +70,19 @@ object ResponseWriters extends ResponseWritersBase { * as a marshaller for different mime types and types of response */ override val custom: Seq[WriteableWrapper[_]] = Seq( - writable_application_json_PetsGetResponses200_esc, - writable_application_json_ErrorModel_esc, - writable_text_xml_PetsGetResponses200_esc, - writable_text_html_PetsGetResponses200_esc, - writable_application_xml_PetsGetResponses200_esc, - writable_application_xml_ErrorModel_esc, - writable_text_html_ErrorModel_esc, - writable_text_xml_ErrorModel_esc, - writable_application_json_Pet_esc, - writable_application_xml_Pet_esc, - writable_text_html_Pet_esc, - writable_text_xml_Pet_esc, - writable_application_json_Null_esc + writable_application_xml_SeqPet, + writable_text_html_SeqPet, + writable_application_json_ErrorModel, + writable_text_xml_SeqPet, + writable_application_json_SeqPet, + writable_application_xml_ErrorModel, + writable_text_html_ErrorModel, + writable_text_xml_ErrorModel, + writable_application_json_Pet, + writable_application_xml_Pet, + writable_text_html_Pet, + writable_text_xml_Pet, + writable_application_json_Null ) } diff --git a/play-scala-generator/src/test/resources/expected_results/marshallers/split_petstore_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/marshallers/split_petstore_api_yaml.scala index 016452de..90b3b04e 100644 --- a/play-scala-generator/src/test/resources/expected_results/marshallers/split_petstore_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/marshallers/split_petstore_api_yaml.scala @@ -8,8 +8,8 @@ import de.zalando.play.controllers._ import WriteableWrapper.writeable2wrapper import akka.util.ByteString -import de.zalando.play.controllers.ArrayWrapper import java.time.ZonedDateTime +import de.zalando.play.controllers.ArrayWrapper @@ -27,40 +27,40 @@ object ResponseWriters extends ResponseWritersBase { * in order for play-swagger to be able to provide safety net for * different response types */ - val writable_application_json_Null_esc: Writeable[Null] = + val writable_application_json_Null: Writeable[Null] = Writeable(a => ???, Some("application/json")) - val writable_application_json_PetsFindByStatusGetResponses200_esc: Writeable[PetsFindByStatusGetResponses200] = + val writable_application_json_SeqPet: Writeable[Seq[Pet]] = Writeable(a => ???, Some("application/json")) - val writable_application_xml_Null_esc: Writeable[Null] = + val writable_application_xml_Null: Writeable[Null] = Writeable(a => ???, Some("application/xml")) - val writable_application_xml_PetsFindByStatusGetResponses200_esc: Writeable[PetsFindByStatusGetResponses200] = + val writable_application_xml_SeqPet: Writeable[Seq[Pet]] = Writeable(a => ???, Some("application/xml")) - val writable_application_json_Order_esc: Writeable[Order] = + val writable_application_json_Order: Writeable[Order] = Writeable(a => ???, Some("application/json")) - val writable_application_xml_Order_esc: Writeable[Order] = + val writable_application_xml_Order: Writeable[Order] = Writeable(a => ???, Some("application/xml")) - val writable_application_json_User_esc: Writeable[User] = + val writable_application_json_User: Writeable[User] = Writeable(a => ???, Some("application/json")) - val writable_application_xml_User_esc: Writeable[User] = + val writable_application_xml_User: Writeable[User] = Writeable(a => ???, Some("application/xml")) - val writable_application_json_Pet_esc: Writeable[Pet] = + val writable_application_json_Pet: Writeable[Pet] = Writeable(a => ???, Some("application/json")) - val writable_application_xml_Pet_esc: Writeable[Pet] = + val writable_application_xml_Pet: Writeable[Pet] = Writeable(a => ???, Some("application/xml")) - val writable_application_json_String_esc: Writeable[String] = + val writable_application_json_String: Writeable[String] = Writeable(a => ???, Some("application/json")) - val writable_application_xml_String_esc: Writeable[String] = + val writable_application_xml_String: Writeable[String] = Writeable(a => ???, Some("application/xml")) /** @@ -68,18 +68,18 @@ object ResponseWriters extends ResponseWritersBase { * as a marshaller for different mime types and types of response */ override val custom: Seq[WriteableWrapper[_]] = Seq( - writable_application_json_Null_esc, - writable_application_json_PetsFindByStatusGetResponses200_esc, - writable_application_xml_Null_esc, - writable_application_xml_PetsFindByStatusGetResponses200_esc, - writable_application_json_Order_esc, - writable_application_xml_Order_esc, - writable_application_json_User_esc, - writable_application_xml_User_esc, - writable_application_json_Pet_esc, - writable_application_xml_Pet_esc, - writable_application_json_String_esc, - writable_application_xml_String_esc + writable_application_json_Null, + writable_application_json_SeqPet, + writable_application_xml_Null, + writable_application_xml_SeqPet, + writable_application_json_Order, + writable_application_xml_Order, + writable_application_json_User, + writable_application_xml_User, + writable_application_json_Pet, + writable_application_xml_Pet, + writable_application_json_String, + writable_application_xml_String ) } @@ -96,25 +96,25 @@ object WrappedBodyParsers extends WrappedBodyParsersBase { * in order for play-swagger to be able to provide safety net for * different response types */ - val reader_application_json_StoresOrderPostBody_esc: Parser[StoresOrderPostBody] = + val reader_application_json_Option_Order__esc: Parser[Option[Order]] = (content: ByteString) => ??? - val reader_application_json_UsersUsernamePutBody_esc: Parser[UsersUsernamePutBody] = + val reader_application_json_Option_User__esc: Parser[Option[User]] = (content: ByteString) => ??? - val reader_application_json_UsersCreateWithListPostBody_esc: Parser[UsersCreateWithListPostBody] = + val reader_application_json_Option_Seq_User___esc: Parser[Option[Seq[User]]] = (content: ByteString) => ??? - val reader_application_json_PetsPostBody_esc: Parser[PetsPostBody] = + val reader_application_json_Option_Pet__esc: Parser[Option[Pet]] = (content: ByteString) => ??? - val reader_application_xml_PetsPostBody_esc: Parser[PetsPostBody] = + val reader_application_xml_Option_Pet__esc: Parser[Option[Pet]] = (content: ByteString) => ??? /** * This collection contains all {@Writeable}s which could be used in * as a marshaller for different mime types and types of response */ override val custom: Seq[(String, ParserWrapper[_])] = Seq( - "application/json" -> reader_application_json_StoresOrderPostBody_esc, - "application/json" -> reader_application_json_UsersUsernamePutBody_esc, - "application/json" -> reader_application_json_UsersCreateWithListPostBody_esc, - "application/json" -> reader_application_json_PetsPostBody_esc, - "application/xml" -> reader_application_xml_PetsPostBody_esc + "application/json" -> reader_application_json_Option_Order__esc, + "application/json" -> reader_application_json_Option_User__esc, + "application/json" -> reader_application_json_Option_Seq_User___esc, + "application/json" -> reader_application_json_Option_Pet__esc, + "application/xml" -> reader_application_xml_Option_Pet__esc ) } diff --git a/play-scala-generator/src/test/resources/expected_results/marshallers/string_formats_yaml.scala b/play-scala-generator/src/test/resources/expected_results/marshallers/string_formats_yaml.scala index 5a71600d..7064ade3 100644 --- a/play-scala-generator/src/test/resources/expected_results/marshallers/string_formats_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/marshallers/string_formats_yaml.scala @@ -10,11 +10,11 @@ import akka.util.ByteString import de.zalando.play.controllers.Base64String import Base64String._ +import de.zalando.play.controllers.BinaryString +import BinaryString._ import java.time.ZonedDateTime import java.util.UUID import java.time.LocalDate -import de.zalando.play.controllers.BinaryString -import BinaryString._ @@ -32,10 +32,10 @@ object ResponseWriters extends ResponseWritersBase { * in order for play-swagger to be able to provide safety net for * different response types */ - val writable_application_json_Null_esc: Writeable[Null] = + val writable_application_json_Null: Writeable[Null] = Writeable(a => ???, Some("application/json")) - val writable_application_yaml_Null_esc: Writeable[Null] = + val writable_application_yaml_Null: Writeable[Null] = Writeable(a => ???, Some("application/yaml")) /** @@ -43,8 +43,8 @@ object ResponseWriters extends ResponseWritersBase { * as a marshaller for different mime types and types of response */ override val custom: Seq[WriteableWrapper[_]] = Seq( - writable_application_json_Null_esc, - writable_application_yaml_Null_esc + writable_application_json_Null, + writable_application_yaml_Null ) } diff --git a/play-scala-generator/src/test/resources/expected_results/marshallers/type_deduplication_yaml.scala b/play-scala-generator/src/test/resources/expected_results/marshallers/type_deduplication_yaml.scala index 09ca9407..310ab30f 100644 --- a/play-scala-generator/src/test/resources/expected_results/marshallers/type_deduplication_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/marshallers/type_deduplication_yaml.scala @@ -26,46 +26,46 @@ object ResponseWriters extends ResponseWritersBase { * in order for play-swagger to be able to provide safety net for * different response types */ - val writable_application_json_Error_esc: Writeable[Error] = + val writable_application_json_Error: Writeable[Error] = Writeable(a => ???, Some("application/json")) - val writable_application_json_Watering_esc: Writeable[Watering] = + val writable_application_json_Watering: Writeable[Watering] = Writeable(a => ???, Some("application/json")) - val writable_application_json_Null_esc: Writeable[Null] = + val writable_application_json_Null: Writeable[Null] = Writeable(a => ???, Some("application/json")) - val writable_application_json_User_esc: Writeable[User] = + val writable_application_json_User: Writeable[User] = Writeable(a => ???, Some("application/json")) - val writable_application_json_SunlightNeeds_esc: Writeable[SunlightNeeds] = + val writable_application_json_SunlightNeeds: Writeable[SunlightNeeds] = Writeable(a => ???, Some("application/json")) - val writable_application_json_UsersGetResponses200_esc: Writeable[UsersGetResponses200] = + val writable_application_json_SeqUser: Writeable[Seq[User]] = Writeable(a => ???, Some("application/json")) - val writable_application_json_Area_esc: Writeable[Area] = + val writable_application_json_Area: Writeable[Area] = Writeable(a => ???, Some("application/json")) - val writable_application_json_PlantsGetResponses200_esc: Writeable[PlantsGetResponses200] = + val writable_application_json_SeqPlant: Writeable[Seq[Plant]] = Writeable(a => ???, Some("application/json")) - val writable_application_json_AreasGetResponses200_esc: Writeable[AreasGetResponses200] = + val writable_application_json_SeqArea: Writeable[Seq[Area]] = Writeable(a => ???, Some("application/json")) - val writable_application_json_Location_esc: Writeable[Location] = + val writable_application_json_Location: Writeable[Location] = Writeable(a => ???, Some("application/json")) - val writable_application_json_PlantsPlant_idPicturesGetResponses200_esc: Writeable[PlantsPlant_idPicturesGetResponses200] = + val writable_application_json_SeqString: Writeable[Seq[String]] = Writeable(a => ???, Some("application/json")) - val writable_application_json_Plant_esc: Writeable[Plant] = + val writable_application_json_Plant: Writeable[Plant] = Writeable(a => ???, Some("application/json")) - val writable_application_json_PlantsPlant_idWateringsGetResponses200_esc: Writeable[PlantsPlant_idWateringsGetResponses200] = + val writable_application_json_SeqWatering: Writeable[Seq[Watering]] = Writeable(a => ???, Some("application/json")) - val writable_application_json_WaterNeeds_esc: Writeable[WaterNeeds] = + val writable_application_json_WaterNeeds: Writeable[WaterNeeds] = Writeable(a => ???, Some("application/json")) /** @@ -73,20 +73,20 @@ object ResponseWriters extends ResponseWritersBase { * as a marshaller for different mime types and types of response */ override val custom: Seq[WriteableWrapper[_]] = Seq( - writable_application_json_Error_esc, - writable_application_json_Watering_esc, - writable_application_json_Null_esc, - writable_application_json_User_esc, - writable_application_json_SunlightNeeds_esc, - writable_application_json_UsersGetResponses200_esc, - writable_application_json_Area_esc, - writable_application_json_PlantsGetResponses200_esc, - writable_application_json_AreasGetResponses200_esc, - writable_application_json_Location_esc, - writable_application_json_PlantsPlant_idPicturesGetResponses200_esc, - writable_application_json_Plant_esc, - writable_application_json_PlantsPlant_idWateringsGetResponses200_esc, - writable_application_json_WaterNeeds_esc + writable_application_json_Error, + writable_application_json_Watering, + writable_application_json_Null, + writable_application_json_User, + writable_application_json_SunlightNeeds, + writable_application_json_SeqUser, + writable_application_json_Area, + writable_application_json_SeqPlant, + writable_application_json_SeqArea, + writable_application_json_Location, + writable_application_json_SeqString, + writable_application_json_Plant, + writable_application_json_SeqWatering, + writable_application_json_WaterNeeds ) } diff --git a/play-scala-generator/src/test/resources/expected_results/marshallers/uber_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/marshallers/uber_api_yaml.scala index 536e754e..06ee4c5c 100644 --- a/play-scala-generator/src/test/resources/expected_results/marshallers/uber_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/marshallers/uber_api_yaml.scala @@ -8,8 +8,8 @@ import de.zalando.play.controllers._ import WriteableWrapper.writeable2wrapper import akka.util.ByteString -import java.util.UUID import scala.math.BigDecimal +import java.util.UUID @@ -27,19 +27,19 @@ object ResponseWriters extends ResponseWritersBase { * in order for play-swagger to be able to provide safety net for * different response types */ - val writable_application_json_Profile_esc: Writeable[Profile] = + val writable_application_json_Profile: Writeable[Profile] = Writeable(a => ???, Some("application/json")) - val writable_application_json_Error_esc: Writeable[Error] = + val writable_application_json_Error: Writeable[Error] = Writeable(a => ???, Some("application/json")) - val writable_application_json_ProductsGetResponses200_esc: Writeable[ProductsGetResponses200] = + val writable_application_json_SeqProduct: Writeable[Seq[Product]] = Writeable(a => ???, Some("application/json")) - val writable_application_json_EstimatesPriceGetResponses200_esc: Writeable[EstimatesPriceGetResponses200] = + val writable_application_json_SeqPriceEstimate: Writeable[Seq[PriceEstimate]] = Writeable(a => ???, Some("application/json")) - val writable_application_json_Activities_esc: Writeable[Activities] = + val writable_application_json_Activities: Writeable[Activities] = Writeable(a => ???, Some("application/json")) /** @@ -47,11 +47,11 @@ object ResponseWriters extends ResponseWritersBase { * as a marshaller for different mime types and types of response */ override val custom: Seq[WriteableWrapper[_]] = Seq( - writable_application_json_Profile_esc, - writable_application_json_Error_esc, - writable_application_json_ProductsGetResponses200_esc, - writable_application_json_EstimatesPriceGetResponses200_esc, - writable_application_json_Activities_esc + writable_application_json_Profile, + writable_application_json_Error, + writable_application_json_SeqProduct, + writable_application_json_SeqPriceEstimate, + writable_application_json_Activities ) } diff --git a/play-scala-generator/src/test/resources/expected_results/model/additional_properties_yaml.scala b/play-scala-generator/src/test/resources/expected_results/model/additional_properties_yaml.scala index fb8b4052..b778304d 100644 --- a/play-scala-generator/src/test/resources/expected_results/model/additional_properties_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/model/additional_properties_yaml.scala @@ -18,8 +18,7 @@ package additional_properties_yaml { //noinspection ScalaStyle package object additional_properties_yaml { - type KeyedArraysAdditionalProperties = Map[String, KeyedArraysAdditionalPropertiesCatchAll] - type KeyedArraysAdditionalPropertiesCatchAll = Seq[BigInt] + type KeyedArraysAdditionalProperties = Map[String, Seq[BigInt]] diff --git a/play-scala-generator/src/test/resources/expected_results/model/basic_polymorphism_yaml.scala b/play-scala-generator/src/test/resources/expected_results/model/basic_polymorphism_yaml.scala index 39dc5795..39fc17f7 100644 --- a/play-scala-generator/src/test/resources/expected_results/model/basic_polymorphism_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/model/basic_polymorphism_yaml.scala @@ -11,7 +11,7 @@ package yaml { def petType: String } - case class Zoo(tiers: ZooTiers) + case class Zoo(tiers: Option[Seq[Pet]]) case class Cat(name: String, petType: String, huntingSkill: CatHuntingSkill) extends IPet case class LabradorAllOf0(name: String, petType: String, packSize: Int) extends IPet case class Dog(name: String, petType: String, packSize: Int) extends IPet @@ -39,9 +39,6 @@ package yaml { //noinspection ScalaStyle package object yaml { - type ZooTiersOpt = Seq[IPet] - type ZooTiers = Option[ZooTiersOpt] - type PutDummy = Option[IPet] type PutResponses200 = Null object CatHuntingSkill { diff --git a/play-scala-generator/src/test/resources/expected_results/model/cross_spec_references_yaml.scala b/play-scala-generator/src/test/resources/expected_results/model/cross_spec_references_yaml.scala index 71c95274..b247c544 100644 --- a/play-scala-generator/src/test/resources/expected_results/model/cross_spec_references_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/model/cross_spec_references_yaml.scala @@ -8,15 +8,15 @@ package cross_spec_references package yaml { - case class PetCategoryOpt(id: PetId, name: MetaCopyright) - case class ModelSchemaRootDataOpt(name: String, sizeRegister: String, brand: String, partnerArticleModelId: BigInt, description: MetaCopyright, ageGroups: ModelSchemaAgeGroups, keywords: ModelSchemaKeywords, lengthRegister: ModelSchemaLengthRegister, silhouetteId: ModelSchemaSilhouetteId, specialDescriptions: ModelSchemaSpecialDescriptions, articleModelAttributes: ModelSchemaSpecialDescriptions) - case class ModelSchemaRootMetaOpt(copyright: MetaCopyright) - case class ModelSchemaRoot(data: ModelSchemaRootData, meta: ModelSchemaRootMeta, links: ModelSchemaRootLinks) - case class Pet(name: String, tags: PetTags, photoUrls: PetPhotoUrls, id: PetId, status: MetaCopyright, category: PetCategory) - case class ModelSchemaRootLinksOpt(self: MetaCopyright, related: MetaCopyright) + case class ModelSchemaRootMetaOptionMeta(copyright: Option[String]) + case class PetCategoryOptionCategory(id: Option[Long], name: Option[String]) + case class ModelSchemaRoot(data: Option[ModelSchemaRootDataOptionModelSchema], meta: Option[ModelSchemaRootMetaOptionMeta], links: Option[ModelSchemaRootLinksOptionLinks]) + case class ModelSchemaRootLinksOptionLinks(self: Option[String], related: Option[String]) + case class Pet(name: String, photoUrls: Seq[String], id: Option[Long], status: Option[String], tags: Option[Seq[PetCategoryOptionCategory]], category: Option[PetCategoryOptionCategory]) + case class ModelSchemaRootDataOptionModelSchema(name: String, description: Option[String], sizeRegister: String, brand: String, partnerArticleModelId: BigInt, keywords: Option[String], lengthRegister: Option[String], specialDescriptions: Option[Seq[String]], articleModelAttributes: Option[Seq[String]], silhouetteId: ModelSchemaSilhouetteId, ageGroups: Seq[ModelSchemaAgeGroupsSeqEnum]) case class ModelSchemaSilhouetteId(override val value: String) extends AnyVal with de.zalando.play.controllers.StringAnyVal - case class ModelSchemaAgeGroupsArrResult(override val value: String) extends AnyVal with de.zalando.play.controllers.StringAnyVal + case class ModelSchemaAgeGroupsSeqEnum(override val value: String) extends AnyVal with de.zalando.play.controllers.StringAnyVal } @@ -25,19 +25,6 @@ package yaml { //noinspection ScalaStyle package object yaml { - type MetaCopyright = Option[String] - type ModelSchemaKeywords = Option[String] - type ModelSchemaSpecialDescriptions = Option[PetPhotoUrls] - type ModelSchemaRootData = Option[ModelSchemaRootDataOpt] - type PetId = Option[Long] - type ModelSchemaRootLinks = Option[ModelSchemaRootLinksOpt] - type PetTags = Option[PetTagsOpt] - type PetPhotoUrls = Seq[String] - type ModelSchemaLengthRegister = Option[String] - type ModelSchemaAgeGroups = Seq[ModelSchemaAgeGroupsArrResult] - type PetCategory = Option[PetCategoryOpt] - type PetTagsOpt = Seq[PetCategoryOpt] - type ModelSchemaRootMeta = Option[ModelSchemaRootMetaOpt] object ModelSchemaSilhouetteId { @@ -233,14 +220,14 @@ package object yaml { throw new IllegalArgumentException("Couldn't parse parameter " + other) } } - object ModelSchemaAgeGroupsArrResult { + object ModelSchemaAgeGroupsSeqEnum { - val Baby = new ModelSchemaAgeGroupsArrResult("baby") - val Kid = new ModelSchemaAgeGroupsArrResult("kid") - val Teen = new ModelSchemaAgeGroupsArrResult("teen") - val Adult = new ModelSchemaAgeGroupsArrResult("adult") + val Baby = new ModelSchemaAgeGroupsSeqEnum("baby") + val Kid = new ModelSchemaAgeGroupsSeqEnum("kid") + val Teen = new ModelSchemaAgeGroupsSeqEnum("teen") + val Adult = new ModelSchemaAgeGroupsSeqEnum("adult") - implicit def stringToModelSchemaAgeGroupsArrResult: String => ModelSchemaAgeGroupsArrResult = { + implicit def stringToModelSchemaAgeGroupsSeqEnum: String => ModelSchemaAgeGroupsSeqEnum = { case "baby" => Baby case "kid" => Kid case "teen" => Teen diff --git a/play-scala-generator/src/test/resources/expected_results/model/echo_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/model/echo_api_yaml.scala index 3864e544..8d73cee3 100644 --- a/play-scala-generator/src/test/resources/expected_results/model/echo_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/model/echo_api_yaml.scala @@ -8,7 +8,7 @@ package echo { - case class PostResponses200(name: PostName, year: PostName) + case class PostResponses200(name: Option[String], year: Option[String]) import play.api.libs.json._ @@ -31,7 +31,6 @@ package echo { package object echo { type Test_pathIdGetResponses200 = Null - type PostName = Option[String] import play.api.mvc.{QueryStringBindable, PathBindable} diff --git a/play-scala-generator/src/test/resources/expected_results/model/enum_yaml.scala b/play-scala-generator/src/test/resources/expected_results/model/enum_yaml.scala new file mode 100644 index 00000000..8d948b16 --- /dev/null +++ b/play-scala-generator/src/test/resources/expected_results/model/enum_yaml.scala @@ -0,0 +1,41 @@ +package enum + + + + import de.zalando.play.controllers.PlayPathBindables + + +//noinspection ScalaStyle +package yaml { + + + + case class TestGetIncludesOptionEnum(override val value: String) extends AnyVal with de.zalando.play.controllers.StringAnyVal + +} + +// should be defined after the package because of the https://issues.scala-lang.org/browse/SI-9922 + +//noinspection ScalaStyle +package object yaml { + + + object TestGetIncludesOptionEnum { + + val Option_one = new TestGetIncludesOptionEnum("option_one") + val Option_two = new TestGetIncludesOptionEnum("option_two") + + implicit def stringToTestGetIncludesOptionEnum: String => TestGetIncludesOptionEnum = { + case "option_one" => Option_one + case "option_two" => Option_two + case other => + throw new IllegalArgumentException("Couldn't parse parameter " + other) + } + } + +import play.api.mvc.{QueryStringBindable, PathBindable} + + implicit val bindable_QueryTestGetIncludesOptionEnum: QueryStringBindable[TestGetIncludesOptionEnum] = new PlayPathBindables.createEnumQueryBindable(TestGetIncludesOptionEnum.stringToTestGetIncludesOptionEnum) + implicit val bindable_OptionTestGetIncludesOptionEnumQuery: QueryStringBindable[Option[TestGetIncludesOptionEnum]] = PlayPathBindables.createOptionQueryBindable[TestGetIncludesOptionEnum] + +} \ No newline at end of file diff --git a/play-scala-generator/src/test/resources/expected_results/model/error_in_array_yaml.scala b/play-scala-generator/src/test/resources/expected_results/model/error_in_array_yaml.scala index 3f43d7d3..e12373bd 100644 --- a/play-scala-generator/src/test/resources/expected_results/model/error_in_array_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/model/error_in_array_yaml.scala @@ -8,32 +8,32 @@ package error_in_array package yaml { - case class ModelSchemaRoot(data: ModelSchemaRootData, meta: ModelSchemaRootMeta, links: ModelSchemaRootLinks) - case class Errors(errors: ErrorsErrors) - case class ErrorSourceNameClash(pointer: MetaCopyright, parameter: MetaCopyright) - case class Meta(copyright: MetaCopyright) - case class ModelSchema(name: String, sizeRegister: String, brand: String, partnerArticleModelId: BigInt, description: MetaCopyright, ageGroups: ModelSchemaAgeGroups, keywords: ModelSchemaKeywords, lengthRegister: ModelSchemaLengthRegister, silhouetteId: ModelSchemaSilhouetteId, specialDescriptions: ModelSchemaSpecialDescriptions, articleModelAttributes: ModelSchemaSpecialDescriptions) - case class Error(source: ErrorSource, code: MetaCopyright, status: MetaCopyright, detail: MetaCopyright, title: MetaCopyright) - case class Links(self: MetaCopyright, related: MetaCopyright) + case class ModelSchemaRoot(data: Option[ModelSchema], meta: Option[Meta], links: Option[Links]) + case class Errors(errors: Option[Seq[Error]]) + case class ErrorSource(pointer: Option[String], parameter: Option[String]) + case class Meta(copyright: Option[String]) + case class ModelSchema(name: String, description: Option[String], sizeRegister: String, brand: String, partnerArticleModelId: BigInt, keywords: Option[String], lengthRegister: Option[String], specialDescriptions: Option[Seq[String]], articleModelAttributes: Option[Seq[String]], silhouetteId: ModelSchemaSilhouetteId, ageGroups: Seq[ModelSchemaAgeGroupsSeqEnum]) + case class Error(code: Option[String], status: Option[String], detail: Option[String], title: Option[String], source: Option[ErrorSource]) + case class Links(self: Option[String], related: Option[String]) case class ModelSchemaSilhouetteId(override val value: String) extends AnyVal with de.zalando.play.controllers.StringAnyVal - case class ModelSchemaAgeGroupsArrResult(override val value: String) extends AnyVal with de.zalando.play.controllers.StringAnyVal + case class ModelSchemaAgeGroupsSeqEnum(override val value: String) extends AnyVal with de.zalando.play.controllers.StringAnyVal import play.api.libs.json._ import play.api.libs.functional.syntax._ import de.zalando.play.controllers.MissingDefaultReads object BodyReads extends MissingDefaultReads { implicit val LinksReads: Reads[Links] = ( - (JsPath \ "self").readNullable[String] and (JsPath \ "related").readNullable[String] + (JsPath \ "self").read[Option[String]] and (JsPath \ "related").read[Option[String]] )(Links.apply _) implicit val MetaReads: Reads[Meta] = ( - (JsPath \ "copyright").readNullable[String] + (JsPath \ "copyright").read[Option[String]] ).map(Meta.apply ) implicit val ModelSchemaReads: Reads[ModelSchema] = ( - (JsPath \ "name").read[String] and (JsPath \ "sizeRegister").read[String] and (JsPath \ "brand").read[String] and (JsPath \ "partnerArticleModelId").read[BigInt] and (JsPath \ "description").readNullable[String] and (JsPath \ "ageGroups").read[ModelSchemaAgeGroups] and (JsPath \ "keywords").readNullable[String] and (JsPath \ "lengthRegister").readNullable[String] and (JsPath \ "silhouetteId").read[ModelSchemaSilhouetteId] and (JsPath \ "specialDescriptions").readNullable[ModelSchemaSpecialDescriptionsOpt] and (JsPath \ "articleModelAttributes").readNullable[ModelSchemaSpecialDescriptionsOpt] + (JsPath \ "name").read[String] and (JsPath \ "description").read[Option[String]] and (JsPath \ "sizeRegister").read[String] and (JsPath \ "brand").read[String] and (JsPath \ "partnerArticleModelId").read[BigInt] and (JsPath \ "keywords").read[Option[String]] and (JsPath \ "lengthRegister").read[Option[String]] and (JsPath \ "specialDescriptions").read[Option[Seq[String]]] and (JsPath \ "articleModelAttributes").read[Option[Seq[String]]] and (JsPath \ "silhouetteId").read[ModelSchemaSilhouetteId] and (JsPath \ "ageGroups").read[Seq[ModelSchemaAgeGroupsSeqEnum]] )(ModelSchema.apply _) implicit val ModelSchemaRootReads: Reads[ModelSchemaRoot] = ( - (JsPath \ "data").readNullable[ModelSchema] and (JsPath \ "meta").readNullable[Meta] and (JsPath \ "links").readNullable[Links] + (JsPath \ "data").read[Option[ModelSchema]] and (JsPath \ "meta").read[Option[Meta]] and (JsPath \ "links").read[Option[Links]] )(ModelSchemaRoot.apply _) } @@ -58,16 +58,16 @@ package yaml { def writes(ss: ModelSchema) = Json.obj( "name" -> ss.name, + "description" -> ss.description, "sizeRegister" -> ss.sizeRegister, "brand" -> ss.brand, "partnerArticleModelId" -> ss.partnerArticleModelId, - "description" -> ss.description, - "ageGroups" -> ss.ageGroups, "keywords" -> ss.keywords, "lengthRegister" -> ss.lengthRegister, - "silhouetteId" -> ss.silhouetteId, "specialDescriptions" -> ss.specialDescriptions, - "articleModelAttributes" -> ss.articleModelAttributes + "articleModelAttributes" -> ss.articleModelAttributes, + "silhouetteId" -> ss.silhouetteId, + "ageGroups" -> ss.ageGroups ) } implicit val ModelSchemaRootWrites: Writes[ModelSchemaRoot] = new Writes[ModelSchemaRoot] { @@ -86,18 +86,6 @@ package yaml { //noinspection ScalaStyle package object yaml { - type ModelSchemaSpecialDescriptionsOpt = Seq[String] - type MetaCopyright = Option[String] - type ModelSchemaKeywords = Option[String] - type ModelSchemaSpecialDescriptions = Option[ModelSchemaSpecialDescriptionsOpt] - type ErrorsErrorsOpt = Seq[Error] - type ModelSchemaRootData = Option[ModelSchema] - type ErrorSource = Option[ErrorSourceNameClash] - type ModelSchemaRootLinks = Option[Links] - type ModelSchemaLengthRegister = Option[String] - type ErrorsErrors = Option[ErrorsErrorsOpt] - type ModelSchemaAgeGroups = Seq[ModelSchemaAgeGroupsArrResult] - type ModelSchemaRootMeta = Option[Meta] object ModelSchemaSilhouetteId { @@ -293,14 +281,14 @@ package object yaml { throw new IllegalArgumentException("Couldn't parse parameter " + other) } } - object ModelSchemaAgeGroupsArrResult { + object ModelSchemaAgeGroupsSeqEnum { - val Baby = new ModelSchemaAgeGroupsArrResult("baby") - val Kid = new ModelSchemaAgeGroupsArrResult("kid") - val Teen = new ModelSchemaAgeGroupsArrResult("teen") - val Adult = new ModelSchemaAgeGroupsArrResult("adult") + val Baby = new ModelSchemaAgeGroupsSeqEnum("baby") + val Kid = new ModelSchemaAgeGroupsSeqEnum("kid") + val Teen = new ModelSchemaAgeGroupsSeqEnum("teen") + val Adult = new ModelSchemaAgeGroupsSeqEnum("adult") - implicit def stringToModelSchemaAgeGroupsArrResult: String => ModelSchemaAgeGroupsArrResult = { + implicit def stringToModelSchemaAgeGroupsSeqEnum: String => ModelSchemaAgeGroupsSeqEnum = { case "baby" => Baby case "kid" => Kid case "teen" => Teen diff --git a/play-scala-generator/src/test/resources/expected_results/model/expanded_polymorphism_yaml.scala b/play-scala-generator/src/test/resources/expected_results/model/expanded_polymorphism_yaml.scala index 058a788b..41640542 100644 --- a/play-scala-generator/src/test/resources/expected_results/model/expanded_polymorphism_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/model/expanded_polymorphism_yaml.scala @@ -9,8 +9,8 @@ package expanded { - case class NewPet(name: String, tag: NewPetTag) - case class Pet(name: String, tag: NewPetTag, id: Long) + case class NewPet(name: String, tag: Option[String]) + case class Pet(name: String, tag: Option[String], id: Long) case class Error(code: Int, message: String) @@ -19,7 +19,7 @@ package expanded { import de.zalando.play.controllers.MissingDefaultReads object BodyReads extends MissingDefaultReads { implicit val NewPetReads: Reads[NewPet] = ( - (JsPath \ "name").read[String] and (JsPath \ "tag").readNullable[String] + (JsPath \ "name").read[String] and (JsPath \ "tag").read[Option[String]] )(NewPet.apply _) } @@ -51,17 +51,12 @@ package expanded { package object expanded { type PetsIdDeleteResponses204 = Null - type PetsGetLimit = Option[Int] - type PetsGetTagsOpt = ArrayWrapper[String] - type NewPetTag = Option[String] - type PetsGetResponses200 = Seq[Pet] - type PetsGetTags = Option[PetsGetTagsOpt] import play.api.mvc.{QueryStringBindable, PathBindable} implicit val bindable_OptionIntQuery: QueryStringBindable[Option[Int]] = PlayPathBindables.createOptionQueryBindable[Int] implicit val bindable_ArrayWrapperStringQuery: QueryStringBindable[ArrayWrapper[String]] = PlayPathBindables.createArrayWrapperQueryBindable[String]("csv") - implicit val bindable_OptionPetsGetTagsOptQuery: QueryStringBindable[Option[PetsGetTagsOpt]] = PlayPathBindables.createOptionQueryBindable[PetsGetTagsOpt] + implicit val bindable_OptionArrayWrapperQuery: QueryStringBindable[Option[ArrayWrapper]] = PlayPathBindables.createOptionQueryBindable[ArrayWrapper] } \ No newline at end of file diff --git a/play-scala-generator/src/test/resources/expected_results/model/foodpanda_yaml.scala b/play-scala-generator/src/test/resources/expected_results/model/foodpanda_yaml.scala new file mode 100644 index 00000000..67a1ee3d --- /dev/null +++ b/play-scala-generator/src/test/resources/expected_results/model/foodpanda_yaml.scala @@ -0,0 +1,48 @@ +package com.foodpanda.popsey + + + + +//noinspection ScalaStyle +package api { + + + case class VendorsResponse(total_hits: Int, vendors: Option[Seq[Vendor]]) + case class Location(latitude: Float, longitude: Float) + case class Vendor(id: Long, location: Option[Location]) + case class VendorQuery(vendor_codes: Option[Seq[String]], includes: Option[VendorQueryIncludesOptionEnum]) + + case class VendorQueryIncludesOptionEnum(override val value: String) extends AnyVal with de.zalando.play.controllers.StringAnyVal + + import play.api.libs.json._ + import play.api.libs.functional.syntax._ + import de.zalando.play.controllers.MissingDefaultReads + object BodyReads extends MissingDefaultReads { + implicit val VendorQueryReads: Reads[VendorQuery] = ( + (JsPath \ "vendor_codes").read[Option[Seq[String]]] and (JsPath \ "includes").read[Option[VendorQueryIncludesOptionEnum]] + )(VendorQuery.apply _) + } + +} + +// should be defined after the package because of the https://issues.scala-lang.org/browse/SI-9922 + +//noinspection ScalaStyle +package object api { + + + object VendorQueryIncludesOptionEnum { + + val Menus = new VendorQueryIncludesOptionEnum("menus") + val Payments = new VendorQueryIncludesOptionEnum("payments") + + implicit def stringToVendorQueryIncludesOptionEnum: String => VendorQueryIncludesOptionEnum = { + case "menus" => Menus + case "payments" => Payments + case other => + throw new IllegalArgumentException("Couldn't parse parameter " + other) + } + } + + +} \ No newline at end of file diff --git a/play-scala-generator/src/test/resources/expected_results/model/form_data_yaml.scala b/play-scala-generator/src/test/resources/expected_results/model/form_data_yaml.scala index 1badb127..0f0aea31 100644 --- a/play-scala-generator/src/test/resources/expected_results/model/form_data_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/model/form_data_yaml.scala @@ -1,8 +1,8 @@ package form_data - import java.io.File import scala.math.BigInt + import java.io.File import de.zalando.play.controllers.PlayPathBindables @@ -11,8 +11,8 @@ package form_data package yaml { - case class MultipartPostResponses200(name: BothPostResponses200Name, year: BothPostYear, fileSize: BothPostYear, fileName: BothPostResponses200Name) - case class BothPostResponses200(name: BothPostResponses200Name, year: BothPostYear, avatarSize: BothPostYear, ringtoneSize: BothPostYear) + case class MultipartPostResponses200(name: Option[String], year: Option[BigInt], fileSize: Option[BigInt], fileName: Option[String]) + case class BothPostResponses200(name: Option[String], year: Option[BigInt], avatarSize: Option[BigInt], ringtoneSize: Option[BigInt]) import play.api.libs.json._ @@ -45,9 +45,6 @@ package yaml { //noinspection ScalaStyle package object yaml { - type MultipartPostAvatar = Option[File] - type BothPostResponses200Name = Option[String] - type BothPostYear = Option[BigInt] import play.api.mvc.{QueryStringBindable, PathBindable} diff --git a/play-scala-generator/src/test/resources/expected_results/model/full_petstore_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/model/full_petstore_api_yaml.scala index 0ccd0ec1..1920eee6 100644 --- a/play-scala-generator/src/test/resources/expected_results/model/full_petstore_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/model/full_petstore_api_yaml.scala @@ -1,8 +1,8 @@ package full.petstore.api - import de.zalando.play.controllers.ArrayWrapper import java.time.ZonedDateTime + import de.zalando.play.controllers.ArrayWrapper import de.zalando.play.controllers.PlayPathBindables @@ -11,10 +11,10 @@ package full.petstore.api package yaml { - case class User(email: OrderStatus, username: OrderStatus, userStatus: OrderQuantity, lastName: OrderStatus, firstName: OrderStatus, id: OrderPetId, phone: OrderStatus, password: OrderStatus) - case class Order(shipDate: OrderShipDate, quantity: OrderQuantity, petId: OrderPetId, id: OrderPetId, complete: OrderComplete, status: OrderStatus) - case class Tag(id: OrderPetId, name: OrderStatus) - case class Pet(name: String, tags: PetTags, photoUrls: PetPhotoUrls, id: OrderPetId, status: OrderStatus, category: PetCategory) + case class User(email: Option[String], username: Option[String], userStatus: Option[Int], lastName: Option[String], firstName: Option[String], id: Option[Long], phone: Option[String], password: Option[String]) + case class Order(shipDate: Option[ZonedDateTime], quantity: Option[Int], petId: Option[Long], id: Option[Long], complete: Option[Boolean], status: Option[String]) + case class Tag(id: Option[Long], name: Option[String]) + case class Pet(name: String, photoUrls: Seq[String], id: Option[Long], status: Option[String], tags: Option[Seq[Tag]], category: Option[Tag]) import play.api.libs.json._ @@ -22,16 +22,16 @@ package yaml { import de.zalando.play.controllers.MissingDefaultReads object BodyReads extends MissingDefaultReads { implicit val TagReads: Reads[Tag] = ( - (JsPath \ "id").readNullable[Long] and (JsPath \ "name").readNullable[String] + (JsPath \ "id").read[Option[Long]] and (JsPath \ "name").read[Option[String]] )(Tag.apply _) implicit val PetReads: Reads[Pet] = ( - (JsPath \ "name").read[String] and (JsPath \ "tags").readNullable[PetTagsOpt] and (JsPath \ "photoUrls").read[PetPhotoUrls] and (JsPath \ "id").readNullable[Long] and (JsPath \ "status").readNullable[String] and (JsPath \ "category").readNullable[Tag] + (JsPath \ "name").read[String] and (JsPath \ "photoUrls").read[Seq[String]] and (JsPath \ "id").read[Option[Long]] and (JsPath \ "status").read[Option[String]] and (JsPath \ "tags").read[Option[Seq[Tag]]] and (JsPath \ "category").read[Option[Tag]] )(Pet.apply _) implicit val UserReads: Reads[User] = ( - (JsPath \ "email").readNullable[String] and (JsPath \ "username").readNullable[String] and (JsPath \ "userStatus").readNullable[Int] and (JsPath \ "lastName").readNullable[String] and (JsPath \ "firstName").readNullable[String] and (JsPath \ "id").readNullable[Long] and (JsPath \ "phone").readNullable[String] and (JsPath \ "password").readNullable[String] + (JsPath \ "email").read[Option[String]] and (JsPath \ "username").read[Option[String]] and (JsPath \ "userStatus").read[Option[Int]] and (JsPath \ "lastName").read[Option[String]] and (JsPath \ "firstName").read[Option[String]] and (JsPath \ "id").read[Option[Long]] and (JsPath \ "phone").read[Option[String]] and (JsPath \ "password").read[Option[String]] )(User.apply _) implicit val OrderReads: Reads[Order] = ( - (JsPath \ "shipDate").readNullable[ZonedDateTime] and (JsPath \ "quantity").readNullable[Int] and (JsPath \ "petId").readNullable[Long] and (JsPath \ "id").readNullable[Long] and (JsPath \ "complete").readNullable[Boolean] and (JsPath \ "status").readNullable[String] + (JsPath \ "shipDate").read[Option[ZonedDateTime]] and (JsPath \ "quantity").read[Option[Int]] and (JsPath \ "petId").read[Option[Long]] and (JsPath \ "id").read[Option[Long]] and (JsPath \ "complete").read[Option[Boolean]] and (JsPath \ "status").read[Option[String]] )(Order.apply _) } @@ -74,10 +74,10 @@ package yaml { def writes(ss: Pet) = Json.obj( "name" -> ss.name, - "tags" -> ss.tags, "photoUrls" -> ss.photoUrls, "id" -> ss.id, "status" -> ss.status, + "tags" -> ss.tags, "category" -> ss.category ) } @@ -90,29 +90,12 @@ package yaml { package object yaml { type UsersCreateWithListPostResponsesDefault = Null - type OrderStatus = Option[String] - type PetsFindByStatusGetStatusOpt = ArrayWrapper[String] - type UsersCreateWithListPostBodyOpt = Seq[User] - type OrderPetId = Option[Long] - type PetsFindByStatusGetResponses200 = Seq[Pet] - type PetsPostBody = Option[Pet] - type OrderShipDate = Option[ZonedDateTime] - type UsersUsernamePutBody = Option[User] - type StoresOrderPostBody = Option[Order] - type OrderComplete = Option[Boolean] - type PetTags = Option[PetTagsOpt] - type OrderQuantity = Option[Int] - type PetPhotoUrls = Seq[String] - type UsersCreateWithListPostBody = Option[UsersCreateWithListPostBodyOpt] - type PetsFindByStatusGetStatus = Option[PetsFindByStatusGetStatusOpt] - type PetCategory = Option[Tag] - type PetTagsOpt = Seq[Tag] import play.api.mvc.{QueryStringBindable, PathBindable} implicit val bindable_OptionStringQuery: QueryStringBindable[Option[String]] = PlayPathBindables.createOptionQueryBindable[String] implicit val bindable_ArrayWrapperStringQuery: QueryStringBindable[ArrayWrapper[String]] = PlayPathBindables.createArrayWrapperQueryBindable[String]("multi") - implicit val bindable_OptionPetsFindByStatusGetStatusOptQuery: QueryStringBindable[Option[PetsFindByStatusGetStatusOpt]] = PlayPathBindables.createOptionQueryBindable[PetsFindByStatusGetStatusOpt] + implicit val bindable_OptionArrayWrapperQuery: QueryStringBindable[Option[ArrayWrapper]] = PlayPathBindables.createOptionQueryBindable[ArrayWrapper] } \ No newline at end of file diff --git a/play-scala-generator/src/test/resources/expected_results/model/hackweek_yaml.scala b/play-scala-generator/src/test/resources/expected_results/model/hackweek_yaml.scala index 0513a2df..64c34db0 100644 --- a/play-scala-generator/src/test/resources/expected_results/model/hackweek_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/model/hackweek_yaml.scala @@ -8,32 +8,32 @@ package hackweek package yaml { - case class ModelSchemaRoot(data: ModelSchemaRootData, meta: ModelSchemaRootMeta, links: ModelSchemaRootLinks) - case class Errors(errors: ErrorsErrors) - case class ErrorSourceNameClash(pointer: MetaCopyright, parameter: MetaCopyright) - case class Meta(copyright: MetaCopyright) - case class ModelSchema(name: String, sizeRegister: String, brand: String, partnerArticleModelId: BigInt, description: MetaCopyright, ageGroups: ModelSchemaAgeGroups, keywords: ModelSchemaKeywords, lengthRegister: ModelSchemaLengthRegister, silhouetteId: ModelSchemaSilhouetteId, specialDescriptions: ModelSchemaSpecialDescriptions, articleModelAttributes: ModelSchemaSpecialDescriptions) - case class Error(source: ErrorSource, code: MetaCopyright, status: MetaCopyright, detail: MetaCopyright, title: MetaCopyright) - case class Links(self: MetaCopyright, related: MetaCopyright) + case class ModelSchemaRoot(data: Option[ModelSchema], meta: Option[Meta], links: Option[Links]) + case class Errors(errors: Option[Seq[Error]]) + case class ErrorSource(pointer: Option[String], parameter: Option[String]) + case class Meta(copyright: Option[String]) + case class ModelSchema(name: String, description: Option[String], sizeRegister: String, brand: String, partnerArticleModelId: BigInt, keywords: Option[String], lengthRegister: Option[String], specialDescriptions: Option[Seq[String]], articleModelAttributes: Option[Seq[String]], silhouetteId: ModelSchemaSilhouetteId, ageGroups: Seq[ModelSchemaAgeGroupsSeqEnum]) + case class Error(code: Option[String], status: Option[String], detail: Option[String], title: Option[String], source: Option[ErrorSource]) + case class Links(self: Option[String], related: Option[String]) case class ModelSchemaSilhouetteId(override val value: String) extends AnyVal with de.zalando.play.controllers.StringAnyVal - case class ModelSchemaAgeGroupsArrResult(override val value: String) extends AnyVal with de.zalando.play.controllers.StringAnyVal + case class ModelSchemaAgeGroupsSeqEnum(override val value: String) extends AnyVal with de.zalando.play.controllers.StringAnyVal import play.api.libs.json._ import play.api.libs.functional.syntax._ import de.zalando.play.controllers.MissingDefaultReads object BodyReads extends MissingDefaultReads { implicit val LinksReads: Reads[Links] = ( - (JsPath \ "self").readNullable[String] and (JsPath \ "related").readNullable[String] + (JsPath \ "self").read[Option[String]] and (JsPath \ "related").read[Option[String]] )(Links.apply _) implicit val MetaReads: Reads[Meta] = ( - (JsPath \ "copyright").readNullable[String] + (JsPath \ "copyright").read[Option[String]] ).map(Meta.apply ) implicit val ModelSchemaReads: Reads[ModelSchema] = ( - (JsPath \ "name").read[String] and (JsPath \ "sizeRegister").read[String] and (JsPath \ "brand").read[String] and (JsPath \ "partnerArticleModelId").read[BigInt] and (JsPath \ "description").readNullable[String] and (JsPath \ "ageGroups").read[ModelSchemaAgeGroups] and (JsPath \ "keywords").readNullable[String] and (JsPath \ "lengthRegister").readNullable[String] and (JsPath \ "silhouetteId").read[ModelSchemaSilhouetteId] and (JsPath \ "specialDescriptions").readNullable[ModelSchemaSpecialDescriptionsOpt] and (JsPath \ "articleModelAttributes").readNullable[ModelSchemaSpecialDescriptionsOpt] + (JsPath \ "name").read[String] and (JsPath \ "description").read[Option[String]] and (JsPath \ "sizeRegister").read[String] and (JsPath \ "brand").read[String] and (JsPath \ "partnerArticleModelId").read[BigInt] and (JsPath \ "keywords").read[Option[String]] and (JsPath \ "lengthRegister").read[Option[String]] and (JsPath \ "specialDescriptions").read[Option[Seq[String]]] and (JsPath \ "articleModelAttributes").read[Option[Seq[String]]] and (JsPath \ "silhouetteId").read[ModelSchemaSilhouetteId] and (JsPath \ "ageGroups").read[Seq[ModelSchemaAgeGroupsSeqEnum]] )(ModelSchema.apply _) implicit val ModelSchemaRootReads: Reads[ModelSchemaRoot] = ( - (JsPath \ "data").readNullable[ModelSchema] and (JsPath \ "meta").readNullable[Meta] and (JsPath \ "links").readNullable[Links] + (JsPath \ "data").read[Option[ModelSchema]] and (JsPath \ "meta").read[Option[Meta]] and (JsPath \ "links").read[Option[Links]] )(ModelSchemaRoot.apply _) } @@ -58,16 +58,16 @@ package yaml { def writes(ss: ModelSchema) = Json.obj( "name" -> ss.name, + "description" -> ss.description, "sizeRegister" -> ss.sizeRegister, "brand" -> ss.brand, "partnerArticleModelId" -> ss.partnerArticleModelId, - "description" -> ss.description, - "ageGroups" -> ss.ageGroups, "keywords" -> ss.keywords, "lengthRegister" -> ss.lengthRegister, - "silhouetteId" -> ss.silhouetteId, "specialDescriptions" -> ss.specialDescriptions, - "articleModelAttributes" -> ss.articleModelAttributes + "articleModelAttributes" -> ss.articleModelAttributes, + "silhouetteId" -> ss.silhouetteId, + "ageGroups" -> ss.ageGroups ) } implicit val ModelSchemaRootWrites: Writes[ModelSchemaRoot] = new Writes[ModelSchemaRoot] { @@ -86,18 +86,6 @@ package yaml { //noinspection ScalaStyle package object yaml { - type ModelSchemaSpecialDescriptionsOpt = Seq[String] - type MetaCopyright = Option[String] - type ModelSchemaKeywords = Option[String] - type ModelSchemaSpecialDescriptions = Option[ModelSchemaSpecialDescriptionsOpt] - type ErrorsErrorsOpt = Seq[Error] - type ModelSchemaRootData = Option[ModelSchema] - type ErrorSource = Option[ErrorSourceNameClash] - type ModelSchemaRootLinks = Option[Links] - type ModelSchemaLengthRegister = Option[String] - type ErrorsErrors = Option[ErrorsErrorsOpt] - type ModelSchemaAgeGroups = Seq[ModelSchemaAgeGroupsArrResult] - type ModelSchemaRootMeta = Option[Meta] object ModelSchemaSilhouetteId { @@ -293,14 +281,14 @@ package object yaml { throw new IllegalArgumentException("Couldn't parse parameter " + other) } } - object ModelSchemaAgeGroupsArrResult { + object ModelSchemaAgeGroupsSeqEnum { - val Baby = new ModelSchemaAgeGroupsArrResult("baby") - val Kid = new ModelSchemaAgeGroupsArrResult("kid") - val Teen = new ModelSchemaAgeGroupsArrResult("teen") - val Adult = new ModelSchemaAgeGroupsArrResult("adult") + val Baby = new ModelSchemaAgeGroupsSeqEnum("baby") + val Kid = new ModelSchemaAgeGroupsSeqEnum("kid") + val Teen = new ModelSchemaAgeGroupsSeqEnum("teen") + val Adult = new ModelSchemaAgeGroupsSeqEnum("adult") - implicit def stringToModelSchemaAgeGroupsArrResult: String => ModelSchemaAgeGroupsArrResult = { + implicit def stringToModelSchemaAgeGroupsSeqEnum: String => ModelSchemaAgeGroupsSeqEnum = { case "baby" => Baby case "kid" => Kid case "teen" => Teen diff --git a/play-scala-generator/src/test/resources/expected_results/model/heroku_petstore_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/model/heroku_petstore_api_yaml.scala index fbefe3f5..75d32aab 100644 --- a/play-scala-generator/src/test/resources/expected_results/model/heroku_petstore_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/model/heroku_petstore_api_yaml.scala @@ -10,7 +10,7 @@ package heroku.petstore.api package yaml { - case class Pet(name: PetName, birthday: PetBirthday) + case class Pet(name: Option[String], birthday: Option[Int]) import play.api.libs.json._ @@ -18,7 +18,7 @@ package yaml { import de.zalando.play.controllers.MissingDefaultReads object BodyReads extends MissingDefaultReads { implicit val PetReads: Reads[Pet] = ( - (JsPath \ "name").readNullable[String] and (JsPath \ "birthday").readNullable[Int] + (JsPath \ "name").read[Option[String]] and (JsPath \ "birthday").read[Option[Int]] )(Pet.apply _) } @@ -41,11 +41,7 @@ package yaml { //noinspection ScalaStyle package object yaml { - type PetName = Option[String] - type PetBirthday = Option[Int] type PostResponses200 = Null - type PutPet = Option[Pet] - type GetResponses200 = Seq[Pet] import play.api.mvc.{QueryStringBindable, PathBindable} diff --git a/play-scala-generator/src/test/resources/expected_results/model/instagram_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/model/instagram_api_yaml.scala index 53ba6824..da83d8b8 100644 --- a/play-scala-generator/src/test/resources/expected_results/model/instagram_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/model/instagram_api_yaml.scala @@ -11,36 +11,36 @@ package instagram.api package yaml { - case class UsersSelfFeedGetResponses200(data: UsersSelfFeedGetResponses200Data) - case class MediaMedia_idCommentsDeleteResponses200(meta: MediaMedia_idCommentsDeleteResponses200Meta, data: MediaFilter) - case class MediaSearchGetResponses200DataOptArrResult(location: MediaLocation, created_time: MediaId, comments_esc: MediaComments_esc, tags: MediaTags, users_in_photo: MediaUsers_in_photo, filter: MediaFilter, likes: MediaLikes, id: MediaId, videos: MediaVideos, `type`: MediaFilter, images: MediaImages, user: CommentFrom, distance: LocationLatitude) - case class UsersUser_idFollowsGetResponses200(data: MediaUsers_in_photo) - case class UserCountsOpt(media: MediaId, follows: MediaId, follwed_by: MediaId) - case class User(website: MediaFilter, profile_picture: MediaFilter, username: MediaFilter, full_name: MediaFilter, bio: MediaFilter, id: MediaId, counts: UserCounts) - case class TagsTag_nameMediaRecentGetResponses200(data: MediaTags) - case class Image(width: MediaId, height: MediaId, url: MediaFilter) - case class UsersSelfRequested_byGetResponses200(meta: TagsSearchGetResponses200Meta, data: MediaUsers_in_photo) - case class Tag(media_count: MediaId, name: MediaFilter) - case class UsersSelfRequested_byGetResponses200MetaOpt(code: MediaId) - case class LocationsLocation_idGetResponses200(data: MediaLocation) - case class Comment(id: MediaFilter, created_time: MediaFilter, text: MediaFilter, from: CommentFrom) - case class Media(location: MediaLocation, created_time: MediaId, comments_esc: MediaComments_esc, tags: MediaTags, users_in_photo: MediaUsers_in_photo, filter: MediaFilter, likes: MediaLikes, id: MediaId, videos: MediaVideos, `type`: MediaFilter, images: MediaImages, user: CommentFrom) - case class MediaMedia_idLikesGetResponses200(meta: MediaMedia_idCommentsDeleteResponses200Meta, data: MediaMedia_idLikesGetResponses200Data) - case class MediaMedia_idLikesGetResponses200MetaOpt(code: LocationLatitude) - case class MediaSearchGetResponses200(data: MediaSearchGetResponses200Data) - case class TagsSearchGetResponses200(meta: TagsSearchGetResponses200Meta, data: MediaTags) - case class Like(first_name: MediaFilter, id: MediaFilter, last_name: MediaFilter, `type`: MediaFilter, user_name: MediaFilter) - case class MediaComments_Opt(count: MediaId, data: MediaComments_Data) - case class UsersUser_idGetResponses200(data: UsersUser_idGetResponses200Data) - case class MediaMedia_idCommentsGetResponses200(meta: MediaMedia_idCommentsDeleteResponses200Meta, data: MediaComments_Data) - case class MediaVideosOpt(low_resolution: MediaVideosLow_resolution, standard_resolution: MediaVideosLow_resolution) - case class Location(id: MediaFilter, name: MediaFilter, latitude: LocationLatitude, longitude: LocationLatitude) - case class MiniProfile(user_name: MediaFilter, full_name: MediaFilter, id: MediaId, profile_picture: MediaFilter) - case class MediaLikesOpt(count: MediaId, data: MediaUsers_in_photo) - case class LocationsSearchGetResponses200(data: LocationsSearchGetResponses200Data) - case class MediaImagesOpt(low_resolution: MediaVideosLow_resolution, thumbnail: MediaVideosLow_resolution, standard_resolution: MediaVideosLow_resolution) - - case class UsersUser_idRelationshipPostActionOpt(override val value: String) extends AnyVal with de.zalando.play.controllers.StringAnyVal + case class UserCountsOptionCounts(media: Option[BigInt], follows: Option[BigInt], follwed_by: Option[BigInt]) + case class UsersSelfFeedGetResponses200(data: Option[Seq[Media]]) + case class MediaSearchGetResponses200DataOptionSeqData(created_time: Option[BigInt], filter: Option[String], id: Option[BigInt], `type`: Option[String], location: Option[Location], comments_esc: Option[MediaComments_OptionComments_esc], tags: Option[Seq[Tag]], users_in_photo: Option[Seq[MiniProfile]], likes: Option[MediaLikesOptionLikes], videos: Option[MediaVideosOptionVideos], images: Option[MediaImagesOptionImages], user: Option[MiniProfile], distance: Option[BigDecimal]) + case class TagsSearchGetResponses200MetaOptionMeta(code: Option[BigInt]) + case class MediaMedia_idCommentsDeleteResponses200(data: Option[String], meta: Option[MediaMedia_idCommentsDeleteResponses200MetaOptionMeta]) + case class UsersUser_idFollowsGetResponses200(data: Option[Seq[MiniProfile]]) + case class User(website: Option[String], profile_picture: Option[String], username: Option[String], full_name: Option[String], bio: Option[String], id: Option[BigInt], counts: Option[UserCountsOptionCounts]) + case class TagsTag_nameMediaRecentGetResponses200(data: Option[Seq[Tag]]) + case class Image(width: Option[BigInt], height: Option[BigInt], url: Option[String]) + case class UsersSelfRequested_byGetResponses200(meta: Option[TagsSearchGetResponses200MetaOptionMeta], data: Option[Seq[MiniProfile]]) + case class MediaMedia_idCommentsDeleteResponses200MetaOptionMeta(code: Option[BigDecimal]) + case class Tag(media_count: Option[BigInt], name: Option[String]) + case class LocationsLocation_idGetResponses200(data: Option[Location]) + case class Comment(id: Option[String], created_time: Option[String], text: Option[String], from: Option[MiniProfile]) + case class Media(created_time: Option[BigInt], filter: Option[String], id: Option[BigInt], `type`: Option[String], location: Option[Location], comments_esc: Option[MediaComments_OptionComments_esc], tags: Option[Seq[Tag]], users_in_photo: Option[Seq[MiniProfile]], likes: Option[MediaLikesOptionLikes], videos: Option[MediaVideosOptionVideos], images: Option[MediaImagesOptionImages], user: Option[MiniProfile]) + case class MediaMedia_idLikesGetResponses200(meta: Option[MediaMedia_idCommentsDeleteResponses200MetaOptionMeta], data: Option[Seq[Like]]) + case class MediaSearchGetResponses200(data: Option[Seq[MediaSearchGetResponses200DataOptionSeqData]]) + case class TagsSearchGetResponses200(meta: Option[TagsSearchGetResponses200MetaOptionMeta], data: Option[Seq[Tag]]) + case class Like(first_name: Option[String], id: Option[String], last_name: Option[String], `type`: Option[String], user_name: Option[String]) + case class UsersUser_idGetResponses200(data: Option[User]) + case class MediaMedia_idCommentsGetResponses200(meta: Option[MediaMedia_idCommentsDeleteResponses200MetaOptionMeta], data: Option[Seq[Comment]]) + case class MediaLikesOptionLikes(count: Option[BigInt], data: Option[Seq[MiniProfile]]) + case class Location(id: Option[String], name: Option[String], latitude: Option[BigDecimal], longitude: Option[BigDecimal]) + case class MediaComments_OptionComments_esc(count: Option[BigInt], data: Option[Seq[Comment]]) + case class MiniProfile(user_name: Option[String], full_name: Option[String], id: Option[BigInt], profile_picture: Option[String]) + case class MediaVideosOptionVideos(low_resolution: Option[Image], standard_resolution: Option[Image]) + case class MediaImagesOptionImages(low_resolution: Option[Image], thumbnail: Option[Image], standard_resolution: Option[Image]) + case class LocationsSearchGetResponses200(data: Option[Seq[Location]]) + + case class UsersUser_idRelationshipPostActionOptionEnum(override val value: String) extends AnyVal with de.zalando.play.controllers.StringAnyVal import play.api.libs.json._ import play.api.libs.functional.syntax._ @@ -130,16 +130,16 @@ package yaml { implicit val MediaWrites: Writes[Media] = new Writes[Media] { def writes(ss: Media) = Json.obj( - "location" -> ss.location, "created_time" -> ss.created_time, + "filter" -> ss.filter, + "id" -> ss.id, + "`type`" -> ss.`type`, + "location" -> ss.location, "comments_esc" -> ss.comments_esc, "tags" -> ss.tags, "users_in_photo" -> ss.users_in_photo, - "filter" -> ss.filter, "likes" -> ss.likes, - "id" -> ss.id, "videos" -> ss.videos, - "`type`" -> ss.`type`, "images" -> ss.images, "user" -> ss.user ) @@ -183,8 +183,8 @@ package yaml { implicit val MediaMedia_idCommentsDeleteResponses200Writes: Writes[MediaMedia_idCommentsDeleteResponses200] = new Writes[MediaMedia_idCommentsDeleteResponses200] { def writes(ss: MediaMedia_idCommentsDeleteResponses200) = Json.obj( - "meta" -> ss.meta, - "data" -> ss.data + "data" -> ss.data, + "meta" -> ss.meta ) } implicit val LikeWrites: Writes[Like] = new Writes[Like] { @@ -212,46 +212,17 @@ package yaml { //noinspection ScalaStyle package object yaml { - type TagsSearchGetResponses200Meta = Option[UsersSelfRequested_byGetResponses200MetaOpt] - type MediaFilter = Option[String] - type MediaMedia_idCommentsDeleteResponses200Meta = Option[MediaMedia_idLikesGetResponses200MetaOpt] - type UsersSelfFeedGetResponses200Data = Option[UsersSelfFeedGetResponses200DataOpt] - type MediaTags = Option[MediaTagsOpt] - type MediaMedia_idLikesGetResponses200Data = Option[MediaMedia_idLikesGetResponses200DataOpt] - type MediaId = Option[BigInt] - type MediaVideosLow_resolution = Option[Image] - type UsersUser_idRelationshipPostAction = Option[UsersUser_idRelationshipPostActionOpt] - type MediaTagsOpt = Seq[Tag] - type MediaImages = Option[MediaImagesOpt] - type MediaLikes = Option[MediaLikesOpt] - type MediaUsers_in_photoOpt = Seq[MiniProfile] - type MediaMedia_idLikesGetResponses200DataOpt = Seq[Like] - type LocationsSearchGetResponses200Data = Option[LocationsSearchGetResponses200DataOpt] - type MediaComments_esc = Option[MediaComments_Opt] - type MediaSearchGetResponses200DataOpt = Seq[MediaSearchGetResponses200DataOptArrResult] - type CommentFrom = Option[MiniProfile] - type LocationsSearchGetResponses200DataOpt = Seq[Location] - type MediaSearchGetResponses200Data = Option[MediaSearchGetResponses200DataOpt] - type UsersSelfFeedGetResponses200DataOpt = Seq[Media] - type MediaComments_DataOpt = Seq[Comment] - type UsersUser_idGetResponses200Data = Option[User] - type MediaVideos = Option[MediaVideosOpt] - type MediaLocation = Option[Location] type GeographiesGeo_idMediaRecentGetResponses200 = Null - type MediaComments_Data = Option[MediaComments_DataOpt] - type MediaUsers_in_photo = Option[MediaUsers_in_photoOpt] - type LocationLatitude = Option[BigDecimal] - type UserCounts = Option[UserCountsOpt] - object UsersUser_idRelationshipPostActionOpt { + object UsersUser_idRelationshipPostActionOptionEnum { - val Unfollow = new UsersUser_idRelationshipPostActionOpt("unfollow") - val Approve = new UsersUser_idRelationshipPostActionOpt("approve") - val Block = new UsersUser_idRelationshipPostActionOpt("block") - val Unblock = new UsersUser_idRelationshipPostActionOpt("unblock") - val Follow = new UsersUser_idRelationshipPostActionOpt("follow") + val Unfollow = new UsersUser_idRelationshipPostActionOptionEnum("unfollow") + val Approve = new UsersUser_idRelationshipPostActionOptionEnum("approve") + val Block = new UsersUser_idRelationshipPostActionOptionEnum("block") + val Unblock = new UsersUser_idRelationshipPostActionOptionEnum("unblock") + val Follow = new UsersUser_idRelationshipPostActionOptionEnum("follow") - implicit def stringToUsersUser_idRelationshipPostActionOpt: String => UsersUser_idRelationshipPostActionOpt = { + implicit def stringToUsersUser_idRelationshipPostActionOptionEnum: String => UsersUser_idRelationshipPostActionOptionEnum = { case "unfollow" => Unfollow case "approve" => Approve case "block" => Block diff --git a/play-scala-generator/src/test/resources/expected_results/model/nakadi_yaml.scala b/play-scala-generator/src/test/resources/expected_results/model/nakadi_yaml.scala index a59736f4..3b3a1703 100644 --- a/play-scala-generator/src/test/resources/expected_results/model/nakadi_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/model/nakadi_yaml.scala @@ -10,25 +10,25 @@ package nakadi package yaml { - case class EventMetaDataNameClash(root_id: EventMetaDataParent_id, parent_id: EventMetaDataParent_id, scopes: EventMetaDataScopes, id: EventMetaDataParent_id, created: EventEvent_type) + case class EventMetaData(root_id: Option[UUID], parent_id: Option[UUID], scopes: Option[Seq[String]], id: Option[UUID], created: Option[String]) case class Topic(name: String) - case class Metrics(name: EventEvent_type) - case class Event(event_type: EventEvent_type, partitioning_key: EventEvent_type, metadata: EventMetadata) + case class Metrics(name: Option[String]) + case class Event(event_type: Option[String], partitioning_key: Option[String], metadata: Option[EventMetaData]) case class Cursor(partition: String, offset: String) case class Problem(detail: String) case class TopicPartition(partition: String, oldest_available_offset: String, newest_available_offset: String) - case class SimpleStreamEvent(cursor: Cursor, events: SimpleStreamEventEvents) + case class SimpleStreamEvent(cursor: Cursor, events: Option[Seq[Event]]) import play.api.libs.json._ import play.api.libs.functional.syntax._ import de.zalando.play.controllers.MissingDefaultReads object BodyReads extends MissingDefaultReads { - implicit val EventMetaDataNameClashReads: Reads[EventMetaDataNameClash] = ( - (JsPath \ "root_id").readNullable[UUID] and (JsPath \ "parent_id").readNullable[UUID] and (JsPath \ "scopes").readNullable[EventMetaDataScopesOpt] and (JsPath \ "id").readNullable[UUID] and (JsPath \ "created").readNullable[String] - )(EventMetaDataNameClash.apply _) + implicit val EventMetaDataReads: Reads[EventMetaData] = ( + (JsPath \ "root_id").read[Option[UUID]] and (JsPath \ "parent_id").read[Option[UUID]] and (JsPath \ "scopes").read[Option[Seq[String]]] and (JsPath \ "id").read[Option[UUID]] and (JsPath \ "created").read[Option[String]] + )(EventMetaData.apply _) implicit val EventReads: Reads[Event] = ( - (JsPath \ "event_type").readNullable[String] and (JsPath \ "partitioning_key").readNullable[String] and (JsPath \ "metadata").readNullable[EventMetaDataNameClash] + (JsPath \ "event_type").read[Option[String]] and (JsPath \ "partitioning_key").read[Option[String]] and (JsPath \ "metadata").read[Option[EventMetaData]] )(Event.apply _) } @@ -50,8 +50,8 @@ package yaml { "newest_available_offset" -> ss.newest_available_offset ) } - implicit val EventMetaDataNameClashWrites: Writes[EventMetaDataNameClash] = new Writes[EventMetaDataNameClash] { - def writes(ss: EventMetaDataNameClash) = + implicit val EventMetaDataWrites: Writes[EventMetaData] = new Writes[EventMetaData] { + def writes(ss: EventMetaData) = Json.obj( "root_id" -> ss.root_id, "parent_id" -> ss.parent_id, @@ -102,18 +102,7 @@ package yaml { //noinspection ScalaStyle package object yaml { - type TopicsTopicEventsGetStream_timeout = Option[Int] - type EventEvent_type = Option[String] - type SimpleStreamEventEventsOpt = Seq[Event] - type EventMetaDataParent_id = Option[UUID] - type EventMetadata = Option[EventMetaDataNameClash] type TopicsTopicEventsPostResponses201 = Null - type EventMetaDataScopesOpt = Seq[String] - type TopicsTopicPartitionsGetResponses200 = Seq[TopicPartition] - type TopicsTopicEventsBatchPostEvent = Option[Event] - type SimpleStreamEventEvents = Option[SimpleStreamEventEventsOpt] - type EventMetaDataScopes = Option[EventMetaDataScopesOpt] - type TopicsGetResponses200 = Seq[Topic] import play.api.mvc.{QueryStringBindable, PathBindable} diff --git a/play-scala-generator/src/test/resources/expected_results/model/nested_arrays_validation_yaml.scala b/play-scala-generator/src/test/resources/expected_results/model/nested_arrays_validation_yaml.scala index 8c46519a..8cca5532 100644 --- a/play-scala-generator/src/test/resources/expected_results/model/nested_arrays_validation_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/model/nested_arrays_validation_yaml.scala @@ -7,8 +7,8 @@ package nested_arrays_validation package yaml { - case class Activity(actions: ActivityActions) - case class Example(messages: ExampleMessages, nestedArrays: ExampleNestedArrays) + case class Activity(actions: Option[String]) + case class Example(nestedArrays: Option[Seq[Seq[Seq[Seq[String]]]]], messages: Option[Seq[Seq[Activity]]]) import play.api.libs.json._ @@ -16,10 +16,10 @@ package yaml { import de.zalando.play.controllers.MissingDefaultReads object BodyReads extends MissingDefaultReads { implicit val ExampleReads: Reads[Example] = ( - (JsPath \ "messages").readNullable[ExampleMessagesOpt] and (JsPath \ "nestedArrays").readNullable[ExampleNestedArraysOpt] + (JsPath \ "nestedArrays").read[Option[Seq[Seq[Seq[Seq[String]]]]]] and (JsPath \ "messages").read[Option[Seq[Seq[Activity]]]] )(Example.apply _) implicit val ActivityReads: Reads[Activity] = ( - (JsPath \ "actions").readNullable[String] + (JsPath \ "actions").read[Option[String]] ).map(Activity.apply ) } @@ -30,17 +30,7 @@ package yaml { //noinspection ScalaStyle package object yaml { - type ExampleNestedArraysOptArrResultArrResult = Seq[ExampleNestedArraysOptArrResultArrResultArrResult] - type ExampleNestedArraysOpt = Seq[ExampleNestedArraysOptArrResult] - type ExampleMessagesOpt = Seq[ExampleMessagesOptArrResult] - type AnotherPostExample = Option[Example] - type ExampleMessages = Option[ExampleMessagesOpt] - type ExampleNestedArraysOptArrResultArrResultArrResult = Seq[String] type AnotherPostResponses200 = Null - type ExampleNestedArraysOptArrResult = Seq[ExampleNestedArraysOptArrResultArrResult] - type ExampleNestedArrays = Option[ExampleNestedArraysOpt] - type ExampleMessagesOptArrResult = Seq[Activity] - type ActivityActions = Option[String] diff --git a/play-scala-generator/src/test/resources/expected_results/model/nested_arrays_yaml.scala b/play-scala-generator/src/test/resources/expected_results/model/nested_arrays_yaml.scala index 93da4345..6acad1c3 100644 --- a/play-scala-generator/src/test/resources/expected_results/model/nested_arrays_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/model/nested_arrays_yaml.scala @@ -6,8 +6,8 @@ package nested_arrays_yaml { - case class Activity(actions: ActivityActions) - case class Example(messages: ExampleMessages, nestedArrays: ExampleNestedArrays) + case class Activity(actions: Option[String]) + case class Example(nestedArrays: Option[Seq[Seq[Seq[Seq[String]]]]], messages: Option[Seq[Seq[Activity]]]) } @@ -17,15 +17,6 @@ package nested_arrays_yaml { //noinspection ScalaStyle package object nested_arrays_yaml { - type ExampleNestedArraysOptArrResultArrResult = Seq[ExampleNestedArraysOptArrResultArrResultArrResult] - type ExampleNestedArraysOpt = Seq[ExampleNestedArraysOptArrResult] - type ExampleMessagesOpt = Seq[ExampleMessagesOptArrResult] - type ExampleMessages = Option[ExampleMessagesOpt] - type ExampleNestedArraysOptArrResultArrResultArrResult = Seq[String] - type ExampleNestedArraysOptArrResult = Seq[ExampleNestedArraysOptArrResultArrResult] - type ExampleNestedArrays = Option[ExampleNestedArraysOpt] - type ExampleMessagesOptArrResult = Seq[Activity] - type ActivityActions = Option[String] diff --git a/play-scala-generator/src/test/resources/expected_results/model/nested_objects_validation_yaml.scala b/play-scala-generator/src/test/resources/expected_results/model/nested_objects_validation_yaml.scala index e2b230bf..f5436e44 100644 --- a/play-scala-generator/src/test/resources/expected_results/model/nested_objects_validation_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/model/nested_objects_validation_yaml.scala @@ -7,11 +7,11 @@ package nested_objects_validation package yaml { - case class NestedObjectsNestedOpt(nested2: NestedObjectsNestedNested2) - case class NestedObjectsNestedNested2Nested3Opt(bottom: NestedObjectsNestedNested2Nested3Bottom) - case class NestedObjects(plain: NestedObjectsPlain, nested: NestedObjectsNested) - case class NestedObjectsPlainOpt(simple: String) - case class NestedObjectsNestedNested2(nested3: NestedObjectsNestedNested2Nested3) + case class NestedObjectsNestedNested2Nested3OptionNested3(bottom: Option[String]) + case class NestedObjectsPlainOptionPlain(simple: String) + case class NestedObjects(plain: Option[NestedObjectsPlainOptionPlain], nested: Option[NestedObjectsNestedOptionNested]) + case class NestedObjectsNestedOptionNested(nested2: NestedObjectsNestedNested2) + case class NestedObjectsNestedNested2(nested3: Option[NestedObjectsNestedNested2Nested3OptionNested3]) import play.api.libs.json._ @@ -19,10 +19,10 @@ package yaml { import de.zalando.play.controllers.MissingDefaultReads object BodyReads extends MissingDefaultReads { implicit val NestedObjectsNestedNested2Reads: Reads[NestedObjectsNestedNested2] = ( - (JsPath \ "nested3").readNullable[NestedObjectsNestedNested2Nested3Opt] + (JsPath \ "nested3").read[Option[NestedObjectsNestedNested2Nested3OptionNested3]] ).map(NestedObjectsNestedNested2.apply ) implicit val NestedObjectsReads: Reads[NestedObjects] = ( - (JsPath \ "plain").readNullable[NestedObjectsPlainOpt] and (JsPath \ "nested").readNullable[NestedObjectsNestedOpt] + (JsPath \ "plain").read[Option[NestedObjectsPlainOptionPlain]] and (JsPath \ "nested").read[Option[NestedObjectsNestedOptionNested]] )(NestedObjects.apply _) } @@ -33,10 +33,6 @@ package yaml { //noinspection ScalaStyle package object yaml { - type NestedObjectsNested = Option[NestedObjectsNestedOpt] - type NestedObjectsNestedNested2Nested3Bottom = Option[String] - type NestedObjectsNestedNested2Nested3 = Option[NestedObjectsNestedNested2Nested3Opt] - type NestedObjectsPlain = Option[NestedObjectsPlainOpt] type GetResponses200 = Null diff --git a/play-scala-generator/src/test/resources/expected_results/model/nested_objects_yaml.scala b/play-scala-generator/src/test/resources/expected_results/model/nested_objects_yaml.scala index 2b0bd337..877c84e5 100644 --- a/play-scala-generator/src/test/resources/expected_results/model/nested_objects_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/model/nested_objects_yaml.scala @@ -6,11 +6,11 @@ package nested_objects_yaml { - case class NestedObjectsNestedOpt(nested2: NestedObjectsNestedNested2) - case class NestedObjectsNestedNested2Nested3Opt(bottom: NestedObjectsNestedNested2Nested3Bottom) - case class NestedObjects(plain: NestedObjectsPlain, nested: NestedObjectsNested) - case class NestedObjectsPlainOpt(simple: String) - case class NestedObjectsNestedNested2(nested3: NestedObjectsNestedNested2Nested3) + case class NestedObjectsNestedNested2Nested3OptionNested3(bottom: Option[String]) + case class NestedObjectsPlainOptionPlain(simple: String) + case class NestedObjects(plain: Option[NestedObjectsPlainOptionPlain], nested: Option[NestedObjectsNestedOptionNested]) + case class NestedObjectsNestedOptionNested(nested2: NestedObjectsNestedNested2) + case class NestedObjectsNestedNested2(nested3: Option[NestedObjectsNestedNested2Nested3OptionNested3]) } @@ -20,10 +20,6 @@ package nested_objects_yaml { //noinspection ScalaStyle package object nested_objects_yaml { - type NestedObjectsNested = Option[NestedObjectsNestedOpt] - type NestedObjectsNestedNested2Nested3Bottom = Option[String] - type NestedObjectsNestedNested2Nested3 = Option[NestedObjectsNestedNested2Nested3Opt] - type NestedObjectsPlain = Option[NestedObjectsPlainOpt] diff --git a/play-scala-generator/src/test/resources/expected_results/model/nested_options_validation_yaml.scala b/play-scala-generator/src/test/resources/expected_results/model/nested_options_validation_yaml.scala index ff2fde6a..91add6c9 100644 --- a/play-scala-generator/src/test/resources/expected_results/model/nested_options_validation_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/model/nested_options_validation_yaml.scala @@ -7,8 +7,8 @@ package nested_options_validation package yaml { - case class BasicOptionalOpt(nested_optional: BasicOptionalNested_optional) - case class Basic(optional: BasicOptional) + case class BasicOptionalOptionOptional(nested_optional: Option[String]) + case class Basic(optional: Option[BasicOptionalOptionOptional]) import play.api.libs.json._ @@ -16,7 +16,7 @@ package yaml { import de.zalando.play.controllers.MissingDefaultReads object BodyReads extends MissingDefaultReads { implicit val BasicReads: Reads[Basic] = ( - (JsPath \ "optional").readNullable[BasicOptionalOpt] + (JsPath \ "optional").read[Option[BasicOptionalOptionOptional]] ).map(Basic.apply ) } @@ -27,8 +27,6 @@ package yaml { //noinspection ScalaStyle package object yaml { - type BasicOptional = Option[BasicOptionalOpt] - type BasicOptionalNested_optional = Option[String] type GetResponses200 = Null diff --git a/play-scala-generator/src/test/resources/expected_results/model/nested_options_yaml.scala b/play-scala-generator/src/test/resources/expected_results/model/nested_options_yaml.scala index 527ae183..03a46b0a 100644 --- a/play-scala-generator/src/test/resources/expected_results/model/nested_options_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/model/nested_options_yaml.scala @@ -6,8 +6,8 @@ package nested_options_yaml { - case class Basic(optional: BasicOptional) - case class BasicOptionalOpt(nested_optional: BasicOptionalNested_optional) + case class Basic(optional: Option[BasicOptionalOptionOptional]) + case class BasicOptionalOptionOptional(nested_optional: Option[String]) } @@ -17,8 +17,6 @@ package nested_options_yaml { //noinspection ScalaStyle package object nested_options_yaml { - type BasicOptional = Option[BasicOptionalOpt] - type BasicOptionalNested_optional = Option[String] diff --git a/play-scala-generator/src/test/resources/expected_results/model/numbers_validation_yaml.scala b/play-scala-generator/src/test/resources/expected_results/model/numbers_validation_yaml.scala index 4f37dc82..6b15aaef 100644 --- a/play-scala-generator/src/test/resources/expected_results/model/numbers_validation_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/model/numbers_validation_yaml.scala @@ -18,10 +18,6 @@ package yaml { //noinspection ScalaStyle package object yaml { - type GetDouble_optional = Option[Double] - type GetInteger_optional = Option[Int] - type GetLong_optional = Option[Long] - type GetFloat_optional = Option[Float] type GetResponses200 = Null diff --git a/play-scala-generator/src/test/resources/expected_results/model/options_yaml.scala b/play-scala-generator/src/test/resources/expected_results/model/options_yaml.scala index 0d136a1b..a0e0184a 100644 --- a/play-scala-generator/src/test/resources/expected_results/model/options_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/model/options_yaml.scala @@ -6,7 +6,7 @@ package options_yaml { - case class Basic(id: Long, required: BasicRequired, optional: BasicOptional) + case class Basic(id: Long, required: Seq[String], optional: Option[Seq[String]]) } @@ -16,8 +16,6 @@ package options_yaml { //noinspection ScalaStyle package object options_yaml { - type BasicRequired = Seq[String] - type BasicOptional = Option[BasicRequired] diff --git a/play-scala-generator/src/test/resources/expected_results/model/security_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/model/security_api_yaml.scala index 7945fd90..88c490a3 100644 --- a/play-scala-generator/src/test/resources/expected_results/model/security_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/model/security_api_yaml.scala @@ -11,7 +11,7 @@ package yaml { case class ErrorModel(code: Int, message: String) - case class Pet(name: String, tag: PetTag) + case class Pet(name: String, tag: Option[String]) import play.api.libs.json._ @@ -33,9 +33,6 @@ package yaml { //noinspection ScalaStyle package object yaml { - type PetsIdGetId = ArrayWrapper[String] - type PetsIdGetResponses200 = Seq[Pet] - type PetTag = Option[String] import play.api.mvc.{QueryStringBindable, PathBindable} diff --git a/play-scala-generator/src/test/resources/expected_results/model/simple_petstore_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/model/simple_petstore_api_yaml.scala index 5d3d9384..08f1a310 100644 --- a/play-scala-generator/src/test/resources/expected_results/model/simple_petstore_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/model/simple_petstore_api_yaml.scala @@ -10,8 +10,8 @@ package simple_petstore_api_yaml { case class ErrorModel(code: Int, message: String) - case class Pet(id: Long, name: String, tag: NewPetTag) - case class NewPet(name: String, id: NewPetId, tag: NewPetTag) + case class Pet(id: Long, name: String, tag: Option[String]) + case class NewPet(id: Option[Long], name: String, tag: Option[String]) import play.api.libs.json._ @@ -19,7 +19,7 @@ package simple_petstore_api_yaml { import de.zalando.play.controllers.MissingDefaultReads object BodyReads extends MissingDefaultReads { implicit val NewPetReads: Reads[NewPet] = ( - (JsPath \ "name").read[String] and (JsPath \ "id").readNullable[Long] and (JsPath \ "tag").readNullable[String] + (JsPath \ "id").read[Option[Long]] and (JsPath \ "name").read[String] and (JsPath \ "tag").read[Option[String]] )(NewPet.apply _) } @@ -44,18 +44,12 @@ package simple_petstore_api_yaml { package object simple_petstore_api_yaml { type PetsIdDeleteResponses204 = Null - type NewPetTag = Option[String] - type PetsGetLimit = Option[Int] - type NewPetId = Option[Long] - type PetsGetTagsOpt = ArrayWrapper[String] - type PetsGetResponses200 = Seq[Pet] - type PetsGetTags = Option[PetsGetTagsOpt] import play.api.mvc.{QueryStringBindable, PathBindable} implicit val bindable_OptionIntQuery: QueryStringBindable[Option[Int]] = PlayPathBindables.createOptionQueryBindable[Int] implicit val bindable_ArrayWrapperStringQuery: QueryStringBindable[ArrayWrapper[String]] = PlayPathBindables.createArrayWrapperQueryBindable[String]("csv") - implicit val bindable_OptionPetsGetTagsOptQuery: QueryStringBindable[Option[PetsGetTagsOpt]] = PlayPathBindables.createOptionQueryBindable[PetsGetTagsOpt] + implicit val bindable_OptionArrayWrapperQuery: QueryStringBindable[Option[ArrayWrapper]] = PlayPathBindables.createOptionQueryBindable[ArrayWrapper] } \ No newline at end of file diff --git a/play-scala-generator/src/test/resources/expected_results/model/split_petstore_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/model/split_petstore_api_yaml.scala index b33cfd8f..29d99cee 100644 --- a/play-scala-generator/src/test/resources/expected_results/model/split_petstore_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/model/split_petstore_api_yaml.scala @@ -1,8 +1,8 @@ package split.petstore.api - import de.zalando.play.controllers.ArrayWrapper import java.time.ZonedDateTime + import de.zalando.play.controllers.ArrayWrapper import de.zalando.play.controllers.PlayPathBindables @@ -11,10 +11,10 @@ package split.petstore.api package yaml { - case class PetCategoryOpt(id: OrderPetId, name: OrderStatus) - case class Pet(name: String, tags: PetTags, photoUrls: PetPhotoUrls, id: OrderPetId, status: OrderStatus, category: PetCategory) - case class User(email: OrderStatus, username: OrderStatus, userStatus: OrderQuantity, lastName: OrderStatus, firstName: OrderStatus, id: OrderPetId, phone: OrderStatus, password: OrderStatus) - case class Order(shipDate: OrderShipDate, quantity: OrderQuantity, petId: OrderPetId, id: OrderPetId, complete: OrderComplete, status: OrderStatus) + case class PetCategoryOptionCategory(id: Option[Long], name: Option[String]) + case class User(email: Option[String], username: Option[String], userStatus: Option[Int], lastName: Option[String], firstName: Option[String], id: Option[Long], phone: Option[String], password: Option[String]) + case class Pet(name: String, photoUrls: Seq[String], id: Option[Long], status: Option[String], tags: Option[Seq[PetCategoryOptionCategory]], category: Option[PetCategoryOptionCategory]) + case class Order(shipDate: Option[ZonedDateTime], quantity: Option[Int], petId: Option[Long], id: Option[Long], complete: Option[Boolean], status: Option[String]) } @@ -25,29 +25,12 @@ package yaml { package object yaml { type UsersCreateWithListPostResponsesDefault = Null - type OrderStatus = Option[String] - type PetsFindByStatusGetStatusOpt = ArrayWrapper[String] - type UsersCreateWithListPostBodyOpt = Seq[User] - type OrderPetId = Option[Long] - type PetsFindByStatusGetResponses200 = Seq[Pet] - type PetsPostBody = Option[Pet] - type OrderShipDate = Option[ZonedDateTime] - type UsersUsernamePutBody = Option[User] - type StoresOrderPostBody = Option[Order] - type OrderComplete = Option[Boolean] - type PetTags = Option[PetTagsOpt] - type OrderQuantity = Option[Int] - type PetPhotoUrls = Seq[String] - type UsersCreateWithListPostBody = Option[UsersCreateWithListPostBodyOpt] - type PetsFindByStatusGetStatus = Option[PetsFindByStatusGetStatusOpt] - type PetCategory = Option[PetCategoryOpt] - type PetTagsOpt = Seq[PetCategoryOpt] import play.api.mvc.{QueryStringBindable, PathBindable} implicit val bindable_OptionStringQuery: QueryStringBindable[Option[String]] = PlayPathBindables.createOptionQueryBindable[String] implicit val bindable_ArrayWrapperStringQuery: QueryStringBindable[ArrayWrapper[String]] = PlayPathBindables.createArrayWrapperQueryBindable[String]("multi") - implicit val bindable_OptionPetsFindByStatusGetStatusOptQuery: QueryStringBindable[Option[PetsFindByStatusGetStatusOpt]] = PlayPathBindables.createOptionQueryBindable[PetsFindByStatusGetStatusOpt] + implicit val bindable_OptionArrayWrapperQuery: QueryStringBindable[Option[ArrayWrapper]] = PlayPathBindables.createOptionQueryBindable[ArrayWrapper] } \ No newline at end of file diff --git a/play-scala-generator/src/test/resources/expected_results/model/string_formats_validation_yaml.scala b/play-scala-generator/src/test/resources/expected_results/model/string_formats_validation_yaml.scala index 87d99415..2a1b07c5 100644 --- a/play-scala-generator/src/test/resources/expected_results/model/string_formats_validation_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/model/string_formats_validation_yaml.scala @@ -1,10 +1,10 @@ package string_formats_validation + import java.time.ZonedDateTime import java.time.LocalDate import de.zalando.play.controllers.BinaryString import BinaryString._ - import java.time.ZonedDateTime import de.zalando.play.controllers.Base64String import Base64String._ @@ -24,13 +24,7 @@ package yaml { //noinspection ScalaStyle package object yaml { - type StringPostString_optional = Option[String] - type StringPostPassword_optional = Option[String] - type StringPostDate_optional = Option[LocalDate] - type StringPostBinary_optional = Option[BinaryString] type String2PostResponses200 = Null - type StringPostDate_time_optional = Option[ZonedDateTime] - type StringPostBase64optional = Option[Base64String] import play.api.mvc.{QueryStringBindable, PathBindable} diff --git a/play-scala-generator/src/test/resources/expected_results/model/string_formats_yaml.scala b/play-scala-generator/src/test/resources/expected_results/model/string_formats_yaml.scala index 962bef48..d5fcdb4d 100644 --- a/play-scala-generator/src/test/resources/expected_results/model/string_formats_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/model/string_formats_yaml.scala @@ -3,11 +3,11 @@ package string_formats import de.zalando.play.controllers.Base64String import Base64String._ + import de.zalando.play.controllers.BinaryString + import BinaryString._ import java.time.ZonedDateTime import java.util.UUID import java.time.LocalDate - import de.zalando.play.controllers.BinaryString - import BinaryString._ import de.zalando.play.controllers.PlayPathBindables @@ -25,10 +25,6 @@ package yaml { //noinspection ScalaStyle package object yaml { - type GetBase64 = Option[Base64String] - type GetDate_time = Option[ZonedDateTime] - type GetUuid = Option[UUID] - type GetDate = Option[LocalDate] type GetResponses200 = Null diff --git a/play-scala-generator/src/test/resources/expected_results/model/type_deduplication_yaml.scala b/play-scala-generator/src/test/resources/expected_results/model/type_deduplication_yaml.scala index 50fab8e7..4a0cd4fa 100644 --- a/play-scala-generator/src/test/resources/expected_results/model/type_deduplication_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/model/type_deduplication_yaml.scala @@ -10,15 +10,15 @@ package type_deduplication package yaml { - case class SunlightNeeds(amount: PlantPlant_id) - case class Plant(species: PlantPlant_id, name: PlantPlant_id, description: PlantPlant_id, owner_id: PlantPlant_id, plant_id: PlantPlant_id, godparent: PlantPlant_id) - case class User(user_id: PlantPlant_id, name: PlantPlant_id, area_id: PlantPlant_id) - case class SigninData(username: PlantPlant_id, password: PlantPlant_id, email: PlantPlant_id) - case class Watering(watering_id: PlantPlant_id, user_id: PlantPlant_id, date: PlantPlant_id) - case class Area(area_id: PlantPlant_id, building: PlantPlant_id, floor: PlantPlant_id, room: PlantPlant_id) - case class Location(area_id: PlantPlant_id, details: PlantPlant_id) - case class Error(code: ErrorCode, message: PlantPlant_id, fields: PlantPlant_id) - case class WaterNeeds(amount: PlantPlant_id, period: PlantPlant_id) + case class SunlightNeeds(amount: Option[String]) + case class Plant(species: Option[String], name: Option[String], description: Option[String], owner_id: Option[String], plant_id: Option[String], godparent: Option[String]) + case class User(user_id: Option[String], name: Option[String], area_id: Option[String]) + case class SigninData(username: Option[String], password: Option[String], email: Option[String]) + case class Watering(watering_id: Option[String], user_id: Option[String], date: Option[String]) + case class Area(area_id: Option[String], building: Option[String], floor: Option[String], room: Option[String]) + case class Location(area_id: Option[String], details: Option[String]) + case class Error(code: Option[Int], message: Option[String], fields: Option[String]) + case class WaterNeeds(amount: Option[String], period: Option[String]) import play.api.libs.json._ @@ -26,22 +26,22 @@ package yaml { import de.zalando.play.controllers.MissingDefaultReads object BodyReads extends MissingDefaultReads { implicit val WaterNeedsReads: Reads[WaterNeeds] = ( - (JsPath \ "amount").readNullable[String] and (JsPath \ "period").readNullable[String] + (JsPath \ "amount").read[Option[String]] and (JsPath \ "period").read[Option[String]] )(WaterNeeds.apply _) implicit val PlantReads: Reads[Plant] = ( - (JsPath \ "species").readNullable[String] and (JsPath \ "name").readNullable[String] and (JsPath \ "description").readNullable[String] and (JsPath \ "owner_id").readNullable[String] and (JsPath \ "plant_id").readNullable[String] and (JsPath \ "godparent").readNullable[String] + (JsPath \ "species").read[Option[String]] and (JsPath \ "name").read[Option[String]] and (JsPath \ "description").read[Option[String]] and (JsPath \ "owner_id").read[Option[String]] and (JsPath \ "plant_id").read[Option[String]] and (JsPath \ "godparent").read[Option[String]] )(Plant.apply _) implicit val LocationReads: Reads[Location] = ( - (JsPath \ "area_id").readNullable[String] and (JsPath \ "details").readNullable[String] + (JsPath \ "area_id").read[Option[String]] and (JsPath \ "details").read[Option[String]] )(Location.apply _) implicit val UserReads: Reads[User] = ( - (JsPath \ "user_id").readNullable[String] and (JsPath \ "name").readNullable[String] and (JsPath \ "area_id").readNullable[String] + (JsPath \ "user_id").read[Option[String]] and (JsPath \ "name").read[Option[String]] and (JsPath \ "area_id").read[Option[String]] )(User.apply _) implicit val SigninDataReads: Reads[SigninData] = ( - (JsPath \ "username").readNullable[String] and (JsPath \ "password").readNullable[String] and (JsPath \ "email").readNullable[String] + (JsPath \ "username").read[Option[String]] and (JsPath \ "password").read[Option[String]] and (JsPath \ "email").read[Option[String]] )(SigninData.apply _) implicit val SunlightNeedsReads: Reads[SunlightNeeds] = ( - (JsPath \ "amount").readNullable[String] + (JsPath \ "amount").read[Option[String]] ).map(SunlightNeeds.apply ) } @@ -121,17 +121,7 @@ package yaml { //noinspection ScalaStyle package object yaml { - type UsersGetLimit = Option[BigInt] type PlantsPlant_idPicturesPicture_idPutResponses404 = Null - type PlantPlant_id = Option[String] - type PlantsGetLimit = Option[BigInt] - type UsersGetResponses200 = Seq[User] - type ErrorCode = Option[Int] - type PlantsGetResponses200 = Seq[Plant] - type AreasGetResponses200 = Seq[Area] - type PlantsGetOffset = Option[BigInt] - type PlantsPlant_idPicturesGetResponses200 = Seq[String] - type PlantsPlant_idWateringsGetResponses200 = Seq[Watering] import play.api.mvc.{QueryStringBindable, PathBindable} diff --git a/play-scala-generator/src/test/resources/expected_results/model/uber_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/model/uber_api_yaml.scala index aa97ed1d..00189e87 100644 --- a/play-scala-generator/src/test/resources/expected_results/model/uber_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/model/uber_api_yaml.scala @@ -1,8 +1,8 @@ package uber.api - import java.util.UUID import scala.math.BigDecimal + import java.util.UUID import de.zalando.play.controllers.PlayPathBindables @@ -11,12 +11,12 @@ package uber.api package yaml { - case class Activity(uuid: ProfilePicture) - case class PriceEstimate(low_estimate: PriceEstimateHigh_estimate, display_name: ProfilePicture, estimate: ProfilePicture, high_estimate: PriceEstimateHigh_estimate, product_id: ProfilePicture, currency_code: ProfilePicture, surge_multiplier: PriceEstimateHigh_estimate) - case class Product(image: ProfilePicture, description: ProfilePicture, display_name: ProfilePicture, product_id: ProfilePicture, capacity: ProfilePicture) - case class Profile(first_name: ProfilePicture, email: ProfilePicture, promo_code: ProfilePicture, last_name: ProfilePicture, picture: ProfilePicture) - case class Activities(offset: ErrorCode, limit: ErrorCode, count: ErrorCode, history: ActivitiesHistory) - case class Error(code: ErrorCode, message: ProfilePicture, fields: ProfilePicture) + case class Activity(uuid: Option[String]) + case class PriceEstimate(low_estimate: Option[BigDecimal], display_name: Option[String], estimate: Option[String], high_estimate: Option[BigDecimal], product_id: Option[String], currency_code: Option[String], surge_multiplier: Option[BigDecimal]) + case class Product(image: Option[String], description: Option[String], display_name: Option[String], product_id: Option[String], capacity: Option[String]) + case class Profile(first_name: Option[String], email: Option[String], promo_code: Option[String], last_name: Option[String], picture: Option[String]) + case class Activities(offset: Option[Int], limit: Option[Int], count: Option[Int], history: Option[Seq[Activity]]) + case class Error(code: Option[Int], message: Option[String], fields: Option[String]) import play.api.libs.json._ @@ -78,14 +78,6 @@ package yaml { //noinspection ScalaStyle package object yaml { - type ActivitiesHistory = Option[ActivitiesHistoryOpt] - type ProfilePicture = Option[String] - type ErrorCode = Option[Int] - type EstimatesTimeGetCustomer_uuid = Option[UUID] - type ProductsGetResponses200 = Seq[Product] - type PriceEstimateHigh_estimate = Option[BigDecimal] - type EstimatesPriceGetResponses200 = Seq[PriceEstimate] - type ActivitiesHistoryOpt = Seq[Activity] import play.api.mvc.{QueryStringBindable, PathBindable} diff --git a/play-scala-generator/src/test/resources/expected_results/model/wrong_field_name_yaml.scala b/play-scala-generator/src/test/resources/expected_results/model/wrong_field_name_yaml.scala index bad77d06..e18d0e9d 100644 --- a/play-scala-generator/src/test/resources/expected_results/model/wrong_field_name_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/model/wrong_field_name_yaml.scala @@ -34,7 +34,6 @@ package yaml { //noinspection ScalaStyle package object yaml { - type GetOptCodes = Option[GetOptCodesOpt] object GetCodes { diff --git a/play-scala-generator/src/test/resources/expected_results/security/full_petstore_api_yaml.extractor.scala b/play-scala-generator/src/test/resources/expected_results/security/full_petstore_api_yaml.extractor.scala index 2118e998..965fe572 100644 --- a/play-scala-generator/src/test/resources/expected_results/security/full_petstore_api_yaml.extractor.scala +++ b/play-scala-generator/src/test/resources/expected_results/security/full_petstore_api_yaml.extractor.scala @@ -4,8 +4,8 @@ package full.petstore.api.yaml import scala.concurrent.Future import play.api.mvc._ import de.zalando.play.controllers.SwaggerSecurityExtractors._ -import de.zalando.play.controllers.ArrayWrapper import java.time.ZonedDateTime +import de.zalando.play.controllers.ArrayWrapper object SecurityExtractorsExecutionContext { // this ExecutionContext might be overridden if default configuration is not suitable for some reason diff --git a/play-scala-generator/src/test/resources/expected_results/security/full_petstore_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/security/full_petstore_api_yaml.scala index 3a07bbe8..0cdd492d 100644 --- a/play-scala-generator/src/test/resources/expected_results/security/full_petstore_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/security/full_petstore_api_yaml.scala @@ -3,8 +3,8 @@ package full.petstore.api.yaml import scala.concurrent.Future import play.api.mvc._ import de.zalando.play.controllers.{FutureAuthenticatedBuilder,PlayBodyParsing} -import de.zalando.play.controllers.ArrayWrapper import java.time.ZonedDateTime +import de.zalando.play.controllers.ArrayWrapper trait FullPetstoreApiYamlSecurity extends SecurityExtractors { diff --git a/play-scala-generator/src/test/resources/expected_results/security/split_petstore_api_yaml.extractor.scala b/play-scala-generator/src/test/resources/expected_results/security/split_petstore_api_yaml.extractor.scala index aea9ab08..f17f8de9 100644 --- a/play-scala-generator/src/test/resources/expected_results/security/split_petstore_api_yaml.extractor.scala +++ b/play-scala-generator/src/test/resources/expected_results/security/split_petstore_api_yaml.extractor.scala @@ -4,8 +4,8 @@ package split.petstore.api.yaml import scala.concurrent.Future import play.api.mvc._ import de.zalando.play.controllers.SwaggerSecurityExtractors._ -import de.zalando.play.controllers.ArrayWrapper import java.time.ZonedDateTime +import de.zalando.play.controllers.ArrayWrapper object SecurityExtractorsExecutionContext { // this ExecutionContext might be overridden if default configuration is not suitable for some reason diff --git a/play-scala-generator/src/test/resources/expected_results/security/split_petstore_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/security/split_petstore_api_yaml.scala index 0af70708..066b7bef 100644 --- a/play-scala-generator/src/test/resources/expected_results/security/split_petstore_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/security/split_petstore_api_yaml.scala @@ -3,8 +3,8 @@ package split.petstore.api.yaml import scala.concurrent.Future import play.api.mvc._ import de.zalando.play.controllers.{FutureAuthenticatedBuilder,PlayBodyParsing} -import de.zalando.play.controllers.ArrayWrapper import java.time.ZonedDateTime +import de.zalando.play.controllers.ArrayWrapper trait SplitPetstoreApiYamlSecurity extends SecurityExtractors { diff --git a/play-scala-generator/src/test/resources/expected_results/test_data/additional_properties_yaml.scala b/play-scala-generator/src/test/resources/expected_results/test_data/additional_properties_yaml.scala index f3ccc7ee..44ce8af9 100644 --- a/play-scala-generator/src/test/resources/expected_results/test_data/additional_properties_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/test_data/additional_properties_yaml.scala @@ -12,12 +12,10 @@ object Generators extends JsValueGenerators { def createKeyedArraysAdditionalPropertiesGenerator = _generate(KeyedArraysAdditionalPropertiesGenerator) - def createKeyedArraysAdditionalPropertiesCatchAllGenerator = _generate(KeyedArraysAdditionalPropertiesCatchAllGenerator) - def KeyedArraysAdditionalPropertiesGenerator: Gen[Map[String, KeyedArraysAdditionalPropertiesCatchAll]] = _genMap[String,KeyedArraysAdditionalPropertiesCatchAll](arbitrary[String], KeyedArraysAdditionalPropertiesCatchAllGenerator) - def KeyedArraysAdditionalPropertiesCatchAllGenerator: Gen[List[BigInt]] = Gen.containerOf[List,BigInt](arbitrary[BigInt]) + def KeyedArraysAdditionalPropertiesGenerator: Gen[Map[String, Seq]] = _genMap[String,Seq](arbitrary[String], Gen.containerOf[List,BigInt](arbitrary[BigInt])) def createKeyedArraysGenerator = _generate(KeyedArraysGenerator) diff --git a/play-scala-generator/src/test/resources/expected_results/test_data/basic_polymorphism_yaml.scala b/play-scala-generator/src/test/resources/expected_results/test_data/basic_polymorphism_yaml.scala index c5d89d93..803e12c5 100644 --- a/play-scala-generator/src/test/resources/expected_results/test_data/basic_polymorphism_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/test_data/basic_polymorphism_yaml.scala @@ -9,18 +9,14 @@ object Generators extends JsValueGenerators { - def createZooTiersOptGenerator = _generate(ZooTiersOptGenerator) - def createZooTiersGenerator = _generate(ZooTiersGenerator) def createCatHuntingSkillGenerator = _generate(CatHuntingSkillGenerator) - def createPutDummyGenerator = _generate(PutDummyGenerator) + def createOptionPetGenerator = _generate(OptionPetGenerator) def createNullGenerator = _generate(NullGenerator) - def ZooTiersOptGenerator: Gen[List[Pet]] = Gen.containerOf[List,Pet](PetGenerator) - def ZooTiersGenerator = Gen.option(ZooTiersOptGenerator) def CatHuntingSkillGenerator = { import CatHuntingSkill._ ; Gen.oneOf(Seq(Clueless, Lazy, Adventurous, Aggressive)) } - def PutDummyGenerator = Gen.option(PetGenerator) + def OptionPetGenerator = Gen.option(PetGenerator) def NullGenerator = arbitrary[Null] @@ -36,7 +32,7 @@ object Generators extends JsValueGenerators { def ZooGenerator = for { - tiers <- ZooTiersGenerator + tiers <- Gen.option(Gen.containerOf[List,Pet](PetGenerator)) } yield Zoo(tiers) def CatGenerator = for { name <- arbitrary[String] diff --git a/play-scala-generator/src/test/resources/expected_results/test_data/cross_spec_references_yaml.scala b/play-scala-generator/src/test/resources/expected_results/test_data/cross_spec_references_yaml.scala index ad0d1893..a60eb1fb 100644 --- a/play-scala-generator/src/test/resources/expected_results/test_data/cross_spec_references_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/test_data/cross_spec_references_yaml.scala @@ -10,86 +10,60 @@ object Generators extends JsValueGenerators { - def createMetaCopyrightGenerator = _generate(MetaCopyrightGenerator) - def createModelSchemaKeywordsGenerator = _generate(ModelSchemaKeywordsGenerator) - def createModelSchemaSpecialDescriptionsGenerator = _generate(ModelSchemaSpecialDescriptionsGenerator) - def createModelSchemaRootDataGenerator = _generate(ModelSchemaRootDataGenerator) - def createPetIdGenerator = _generate(PetIdGenerator) - def createModelSchemaRootLinksGenerator = _generate(ModelSchemaRootLinksGenerator) - def createPetTagsGenerator = _generate(PetTagsGenerator) def createModelSchemaSilhouetteIdGenerator = _generate(ModelSchemaSilhouetteIdGenerator) - def createPetPhotoUrlsGenerator = _generate(PetPhotoUrlsGenerator) - def createModelSchemaLengthRegisterGenerator = _generate(ModelSchemaLengthRegisterGenerator) - def createModelSchemaAgeGroupsGenerator = _generate(ModelSchemaAgeGroupsGenerator) - def createPetCategoryGenerator = _generate(PetCategoryGenerator) - def createModelSchemaAgeGroupsArrResultGenerator = _generate(ModelSchemaAgeGroupsArrResultGenerator) - def createPetTagsOptGenerator = _generate(PetTagsOptGenerator) - def createModelSchemaRootMetaGenerator = _generate(ModelSchemaRootMetaGenerator) + def createModelSchemaAgeGroupsSeqEnumGenerator = _generate(ModelSchemaAgeGroupsSeqEnumGenerator) - def MetaCopyrightGenerator = Gen.option(arbitrary[String]) - def ModelSchemaKeywordsGenerator = Gen.option(arbitrary[String]) - def ModelSchemaSpecialDescriptionsGenerator = Gen.option(PetPhotoUrlsGenerator) - def ModelSchemaRootDataGenerator = Gen.option(ModelSchemaRootDataOptGenerator) - def PetIdGenerator = Gen.option(arbitrary[Long]) - def ModelSchemaRootLinksGenerator = Gen.option(ModelSchemaRootLinksOptGenerator) - def PetTagsGenerator = Gen.option(PetTagsOptGenerator) def ModelSchemaSilhouetteIdGenerator = { import ModelSchemaSilhouetteId._ ; Gen.oneOf(Seq(Kitchen, Bikini_top, Toys, Nightwear_combination, Bra, One_piece_underwear, Ball, Cleansing, Skincare, Jewellery, Headgear, Bustier, Beach_trouser, Bedroom, Lounge, Nail, Undershirt, Combination_clothing, Gloves, Fragrance, Other_equipment, Fitness, Bathroom, One_piece_nightwear, Sleeping_bag, Coat, Case, Sandals, Ankle_boots, Stocking, Shirt, Backpack, Face_cosmetic, Travel_equipment, Hair, Sneaker, Beauty_equipment, Bikini_combination, Backless_slipper, Beach_accessoires, Scarf, First_shoe, Voucher, Wallet, Peeling, Glasses, Boards, Sun, Shave, Low_shoe, Underwear_combination, Nightdress, Suit_accessoires, Watch, Headphones, Skates, Boots, Jacket, Etui, Night_shirt, Other_accessoires, Vest, Bag, System, Racket, Trouser, Lip_cosmetic, Keychain, Belt, Ballerina_shoe, One_piece_suit, Night_trouser, Skirt, Tights, Beach_shirt, Dress, Bicycle, Protector, Eye_cosmetic, Bathrobe, Bicycle_equipment, Pullover, One_piece_beachwear, Underpant, Living, Cardigan, Corsage, Shoe_accessoires, Umbrella, Pumps, Tent, T_shirt_top, Ski)) } - def PetPhotoUrlsGenerator: Gen[List[String]] = Gen.containerOf[List,String](arbitrary[String]) - def ModelSchemaLengthRegisterGenerator = Gen.option(arbitrary[String]) - def ModelSchemaAgeGroupsGenerator: Gen[List[ModelSchemaAgeGroupsArrResult]] = Gen.containerOf[List,ModelSchemaAgeGroupsArrResult](ModelSchemaAgeGroupsArrResultGenerator) - def PetCategoryGenerator = Gen.option(PetCategoryOptGenerator) - def ModelSchemaAgeGroupsArrResultGenerator = { import ModelSchemaAgeGroupsArrResult._ ; Gen.oneOf(Seq(Baby, Kid, Teen, Adult)) } - def PetTagsOptGenerator: Gen[List[PetCategoryOpt]] = Gen.containerOf[List,PetCategoryOpt](PetCategoryOptGenerator) - def ModelSchemaRootMetaGenerator = Gen.option(ModelSchemaRootMetaOptGenerator) + def ModelSchemaAgeGroupsSeqEnumGenerator = { import ModelSchemaAgeGroupsSeqEnum._ ; Gen.oneOf(Seq(Baby, Kid, Teen, Adult)) } - def createPetCategoryOptGenerator = _generate(PetCategoryOptGenerator) - def createModelSchemaRootDataOptGenerator = _generate(ModelSchemaRootDataOptGenerator) - def createModelSchemaRootMetaOptGenerator = _generate(ModelSchemaRootMetaOptGenerator) + def createModelSchemaRootMetaOptionMetaGenerator = _generate(ModelSchemaRootMetaOptionMetaGenerator) + def createPetCategoryOptionCategoryGenerator = _generate(PetCategoryOptionCategoryGenerator) def createModelSchemaRootGenerator = _generate(ModelSchemaRootGenerator) + def createModelSchemaRootLinksOptionLinksGenerator = _generate(ModelSchemaRootLinksOptionLinksGenerator) def createPetGenerator = _generate(PetGenerator) - def createModelSchemaRootLinksOptGenerator = _generate(ModelSchemaRootLinksOptGenerator) + def createModelSchemaRootDataOptionModelSchemaGenerator = _generate(ModelSchemaRootDataOptionModelSchemaGenerator) - def PetCategoryOptGenerator = for { - id <- PetIdGenerator - name <- MetaCopyrightGenerator - } yield PetCategoryOpt(id, name) - def ModelSchemaRootDataOptGenerator = for { + def ModelSchemaRootMetaOptionMetaGenerator = for { + copyright <- Gen.option(arbitrary[String]) + } yield ModelSchemaRootMetaOptionMeta(copyright) + def PetCategoryOptionCategoryGenerator = for { + id <- Gen.option(arbitrary[Long]) + name <- Gen.option(arbitrary[String]) + } yield PetCategoryOptionCategory(id, name) + def ModelSchemaRootGenerator = for { + data <- Gen.option(ModelSchemaRootDataOptionModelSchemaGenerator) + meta <- Gen.option(ModelSchemaRootMetaOptionMetaGenerator) + links <- Gen.option(ModelSchemaRootLinksOptionLinksGenerator) + } yield ModelSchemaRoot(data, meta, links) + def ModelSchemaRootLinksOptionLinksGenerator = for { + self <- Gen.option(arbitrary[String]) + related <- Gen.option(arbitrary[String]) + } yield ModelSchemaRootLinksOptionLinks(self, related) + def PetGenerator = for { + name <- arbitrary[String] + photoUrls <- Gen.containerOf[List,String](arbitrary[String]) + id <- Gen.option(arbitrary[Long]) + status <- Gen.option(arbitrary[String]) + tags <- Gen.option(Gen.containerOf[List,PetCategoryOptionCategory](PetCategoryOptionCategoryGenerator)) + category <- Gen.option(PetCategoryOptionCategoryGenerator) + } yield Pet(name, photoUrls, id, status, tags, category) + def ModelSchemaRootDataOptionModelSchemaGenerator = for { name <- arbitrary[String] + description <- Gen.option(arbitrary[String]) sizeRegister <- arbitrary[String] brand <- arbitrary[String] partnerArticleModelId <- arbitrary[BigInt] - description <- MetaCopyrightGenerator - ageGroups <- ModelSchemaAgeGroupsGenerator - keywords <- ModelSchemaKeywordsGenerator - lengthRegister <- ModelSchemaLengthRegisterGenerator + keywords <- Gen.option(arbitrary[String]) + lengthRegister <- Gen.option(arbitrary[String]) + specialDescriptions <- Gen.option(Gen.containerOf[List,String](arbitrary[String])) + articleModelAttributes <- Gen.option(Gen.containerOf[List,String](arbitrary[String])) silhouetteId <- ModelSchemaSilhouetteIdGenerator - specialDescriptions <- ModelSchemaSpecialDescriptionsGenerator - articleModelAttributes <- ModelSchemaSpecialDescriptionsGenerator - } yield ModelSchemaRootDataOpt(name, sizeRegister, brand, partnerArticleModelId, description, ageGroups, keywords, lengthRegister, silhouetteId, specialDescriptions, articleModelAttributes) - def ModelSchemaRootMetaOptGenerator = for { - copyright <- MetaCopyrightGenerator - } yield ModelSchemaRootMetaOpt(copyright) - def ModelSchemaRootGenerator = for { - data <- ModelSchemaRootDataGenerator - meta <- ModelSchemaRootMetaGenerator - links <- ModelSchemaRootLinksGenerator - } yield ModelSchemaRoot(data, meta, links) - def PetGenerator = for { - name <- arbitrary[String] - tags <- PetTagsGenerator - photoUrls <- PetPhotoUrlsGenerator - id <- PetIdGenerator - status <- MetaCopyrightGenerator - category <- PetCategoryGenerator - } yield Pet(name, tags, photoUrls, id, status, category) - def ModelSchemaRootLinksOptGenerator = for { - self <- MetaCopyrightGenerator - related <- MetaCopyrightGenerator - } yield ModelSchemaRootLinksOpt(self, related) + ageGroups <- Gen.containerOf[List,ModelSchemaAgeGroupsSeqEnum](ModelSchemaAgeGroupsSeqEnumGenerator) + } yield ModelSchemaRootDataOptionModelSchema(name, description, sizeRegister, brand, partnerArticleModelId, keywords, lengthRegister, specialDescriptions, articleModelAttributes, silhouetteId, ageGroups) def _generate[T](gen: Gen[T]) = (count: Int) => for (i <- 1 to count) yield gen.sample diff --git a/play-scala-generator/src/test/resources/expected_results/test_data/echo_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/test_data/echo_api_yaml.scala index 1c0609fa..eecb3e9f 100644 --- a/play-scala-generator/src/test/resources/expected_results/test_data/echo_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/test_data/echo_api_yaml.scala @@ -10,13 +10,13 @@ object Generators extends JsValueGenerators { def createNullGenerator = _generate(NullGenerator) - def createPostNameGenerator = _generate(PostNameGenerator) + def createOptionStringGenerator = _generate(OptionStringGenerator) def createStringGenerator = _generate(StringGenerator) def NullGenerator = arbitrary[Null] - def PostNameGenerator = Gen.option(arbitrary[String]) + def OptionStringGenerator = Gen.option(arbitrary[String]) def StringGenerator = arbitrary[String] @@ -24,8 +24,8 @@ object Generators extends JsValueGenerators { def PostResponses200Generator = for { - name <- PostNameGenerator - year <- PostNameGenerator + name <- Gen.option(arbitrary[String]) + year <- Gen.option(arbitrary[String]) } yield PostResponses200(name, year) def _generate[T](gen: Gen[T]) = (count: Int) => for (i <- 1 to count) yield gen.sample diff --git a/play-scala-generator/src/test/resources/expected_results/test_data/enum_yaml.scala b/play-scala-generator/src/test/resources/expected_results/test_data/enum_yaml.scala new file mode 100644 index 00000000..47bd7315 --- /dev/null +++ b/play-scala-generator/src/test/resources/expected_results/test_data/enum_yaml.scala @@ -0,0 +1,31 @@ +package enum.yaml + +import org.scalacheck.Gen +import org.scalacheck.Arbitrary +import play.api.libs.json.scalacheck.JsValueGenerators +import Arbitrary._ + +object Generators extends JsValueGenerators { + + + + def createStringGenerator = _generate(StringGenerator) + def createOptionTestGetIncludesOptionEnumGenerator = _generate(OptionTestGetIncludesOptionEnumGenerator) + def createTestGetIncludesOptionEnumGenerator = _generate(TestGetIncludesOptionEnumGenerator) + + + + def StringGenerator = arbitrary[String] + def OptionTestGetIncludesOptionEnumGenerator = Gen.option(TestGetIncludesOptionEnumGenerator) + def TestGetIncludesOptionEnumGenerator = { import TestGetIncludesOptionEnum._ ; Gen.oneOf(Seq(Option_one, Option_two)) } + + + + def _generate[T](gen: Gen[T]) = (count: Int) => for (i <- 1 to count) yield gen.sample + + + + + + +} \ No newline at end of file diff --git a/play-scala-generator/src/test/resources/expected_results/test_data/error_in_array_yaml.scala b/play-scala-generator/src/test/resources/expected_results/test_data/error_in_array_yaml.scala index c90373a9..77022d00 100644 --- a/play-scala-generator/src/test/resources/expected_results/test_data/error_in_array_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/test_data/error_in_array_yaml.scala @@ -10,42 +10,18 @@ object Generators extends JsValueGenerators { - def createModelSchemaSpecialDescriptionsOptGenerator = _generate(ModelSchemaSpecialDescriptionsOptGenerator) - def createMetaCopyrightGenerator = _generate(MetaCopyrightGenerator) - def createModelSchemaKeywordsGenerator = _generate(ModelSchemaKeywordsGenerator) - def createModelSchemaSpecialDescriptionsGenerator = _generate(ModelSchemaSpecialDescriptionsGenerator) - def createErrorsErrorsOptGenerator = _generate(ErrorsErrorsOptGenerator) - def createModelSchemaRootDataGenerator = _generate(ModelSchemaRootDataGenerator) - def createErrorSourceGenerator = _generate(ErrorSourceGenerator) - def createModelSchemaRootLinksGenerator = _generate(ModelSchemaRootLinksGenerator) def createModelSchemaSilhouetteIdGenerator = _generate(ModelSchemaSilhouetteIdGenerator) - def createModelSchemaLengthRegisterGenerator = _generate(ModelSchemaLengthRegisterGenerator) - def createErrorsErrorsGenerator = _generate(ErrorsErrorsGenerator) - def createModelSchemaAgeGroupsGenerator = _generate(ModelSchemaAgeGroupsGenerator) - def createModelSchemaAgeGroupsArrResultGenerator = _generate(ModelSchemaAgeGroupsArrResultGenerator) - def createModelSchemaRootMetaGenerator = _generate(ModelSchemaRootMetaGenerator) + def createModelSchemaAgeGroupsSeqEnumGenerator = _generate(ModelSchemaAgeGroupsSeqEnumGenerator) - def ModelSchemaSpecialDescriptionsOptGenerator: Gen[List[String]] = Gen.containerOf[List,String](arbitrary[String]) - def MetaCopyrightGenerator = Gen.option(arbitrary[String]) - def ModelSchemaKeywordsGenerator = Gen.option(arbitrary[String]) - def ModelSchemaSpecialDescriptionsGenerator = Gen.option(ModelSchemaSpecialDescriptionsOptGenerator) - def ErrorsErrorsOptGenerator: Gen[List[Error]] = Gen.containerOf[List,Error](ErrorGenerator) - def ModelSchemaRootDataGenerator = Gen.option(ModelSchemaGenerator) - def ErrorSourceGenerator = Gen.option(ErrorSourceNameClashGenerator) - def ModelSchemaRootLinksGenerator = Gen.option(LinksGenerator) def ModelSchemaSilhouetteIdGenerator = { import ModelSchemaSilhouetteId._ ; Gen.oneOf(Seq(Kitchen, Bikini_top, Toys, Nightwear_combination, Bra, One_piece_underwear, Ball, Cleansing, Skincare, Jewellery, Headgear, Bustier, Beach_trouser, Bedroom, Lounge, Nail, Undershirt, Combination_clothing, Gloves, Fragrance, Other_equipment, Fitness, Bathroom, One_piece_nightwear, Sleeping_bag, Coat, Case, Sandals, Ankle_boots, Stocking, Shirt, Backpack, Face_cosmetic, Travel_equipment, Hair, Sneaker, Beauty_equipment, Bikini_combination, Backless_slipper, Beach_accessoires, Scarf, First_shoe, Voucher, Wallet, Peeling, Glasses, Boards, Sun, Shave, Low_shoe, Underwear_combination, Nightdress, Suit_accessoires, Watch, Headphones, Skates, Boots, Jacket, Etui, Night_shirt, Other_accessoires, Vest, Bag, System, Racket, Trouser, Lip_cosmetic, Keychain, Belt, Ballerina_shoe, One_piece_suit, Night_trouser, Skirt, Tights, Beach_shirt, Dress, Bicycle, Protector, Eye_cosmetic, Bathrobe, Bicycle_equipment, Pullover, One_piece_beachwear, Underpant, Living, Cardigan, Corsage, Shoe_accessoires, Umbrella, Pumps, Tent, T_shirt_top, Ski)) } - def ModelSchemaLengthRegisterGenerator = Gen.option(arbitrary[String]) - def ErrorsErrorsGenerator = Gen.option(ErrorsErrorsOptGenerator) - def ModelSchemaAgeGroupsGenerator: Gen[List[ModelSchemaAgeGroupsArrResult]] = Gen.containerOf[List,ModelSchemaAgeGroupsArrResult](ModelSchemaAgeGroupsArrResultGenerator) - def ModelSchemaAgeGroupsArrResultGenerator = { import ModelSchemaAgeGroupsArrResult._ ; Gen.oneOf(Seq(Baby, Kid, Teen, Adult)) } - def ModelSchemaRootMetaGenerator = Gen.option(MetaGenerator) + def ModelSchemaAgeGroupsSeqEnumGenerator = { import ModelSchemaAgeGroupsSeqEnum._ ; Gen.oneOf(Seq(Baby, Kid, Teen, Adult)) } def createModelSchemaRootGenerator = _generate(ModelSchemaRootGenerator) def createErrorsGenerator = _generate(ErrorsGenerator) - def createErrorSourceNameClashGenerator = _generate(ErrorSourceNameClashGenerator) + def createErrorSourceGenerator = _generate(ErrorSourceGenerator) def createMetaGenerator = _generate(MetaGenerator) def createModelSchemaGenerator = _generate(ModelSchemaGenerator) def createErrorGenerator = _generate(ErrorGenerator) @@ -53,43 +29,43 @@ object Generators extends JsValueGenerators { def ModelSchemaRootGenerator = for { - data <- ModelSchemaRootDataGenerator - meta <- ModelSchemaRootMetaGenerator - links <- ModelSchemaRootLinksGenerator + data <- Gen.option(ModelSchemaGenerator) + meta <- Gen.option(MetaGenerator) + links <- Gen.option(LinksGenerator) } yield ModelSchemaRoot(data, meta, links) def ErrorsGenerator = for { - errors <- ErrorsErrorsGenerator + errors <- Gen.option(Gen.containerOf[List,Error](ErrorGenerator)) } yield Errors(errors) - def ErrorSourceNameClashGenerator = for { - pointer <- MetaCopyrightGenerator - parameter <- MetaCopyrightGenerator - } yield ErrorSourceNameClash(pointer, parameter) + def ErrorSourceGenerator = for { + pointer <- Gen.option(arbitrary[String]) + parameter <- Gen.option(arbitrary[String]) + } yield ErrorSource(pointer, parameter) def MetaGenerator = for { - copyright <- MetaCopyrightGenerator + copyright <- Gen.option(arbitrary[String]) } yield Meta(copyright) def ModelSchemaGenerator = for { name <- arbitrary[String] + description <- Gen.option(arbitrary[String]) sizeRegister <- arbitrary[String] brand <- arbitrary[String] partnerArticleModelId <- arbitrary[BigInt] - description <- MetaCopyrightGenerator - ageGroups <- ModelSchemaAgeGroupsGenerator - keywords <- ModelSchemaKeywordsGenerator - lengthRegister <- ModelSchemaLengthRegisterGenerator + keywords <- Gen.option(arbitrary[String]) + lengthRegister <- Gen.option(arbitrary[String]) + specialDescriptions <- Gen.option(Gen.containerOf[List,String](arbitrary[String])) + articleModelAttributes <- Gen.option(Gen.containerOf[List,String](arbitrary[String])) silhouetteId <- ModelSchemaSilhouetteIdGenerator - specialDescriptions <- ModelSchemaSpecialDescriptionsGenerator - articleModelAttributes <- ModelSchemaSpecialDescriptionsGenerator - } yield ModelSchema(name, sizeRegister, brand, partnerArticleModelId, description, ageGroups, keywords, lengthRegister, silhouetteId, specialDescriptions, articleModelAttributes) + ageGroups <- Gen.containerOf[List,ModelSchemaAgeGroupsSeqEnum](ModelSchemaAgeGroupsSeqEnumGenerator) + } yield ModelSchema(name, description, sizeRegister, brand, partnerArticleModelId, keywords, lengthRegister, specialDescriptions, articleModelAttributes, silhouetteId, ageGroups) def ErrorGenerator = for { - source <- ErrorSourceGenerator - code <- MetaCopyrightGenerator - status <- MetaCopyrightGenerator - detail <- MetaCopyrightGenerator - title <- MetaCopyrightGenerator - } yield Error(source, code, status, detail, title) + code <- Gen.option(arbitrary[String]) + status <- Gen.option(arbitrary[String]) + detail <- Gen.option(arbitrary[String]) + title <- Gen.option(arbitrary[String]) + source <- Gen.option(ErrorSourceGenerator) + } yield Error(code, status, detail, title, source) def LinksGenerator = for { - self <- MetaCopyrightGenerator - related <- MetaCopyrightGenerator + self <- Gen.option(arbitrary[String]) + related <- Gen.option(arbitrary[String]) } yield Links(self, related) def _generate[T](gen: Gen[T]) = (count: Int) => for (i <- 1 to count) yield gen.sample diff --git a/play-scala-generator/src/test/resources/expected_results/test_data/expanded_polymorphism_yaml.scala b/play-scala-generator/src/test/resources/expected_results/test_data/expanded_polymorphism_yaml.scala index ebf07dd6..b5128485 100644 --- a/play-scala-generator/src/test/resources/expected_results/test_data/expanded_polymorphism_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/test_data/expanded_polymorphism_yaml.scala @@ -12,21 +12,17 @@ object Generators extends JsValueGenerators { def createNullGenerator = _generate(NullGenerator) def createLongGenerator = _generate(LongGenerator) - def createPetsGetLimitGenerator = _generate(PetsGetLimitGenerator) - def createPetsGetTagsOptGenerator = _generate(PetsGetTagsOptGenerator) - def createNewPetTagGenerator = _generate(NewPetTagGenerator) - def createPetsGetResponses200Generator = _generate(PetsGetResponses200Generator) - def createPetsGetTagsGenerator = _generate(PetsGetTagsGenerator) + def createOptionIntGenerator = _generate(OptionIntGenerator) + def createSeqPetGenerator = _generate(SeqPetGenerator) + def createOptionArrayWrapperStringGenerator = _generate(OptionArrayWrapperStringGenerator) def NullGenerator = arbitrary[Null] def LongGenerator = arbitrary[Long] - def PetsGetLimitGenerator = Gen.option(arbitrary[Int]) - def PetsGetTagsOptGenerator = _genList(arbitrary[String], "csv") - def NewPetTagGenerator = Gen.option(arbitrary[String]) - def PetsGetResponses200Generator: Gen[List[Pet]] = Gen.containerOf[List,Pet](PetGenerator) - def PetsGetTagsGenerator = Gen.option(PetsGetTagsOptGenerator) + def OptionIntGenerator = Gen.option(arbitrary[Int]) + def SeqPetGenerator: Gen[List[Pet]] = Gen.containerOf[List,Pet](PetGenerator) + def OptionArrayWrapperStringGenerator = Gen.option(_genList(arbitrary[String], "csv")) def createNewPetGenerator = _generate(NewPetGenerator) @@ -36,11 +32,11 @@ object Generators extends JsValueGenerators { def NewPetGenerator = for { name <- arbitrary[String] - tag <- NewPetTagGenerator + tag <- Gen.option(arbitrary[String]) } yield NewPet(name, tag) def PetGenerator = for { name <- arbitrary[String] - tag <- NewPetTagGenerator + tag <- Gen.option(arbitrary[String]) id <- arbitrary[Long] } yield Pet(name, tag, id) def ErrorGenerator = for { diff --git a/play-scala-generator/src/test/resources/expected_results/test_data/foodpanda_yaml.scala b/play-scala-generator/src/test/resources/expected_results/test_data/foodpanda_yaml.scala new file mode 100644 index 00000000..3304e750 --- /dev/null +++ b/play-scala-generator/src/test/resources/expected_results/test_data/foodpanda_yaml.scala @@ -0,0 +1,51 @@ +package com.foodpanda.popsey.api + +import org.scalacheck.Gen +import org.scalacheck.Arbitrary +import play.api.libs.json.scalacheck.JsValueGenerators +import Arbitrary._ + +object Generators extends JsValueGenerators { + + + + def createVendorQueryIncludesOptionEnumGenerator = _generate(VendorQueryIncludesOptionEnumGenerator) + def createIntGenerator = _generate(IntGenerator) + + + + def VendorQueryIncludesOptionEnumGenerator = { import VendorQueryIncludesOptionEnum._ ; Gen.oneOf(Seq(Menus, Payments)) } + def IntGenerator = arbitrary[Int] + + + def createVendorsResponseGenerator = _generate(VendorsResponseGenerator) + def createLocationGenerator = _generate(LocationGenerator) + def createVendorGenerator = _generate(VendorGenerator) + def createVendorQueryGenerator = _generate(VendorQueryGenerator) + + + def VendorsResponseGenerator = for { + total_hits <- arbitrary[Int] + vendors <- Gen.option(Gen.containerOf[List,Vendor](VendorGenerator)) + } yield VendorsResponse(total_hits, vendors) + def LocationGenerator = for { + latitude <- arbitrary[Float] + longitude <- arbitrary[Float] + } yield Location(latitude, longitude) + def VendorGenerator = for { + id <- arbitrary[Long] + location <- Gen.option(LocationGenerator) + } yield Vendor(id, location) + def VendorQueryGenerator = for { + vendor_codes <- Gen.option(Gen.containerOf[List,String](arbitrary[String])) + includes <- Gen.option(VendorQueryIncludesOptionEnumGenerator) + } yield VendorQuery(vendor_codes, includes) + + def _generate[T](gen: Gen[T]) = (count: Int) => for (i <- 1 to count) yield gen.sample + + + + + + +} \ No newline at end of file diff --git a/play-scala-generator/src/test/resources/expected_results/test_data/form_data_yaml.scala b/play-scala-generator/src/test/resources/expected_results/test_data/form_data_yaml.scala index c49cbca7..1fae5212 100644 --- a/play-scala-generator/src/test/resources/expected_results/test_data/form_data_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/test_data/form_data_yaml.scala @@ -4,26 +4,24 @@ import org.scalacheck.Gen import org.scalacheck.Arbitrary import play.api.libs.json.scalacheck.JsValueGenerators import Arbitrary._ -import java.io.File import scala.math.BigInt +import java.io.File object Generators extends JsValueGenerators { - def createMultipartPostAvatarGenerator = _generate(MultipartPostAvatarGenerator) - def createBothPostResponses200NameGenerator = _generate(BothPostResponses200NameGenerator) + def createOptionFileGenerator = _generate(OptionFileGenerator) def createStringGenerator = _generate(StringGenerator) def createFileGenerator = _generate(FileGenerator) - def createBothPostYearGenerator = _generate(BothPostYearGenerator) + def createOptionBigIntGenerator = _generate(OptionBigIntGenerator) - def MultipartPostAvatarGenerator = Gen.option(arbitrary[File]) - def BothPostResponses200NameGenerator = Gen.option(arbitrary[String]) + def OptionFileGenerator = Gen.option(arbitrary[File]) def StringGenerator = arbitrary[String] def FileGenerator = arbitrary[File] - def BothPostYearGenerator = Gen.option(arbitrary[BigInt]) + def OptionBigIntGenerator = Gen.option(arbitrary[BigInt]) def createMultipartPostResponses200Generator = _generate(MultipartPostResponses200Generator) @@ -31,16 +29,16 @@ object Generators extends JsValueGenerators { def MultipartPostResponses200Generator = for { - name <- BothPostResponses200NameGenerator - year <- BothPostYearGenerator - fileSize <- BothPostYearGenerator - fileName <- BothPostResponses200NameGenerator + name <- Gen.option(arbitrary[String]) + year <- Gen.option(arbitrary[BigInt]) + fileSize <- Gen.option(arbitrary[BigInt]) + fileName <- Gen.option(arbitrary[String]) } yield MultipartPostResponses200(name, year, fileSize, fileName) def BothPostResponses200Generator = for { - name <- BothPostResponses200NameGenerator - year <- BothPostYearGenerator - avatarSize <- BothPostYearGenerator - ringtoneSize <- BothPostYearGenerator + name <- Gen.option(arbitrary[String]) + year <- Gen.option(arbitrary[BigInt]) + avatarSize <- Gen.option(arbitrary[BigInt]) + ringtoneSize <- Gen.option(arbitrary[BigInt]) } yield BothPostResponses200(name, year, avatarSize, ringtoneSize) def _generate[T](gen: Gen[T]) = (count: Int) => for (i <- 1 to count) yield gen.sample diff --git a/play-scala-generator/src/test/resources/expected_results/test_data/full_petstore_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/test_data/full_petstore_api_yaml.scala index e62095d6..96659be1 100644 --- a/play-scala-generator/src/test/resources/expected_results/test_data/full_petstore_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/test_data/full_petstore_api_yaml.scala @@ -4,8 +4,8 @@ import org.scalacheck.Gen import org.scalacheck.Arbitrary import play.api.libs.json.scalacheck.JsValueGenerators import Arbitrary._ -import de.zalando.play.controllers.ArrayWrapper import java.time.ZonedDateTime +import de.zalando.play.controllers.ArrayWrapper object Generators extends JsValueGenerators { @@ -13,47 +13,27 @@ object Generators extends JsValueGenerators { def createStringGenerator = _generate(StringGenerator) def createNullGenerator = _generate(NullGenerator) - def createOrderStatusGenerator = _generate(OrderStatusGenerator) - def createPetsFindByStatusGetStatusOptGenerator = _generate(PetsFindByStatusGetStatusOptGenerator) - def createUsersCreateWithListPostBodyOptGenerator = _generate(UsersCreateWithListPostBodyOptGenerator) - def createOrderPetIdGenerator = _generate(OrderPetIdGenerator) - def createPetsFindByStatusGetResponses200Generator = _generate(PetsFindByStatusGetResponses200Generator) - def createPetsPostBodyGenerator = _generate(PetsPostBodyGenerator) - def createOrderShipDateGenerator = _generate(OrderShipDateGenerator) - def createUsersUsernamePutBodyGenerator = _generate(UsersUsernamePutBodyGenerator) - def createStoresOrderPostBodyGenerator = _generate(StoresOrderPostBodyGenerator) - def createOrderCompleteGenerator = _generate(OrderCompleteGenerator) - def createPetTagsGenerator = _generate(PetTagsGenerator) + def createOptionStringGenerator = _generate(OptionStringGenerator) + def createSeqPetGenerator = _generate(SeqPetGenerator) + def createOptionPetGenerator = _generate(OptionPetGenerator) + def createOptionUserGenerator = _generate(OptionUserGenerator) + def createOptionOrderGenerator = _generate(OptionOrderGenerator) def createLongGenerator = _generate(LongGenerator) - def createOrderQuantityGenerator = _generate(OrderQuantityGenerator) - def createPetPhotoUrlsGenerator = _generate(PetPhotoUrlsGenerator) - def createUsersCreateWithListPostBodyGenerator = _generate(UsersCreateWithListPostBodyGenerator) - def createPetsFindByStatusGetStatusGenerator = _generate(PetsFindByStatusGetStatusGenerator) - def createPetCategoryGenerator = _generate(PetCategoryGenerator) - def createPetTagsOptGenerator = _generate(PetTagsOptGenerator) + def createOptionSeqUserGenerator = _generate(OptionSeqUserGenerator) + def createOptionArrayWrapperStringGenerator = _generate(OptionArrayWrapperStringGenerator) def StringGenerator = arbitrary[String] def NullGenerator = arbitrary[Null] - def OrderStatusGenerator = Gen.option(arbitrary[String]) - def PetsFindByStatusGetStatusOptGenerator = _genList(arbitrary[String], "multi") - def UsersCreateWithListPostBodyOptGenerator: Gen[List[User]] = Gen.containerOf[List,User](UserGenerator) - def OrderPetIdGenerator = Gen.option(arbitrary[Long]) - def PetsFindByStatusGetResponses200Generator: Gen[List[Pet]] = Gen.containerOf[List,Pet](PetGenerator) - def PetsPostBodyGenerator = Gen.option(PetGenerator) - def OrderShipDateGenerator = Gen.option(arbitrary[ZonedDateTime]) - def UsersUsernamePutBodyGenerator = Gen.option(UserGenerator) - def StoresOrderPostBodyGenerator = Gen.option(OrderGenerator) - def OrderCompleteGenerator = Gen.option(arbitrary[Boolean]) - def PetTagsGenerator = Gen.option(PetTagsOptGenerator) + def OptionStringGenerator = Gen.option(arbitrary[String]) + def SeqPetGenerator: Gen[List[Pet]] = Gen.containerOf[List,Pet](PetGenerator) + def OptionPetGenerator = Gen.option(PetGenerator) + def OptionUserGenerator = Gen.option(UserGenerator) + def OptionOrderGenerator = Gen.option(OrderGenerator) def LongGenerator = arbitrary[Long] - def OrderQuantityGenerator = Gen.option(arbitrary[Int]) - def PetPhotoUrlsGenerator: Gen[List[String]] = Gen.containerOf[List,String](arbitrary[String]) - def UsersCreateWithListPostBodyGenerator = Gen.option(UsersCreateWithListPostBodyOptGenerator) - def PetsFindByStatusGetStatusGenerator = Gen.option(PetsFindByStatusGetStatusOptGenerator) - def PetCategoryGenerator = Gen.option(TagGenerator) - def PetTagsOptGenerator: Gen[List[Tag]] = Gen.containerOf[List,Tag](TagGenerator) + def OptionSeqUserGenerator = Gen.option(Gen.containerOf[List,User](UserGenerator)) + def OptionArrayWrapperStringGenerator = Gen.option(_genList(arbitrary[String], "multi")) def createUserGenerator = _generate(UserGenerator) @@ -63,35 +43,35 @@ object Generators extends JsValueGenerators { def UserGenerator = for { - email <- OrderStatusGenerator - username <- OrderStatusGenerator - userStatus <- OrderQuantityGenerator - lastName <- OrderStatusGenerator - firstName <- OrderStatusGenerator - id <- OrderPetIdGenerator - phone <- OrderStatusGenerator - password <- OrderStatusGenerator + email <- Gen.option(arbitrary[String]) + username <- Gen.option(arbitrary[String]) + userStatus <- Gen.option(arbitrary[Int]) + lastName <- Gen.option(arbitrary[String]) + firstName <- Gen.option(arbitrary[String]) + id <- Gen.option(arbitrary[Long]) + phone <- Gen.option(arbitrary[String]) + password <- Gen.option(arbitrary[String]) } yield User(email, username, userStatus, lastName, firstName, id, phone, password) def OrderGenerator = for { - shipDate <- OrderShipDateGenerator - quantity <- OrderQuantityGenerator - petId <- OrderPetIdGenerator - id <- OrderPetIdGenerator - complete <- OrderCompleteGenerator - status <- OrderStatusGenerator + shipDate <- Gen.option(arbitrary[ZonedDateTime]) + quantity <- Gen.option(arbitrary[Int]) + petId <- Gen.option(arbitrary[Long]) + id <- Gen.option(arbitrary[Long]) + complete <- Gen.option(arbitrary[Boolean]) + status <- Gen.option(arbitrary[String]) } yield Order(shipDate, quantity, petId, id, complete, status) def TagGenerator = for { - id <- OrderPetIdGenerator - name <- OrderStatusGenerator + id <- Gen.option(arbitrary[Long]) + name <- Gen.option(arbitrary[String]) } yield Tag(id, name) def PetGenerator = for { name <- arbitrary[String] - tags <- PetTagsGenerator - photoUrls <- PetPhotoUrlsGenerator - id <- OrderPetIdGenerator - status <- OrderStatusGenerator - category <- PetCategoryGenerator - } yield Pet(name, tags, photoUrls, id, status, category) + photoUrls <- Gen.containerOf[List,String](arbitrary[String]) + id <- Gen.option(arbitrary[Long]) + status <- Gen.option(arbitrary[String]) + tags <- Gen.option(Gen.containerOf[List,Tag](TagGenerator)) + category <- Gen.option(TagGenerator) + } yield Pet(name, photoUrls, id, status, tags, category) def _generate[T](gen: Gen[T]) = (count: Int) => for (i <- 1 to count) yield gen.sample diff --git a/play-scala-generator/src/test/resources/expected_results/test_data/hackweek_yaml.scala b/play-scala-generator/src/test/resources/expected_results/test_data/hackweek_yaml.scala index f409da8a..a4e4ad3b 100644 --- a/play-scala-generator/src/test/resources/expected_results/test_data/hackweek_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/test_data/hackweek_yaml.scala @@ -10,42 +10,18 @@ object Generators extends JsValueGenerators { - def createModelSchemaSpecialDescriptionsOptGenerator = _generate(ModelSchemaSpecialDescriptionsOptGenerator) - def createMetaCopyrightGenerator = _generate(MetaCopyrightGenerator) - def createModelSchemaKeywordsGenerator = _generate(ModelSchemaKeywordsGenerator) - def createModelSchemaSpecialDescriptionsGenerator = _generate(ModelSchemaSpecialDescriptionsGenerator) - def createErrorsErrorsOptGenerator = _generate(ErrorsErrorsOptGenerator) - def createModelSchemaRootDataGenerator = _generate(ModelSchemaRootDataGenerator) - def createErrorSourceGenerator = _generate(ErrorSourceGenerator) - def createModelSchemaRootLinksGenerator = _generate(ModelSchemaRootLinksGenerator) def createModelSchemaSilhouetteIdGenerator = _generate(ModelSchemaSilhouetteIdGenerator) - def createModelSchemaLengthRegisterGenerator = _generate(ModelSchemaLengthRegisterGenerator) - def createErrorsErrorsGenerator = _generate(ErrorsErrorsGenerator) - def createModelSchemaAgeGroupsGenerator = _generate(ModelSchemaAgeGroupsGenerator) - def createModelSchemaAgeGroupsArrResultGenerator = _generate(ModelSchemaAgeGroupsArrResultGenerator) - def createModelSchemaRootMetaGenerator = _generate(ModelSchemaRootMetaGenerator) + def createModelSchemaAgeGroupsSeqEnumGenerator = _generate(ModelSchemaAgeGroupsSeqEnumGenerator) - def ModelSchemaSpecialDescriptionsOptGenerator: Gen[List[String]] = Gen.containerOf[List,String](arbitrary[String]) - def MetaCopyrightGenerator = Gen.option(arbitrary[String]) - def ModelSchemaKeywordsGenerator = Gen.option(arbitrary[String]) - def ModelSchemaSpecialDescriptionsGenerator = Gen.option(ModelSchemaSpecialDescriptionsOptGenerator) - def ErrorsErrorsOptGenerator: Gen[List[Error]] = Gen.containerOf[List,Error](ErrorGenerator) - def ModelSchemaRootDataGenerator = Gen.option(ModelSchemaGenerator) - def ErrorSourceGenerator = Gen.option(ErrorSourceNameClashGenerator) - def ModelSchemaRootLinksGenerator = Gen.option(LinksGenerator) def ModelSchemaSilhouetteIdGenerator = { import ModelSchemaSilhouetteId._ ; Gen.oneOf(Seq(Kitchen, Bikini_top, Toys, Nightwear_combination, Bra, One_piece_underwear, Ball, Cleansing, Skincare, Jewellery, Headgear, Bustier, Beach_trouser, Bedroom, Lounge, Nail, Undershirt, Combination_clothing, Gloves, Fragrance, Other_equipment, Fitness, Bathroom, One_piece_nightwear, Sleeping_bag, Coat, Case, Sandals, Ankle_boots, Stocking, Shirt, Backpack, Face_cosmetic, Travel_equipment, Hair, Sneaker, Beauty_equipment, Bikini_combination, Backless_slipper, Beach_accessoires, Scarf, First_shoe, Voucher, Wallet, Peeling, Glasses, Boards, Sun, Shave, Low_shoe, Underwear_combination, Nightdress, Suit_accessoires, Watch, Headphones, Skates, Boots, Jacket, Etui, Night_shirt, Other_accessoires, Vest, Bag, System, Racket, Trouser, Lip_cosmetic, Keychain, Belt, Ballerina_shoe, One_piece_suit, Night_trouser, Skirt, Tights, Beach_shirt, Dress, Bicycle, Protector, Eye_cosmetic, Bathrobe, Bicycle_equipment, Pullover, One_piece_beachwear, Underpant, Living, Cardigan, Corsage, Shoe_accessoires, Umbrella, Pumps, Tent, T_shirt_top, Ski)) } - def ModelSchemaLengthRegisterGenerator = Gen.option(arbitrary[String]) - def ErrorsErrorsGenerator = Gen.option(ErrorsErrorsOptGenerator) - def ModelSchemaAgeGroupsGenerator: Gen[List[ModelSchemaAgeGroupsArrResult]] = Gen.containerOf[List,ModelSchemaAgeGroupsArrResult](ModelSchemaAgeGroupsArrResultGenerator) - def ModelSchemaAgeGroupsArrResultGenerator = { import ModelSchemaAgeGroupsArrResult._ ; Gen.oneOf(Seq(Baby, Kid, Teen, Adult)) } - def ModelSchemaRootMetaGenerator = Gen.option(MetaGenerator) + def ModelSchemaAgeGroupsSeqEnumGenerator = { import ModelSchemaAgeGroupsSeqEnum._ ; Gen.oneOf(Seq(Baby, Kid, Teen, Adult)) } def createModelSchemaRootGenerator = _generate(ModelSchemaRootGenerator) def createErrorsGenerator = _generate(ErrorsGenerator) - def createErrorSourceNameClashGenerator = _generate(ErrorSourceNameClashGenerator) + def createErrorSourceGenerator = _generate(ErrorSourceGenerator) def createMetaGenerator = _generate(MetaGenerator) def createModelSchemaGenerator = _generate(ModelSchemaGenerator) def createErrorGenerator = _generate(ErrorGenerator) @@ -53,43 +29,43 @@ object Generators extends JsValueGenerators { def ModelSchemaRootGenerator = for { - data <- ModelSchemaRootDataGenerator - meta <- ModelSchemaRootMetaGenerator - links <- ModelSchemaRootLinksGenerator + data <- Gen.option(ModelSchemaGenerator) + meta <- Gen.option(MetaGenerator) + links <- Gen.option(LinksGenerator) } yield ModelSchemaRoot(data, meta, links) def ErrorsGenerator = for { - errors <- ErrorsErrorsGenerator + errors <- Gen.option(Gen.containerOf[List,Error](ErrorGenerator)) } yield Errors(errors) - def ErrorSourceNameClashGenerator = for { - pointer <- MetaCopyrightGenerator - parameter <- MetaCopyrightGenerator - } yield ErrorSourceNameClash(pointer, parameter) + def ErrorSourceGenerator = for { + pointer <- Gen.option(arbitrary[String]) + parameter <- Gen.option(arbitrary[String]) + } yield ErrorSource(pointer, parameter) def MetaGenerator = for { - copyright <- MetaCopyrightGenerator + copyright <- Gen.option(arbitrary[String]) } yield Meta(copyright) def ModelSchemaGenerator = for { name <- arbitrary[String] + description <- Gen.option(arbitrary[String]) sizeRegister <- arbitrary[String] brand <- arbitrary[String] partnerArticleModelId <- arbitrary[BigInt] - description <- MetaCopyrightGenerator - ageGroups <- ModelSchemaAgeGroupsGenerator - keywords <- ModelSchemaKeywordsGenerator - lengthRegister <- ModelSchemaLengthRegisterGenerator + keywords <- Gen.option(arbitrary[String]) + lengthRegister <- Gen.option(arbitrary[String]) + specialDescriptions <- Gen.option(Gen.containerOf[List,String](arbitrary[String])) + articleModelAttributes <- Gen.option(Gen.containerOf[List,String](arbitrary[String])) silhouetteId <- ModelSchemaSilhouetteIdGenerator - specialDescriptions <- ModelSchemaSpecialDescriptionsGenerator - articleModelAttributes <- ModelSchemaSpecialDescriptionsGenerator - } yield ModelSchema(name, sizeRegister, brand, partnerArticleModelId, description, ageGroups, keywords, lengthRegister, silhouetteId, specialDescriptions, articleModelAttributes) + ageGroups <- Gen.containerOf[List,ModelSchemaAgeGroupsSeqEnum](ModelSchemaAgeGroupsSeqEnumGenerator) + } yield ModelSchema(name, description, sizeRegister, brand, partnerArticleModelId, keywords, lengthRegister, specialDescriptions, articleModelAttributes, silhouetteId, ageGroups) def ErrorGenerator = for { - source <- ErrorSourceGenerator - code <- MetaCopyrightGenerator - status <- MetaCopyrightGenerator - detail <- MetaCopyrightGenerator - title <- MetaCopyrightGenerator - } yield Error(source, code, status, detail, title) + code <- Gen.option(arbitrary[String]) + status <- Gen.option(arbitrary[String]) + detail <- Gen.option(arbitrary[String]) + title <- Gen.option(arbitrary[String]) + source <- Gen.option(ErrorSourceGenerator) + } yield Error(code, status, detail, title, source) def LinksGenerator = for { - self <- MetaCopyrightGenerator - related <- MetaCopyrightGenerator + self <- Gen.option(arbitrary[String]) + related <- Gen.option(arbitrary[String]) } yield Links(self, related) def _generate[T](gen: Gen[T]) = (count: Int) => for (i <- 1 to count) yield gen.sample diff --git a/play-scala-generator/src/test/resources/expected_results/test_data/heroku_petstore_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/test_data/heroku_petstore_api_yaml.scala index 78470cd5..f521155a 100644 --- a/play-scala-generator/src/test/resources/expected_results/test_data/heroku_petstore_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/test_data/heroku_petstore_api_yaml.scala @@ -10,31 +10,27 @@ object Generators extends JsValueGenerators { - def createPetNameGenerator = _generate(PetNameGenerator) def createStringGenerator = _generate(StringGenerator) - def createPetBirthdayGenerator = _generate(PetBirthdayGenerator) def createNullGenerator = _generate(NullGenerator) def createBigIntGenerator = _generate(BigIntGenerator) - def createPutPetGenerator = _generate(PutPetGenerator) - def createGetResponses200Generator = _generate(GetResponses200Generator) + def createOptionPetGenerator = _generate(OptionPetGenerator) + def createSeqPetGenerator = _generate(SeqPetGenerator) - def PetNameGenerator = Gen.option(arbitrary[String]) def StringGenerator = arbitrary[String] - def PetBirthdayGenerator = Gen.option(arbitrary[Int]) def NullGenerator = arbitrary[Null] def BigIntGenerator = arbitrary[BigInt] - def PutPetGenerator = Gen.option(PetGenerator) - def GetResponses200Generator: Gen[List[Pet]] = Gen.containerOf[List,Pet](PetGenerator) + def OptionPetGenerator = Gen.option(PetGenerator) + def SeqPetGenerator: Gen[List[Pet]] = Gen.containerOf[List,Pet](PetGenerator) def createPetGenerator = _generate(PetGenerator) def PetGenerator = for { - name <- PetNameGenerator - birthday <- PetBirthdayGenerator + name <- Gen.option(arbitrary[String]) + birthday <- Gen.option(arbitrary[Int]) } yield Pet(name, birthday) def _generate[T](gen: Gen[T]) = (count: Int) => for (i <- 1 to count) yield gen.sample diff --git a/play-scala-generator/src/test/resources/expected_results/test_data/instagram_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/test_data/instagram_api_yaml.scala index abf198f6..7baebd5d 100644 --- a/play-scala-generator/src/test/resources/expected_results/test_data/instagram_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/test_data/instagram_api_yaml.scala @@ -11,252 +11,202 @@ object Generators extends JsValueGenerators { - def createTagsSearchGetResponses200MetaGenerator = _generate(TagsSearchGetResponses200MetaGenerator) + def createOptionBigIntGenerator = _generate(OptionBigIntGenerator) def createBigIntGenerator = _generate(BigIntGenerator) - def createMediaFilterGenerator = _generate(MediaFilterGenerator) - def createMediaMedia_idCommentsDeleteResponses200MetaGenerator = _generate(MediaMedia_idCommentsDeleteResponses200MetaGenerator) - def createUsersSelfFeedGetResponses200DataGenerator = _generate(UsersSelfFeedGetResponses200DataGenerator) - def createMediaTagsGenerator = _generate(MediaTagsGenerator) - def createMediaMedia_idLikesGetResponses200DataGenerator = _generate(MediaMedia_idLikesGetResponses200DataGenerator) - def createMediaIdGenerator = _generate(MediaIdGenerator) - def createMediaVideosLow_resolutionGenerator = _generate(MediaVideosLow_resolutionGenerator) - def createUsersUser_idRelationshipPostActionGenerator = _generate(UsersUser_idRelationshipPostActionGenerator) - def createMediaTagsOptGenerator = _generate(MediaTagsOptGenerator) - def createMediaImagesGenerator = _generate(MediaImagesGenerator) - def createMediaLikesGenerator = _generate(MediaLikesGenerator) + def createOptionBigDecimalGenerator = _generate(OptionBigDecimalGenerator) + def createOptionStringGenerator = _generate(OptionStringGenerator) + def createOptionUsersUser_idRelationshipPostActionOptionEnumGenerator = _generate(OptionUsersUser_idRelationshipPostActionOptionEnumGenerator) + def createUsersUser_idRelationshipPostActionOptionEnumGenerator = _generate(UsersUser_idRelationshipPostActionOptionEnumGenerator) def createBigIntNameClashGenerator = _generate(BigIntNameClashGenerator) - def createMediaUsers_in_photoOptGenerator = _generate(MediaUsers_in_photoOptGenerator) - def createMediaMedia_idLikesGetResponses200DataOptGenerator = _generate(MediaMedia_idLikesGetResponses200DataOptGenerator) - def createLocationsSearchGetResponses200DataGenerator = _generate(LocationsSearchGetResponses200DataGenerator) - def createMediaComments_escGenerator = _generate(MediaComments_escGenerator) - def createMediaSearchGetResponses200DataOptGenerator = _generate(MediaSearchGetResponses200DataOptGenerator) - def createCommentFromGenerator = _generate(CommentFromGenerator) - def createLocationsSearchGetResponses200DataOptGenerator = _generate(LocationsSearchGetResponses200DataOptGenerator) - def createMediaSearchGetResponses200DataGenerator = _generate(MediaSearchGetResponses200DataGenerator) - def createUsersSelfFeedGetResponses200DataOptGenerator = _generate(UsersSelfFeedGetResponses200DataOptGenerator) - def createUsersUser_idRelationshipPostActionOptGenerator = _generate(UsersUser_idRelationshipPostActionOptGenerator) - def createMediaComments_DataOptGenerator = _generate(MediaComments_DataOptGenerator) - def createUsersUser_idGetResponses200DataGenerator = _generate(UsersUser_idGetResponses200DataGenerator) - def createMediaVideosGenerator = _generate(MediaVideosGenerator) - def createMediaLocationGenerator = _generate(MediaLocationGenerator) def createNullGenerator = _generate(NullGenerator) - def createMediaComments_DataGenerator = _generate(MediaComments_DataGenerator) - def createMediaUsers_in_photoGenerator = _generate(MediaUsers_in_photoGenerator) - def createLocationLatitudeGenerator = _generate(LocationLatitudeGenerator) def createBigDecimalGenerator = _generate(BigDecimalGenerator) - def createUserCountsGenerator = _generate(UserCountsGenerator) def createStringGenerator = _generate(StringGenerator) - def TagsSearchGetResponses200MetaGenerator = Gen.option(UsersSelfRequested_byGetResponses200MetaOptGenerator) + def OptionBigIntGenerator = Gen.option(arbitrary[BigInt]) def BigIntGenerator = arbitrary[BigInt] - def MediaFilterGenerator = Gen.option(arbitrary[String]) - def MediaMedia_idCommentsDeleteResponses200MetaGenerator = Gen.option(MediaMedia_idLikesGetResponses200MetaOptGenerator) - def UsersSelfFeedGetResponses200DataGenerator = Gen.option(UsersSelfFeedGetResponses200DataOptGenerator) - def MediaTagsGenerator = Gen.option(MediaTagsOptGenerator) - def MediaMedia_idLikesGetResponses200DataGenerator = Gen.option(MediaMedia_idLikesGetResponses200DataOptGenerator) - def MediaIdGenerator = Gen.option(arbitrary[BigInt]) - def MediaVideosLow_resolutionGenerator = Gen.option(ImageGenerator) - def UsersUser_idRelationshipPostActionGenerator = Gen.option(UsersUser_idRelationshipPostActionOptGenerator) - def MediaTagsOptGenerator: Gen[List[Tag]] = Gen.containerOf[List,Tag](TagGenerator) - def MediaImagesGenerator = Gen.option(MediaImagesOptGenerator) - def MediaLikesGenerator = Gen.option(MediaLikesOptGenerator) + def OptionBigDecimalGenerator = Gen.option(arbitrary[BigDecimal]) + def OptionStringGenerator = Gen.option(arbitrary[String]) + def OptionUsersUser_idRelationshipPostActionOptionEnumGenerator = Gen.option(UsersUser_idRelationshipPostActionOptionEnumGenerator) + def UsersUser_idRelationshipPostActionOptionEnumGenerator = { import UsersUser_idRelationshipPostActionOptionEnum._ ; Gen.oneOf(Seq(Follow, Approve, Unfollow, Block, Unblock)) } def BigIntNameClashGenerator = arbitrary[BigInt] - def MediaUsers_in_photoOptGenerator: Gen[List[MiniProfile]] = Gen.containerOf[List,MiniProfile](MiniProfileGenerator) - def MediaMedia_idLikesGetResponses200DataOptGenerator: Gen[List[Like]] = Gen.containerOf[List,Like](LikeGenerator) - def LocationsSearchGetResponses200DataGenerator = Gen.option(LocationsSearchGetResponses200DataOptGenerator) - def MediaComments_escGenerator = Gen.option(MediaComments_OptGenerator) - def MediaSearchGetResponses200DataOptGenerator: Gen[List[MediaSearchGetResponses200DataOptArrResult]] = Gen.containerOf[List,MediaSearchGetResponses200DataOptArrResult](MediaSearchGetResponses200DataOptArrResultGenerator) - def CommentFromGenerator = Gen.option(MiniProfileGenerator) - def LocationsSearchGetResponses200DataOptGenerator: Gen[List[Location]] = Gen.containerOf[List,Location](LocationGenerator) - def MediaSearchGetResponses200DataGenerator = Gen.option(MediaSearchGetResponses200DataOptGenerator) - def UsersSelfFeedGetResponses200DataOptGenerator: Gen[List[Media]] = Gen.containerOf[List,Media](MediaGenerator) - def UsersUser_idRelationshipPostActionOptGenerator = { import UsersUser_idRelationshipPostActionOpt._ ; Gen.oneOf(Seq(Follow, Approve, Unfollow, Block, Unblock)) } - def MediaComments_DataOptGenerator: Gen[List[Comment]] = Gen.containerOf[List,Comment](CommentGenerator) - def UsersUser_idGetResponses200DataGenerator = Gen.option(UserGenerator) - def MediaVideosGenerator = Gen.option(MediaVideosOptGenerator) - def MediaLocationGenerator = Gen.option(LocationGenerator) def NullGenerator = arbitrary[Null] - def MediaComments_DataGenerator = Gen.option(MediaComments_DataOptGenerator) - def MediaUsers_in_photoGenerator = Gen.option(MediaUsers_in_photoOptGenerator) - def LocationLatitudeGenerator = Gen.option(arbitrary[BigDecimal]) def BigDecimalGenerator = arbitrary[BigDecimal] - def UserCountsGenerator = Gen.option(UserCountsOptGenerator) def StringGenerator = arbitrary[String] + def createUserCountsOptionCountsGenerator = _generate(UserCountsOptionCountsGenerator) def createUsersSelfFeedGetResponses200Generator = _generate(UsersSelfFeedGetResponses200Generator) + def createMediaSearchGetResponses200DataOptionSeqDataGenerator = _generate(MediaSearchGetResponses200DataOptionSeqDataGenerator) + def createTagsSearchGetResponses200MetaOptionMetaGenerator = _generate(TagsSearchGetResponses200MetaOptionMetaGenerator) def createMediaMedia_idCommentsDeleteResponses200Generator = _generate(MediaMedia_idCommentsDeleteResponses200Generator) - def createMediaSearchGetResponses200DataOptArrResultGenerator = _generate(MediaSearchGetResponses200DataOptArrResultGenerator) def createUsersUser_idFollowsGetResponses200Generator = _generate(UsersUser_idFollowsGetResponses200Generator) - def createUserCountsOptGenerator = _generate(UserCountsOptGenerator) def createUserGenerator = _generate(UserGenerator) def createTagsTag_nameMediaRecentGetResponses200Generator = _generate(TagsTag_nameMediaRecentGetResponses200Generator) def createImageGenerator = _generate(ImageGenerator) def createUsersSelfRequested_byGetResponses200Generator = _generate(UsersSelfRequested_byGetResponses200Generator) + def createMediaMedia_idCommentsDeleteResponses200MetaOptionMetaGenerator = _generate(MediaMedia_idCommentsDeleteResponses200MetaOptionMetaGenerator) def createTagGenerator = _generate(TagGenerator) - def createUsersSelfRequested_byGetResponses200MetaOptGenerator = _generate(UsersSelfRequested_byGetResponses200MetaOptGenerator) def createLocationsLocation_idGetResponses200Generator = _generate(LocationsLocation_idGetResponses200Generator) def createCommentGenerator = _generate(CommentGenerator) def createMediaGenerator = _generate(MediaGenerator) def createMediaMedia_idLikesGetResponses200Generator = _generate(MediaMedia_idLikesGetResponses200Generator) - def createMediaMedia_idLikesGetResponses200MetaOptGenerator = _generate(MediaMedia_idLikesGetResponses200MetaOptGenerator) def createMediaSearchGetResponses200Generator = _generate(MediaSearchGetResponses200Generator) def createTagsSearchGetResponses200Generator = _generate(TagsSearchGetResponses200Generator) def createLikeGenerator = _generate(LikeGenerator) - def createMediaComments_OptGenerator = _generate(MediaComments_OptGenerator) def createUsersUser_idGetResponses200Generator = _generate(UsersUser_idGetResponses200Generator) def createMediaMedia_idCommentsGetResponses200Generator = _generate(MediaMedia_idCommentsGetResponses200Generator) - def createMediaVideosOptGenerator = _generate(MediaVideosOptGenerator) + def createMediaLikesOptionLikesGenerator = _generate(MediaLikesOptionLikesGenerator) def createLocationGenerator = _generate(LocationGenerator) + def createMediaComments_OptionComments_escGenerator = _generate(MediaComments_OptionComments_escGenerator) def createMiniProfileGenerator = _generate(MiniProfileGenerator) - def createMediaLikesOptGenerator = _generate(MediaLikesOptGenerator) + def createMediaVideosOptionVideosGenerator = _generate(MediaVideosOptionVideosGenerator) + def createMediaImagesOptionImagesGenerator = _generate(MediaImagesOptionImagesGenerator) def createLocationsSearchGetResponses200Generator = _generate(LocationsSearchGetResponses200Generator) - def createMediaImagesOptGenerator = _generate(MediaImagesOptGenerator) + def UserCountsOptionCountsGenerator = for { + media <- Gen.option(arbitrary[BigInt]) + follows <- Gen.option(arbitrary[BigInt]) + follwed_by <- Gen.option(arbitrary[BigInt]) + } yield UserCountsOptionCounts(media, follows, follwed_by) def UsersSelfFeedGetResponses200Generator = for { - data <- UsersSelfFeedGetResponses200DataGenerator + data <- Gen.option(Gen.containerOf[List,Media](MediaGenerator)) } yield UsersSelfFeedGetResponses200(data) + def MediaSearchGetResponses200DataOptionSeqDataGenerator = for { + created_time <- Gen.option(arbitrary[BigInt]) + filter <- Gen.option(arbitrary[String]) + id <- Gen.option(arbitrary[BigInt]) + `type` <- Gen.option(arbitrary[String]) + location <- Gen.option(LocationGenerator) + comments_esc <- Gen.option(MediaComments_OptionComments_escGenerator) + tags <- Gen.option(Gen.containerOf[List,Tag](TagGenerator)) + users_in_photo <- Gen.option(Gen.containerOf[List,MiniProfile](MiniProfileGenerator)) + likes <- Gen.option(MediaLikesOptionLikesGenerator) + videos <- Gen.option(MediaVideosOptionVideosGenerator) + images <- Gen.option(MediaImagesOptionImagesGenerator) + user <- Gen.option(MiniProfileGenerator) + distance <- Gen.option(arbitrary[BigDecimal]) + } yield MediaSearchGetResponses200DataOptionSeqData(created_time, filter, id, `type`, location, comments_esc, tags, users_in_photo, likes, videos, images, user, distance) + def TagsSearchGetResponses200MetaOptionMetaGenerator = for { + code <- Gen.option(arbitrary[BigInt]) + } yield TagsSearchGetResponses200MetaOptionMeta(code) def MediaMedia_idCommentsDeleteResponses200Generator = for { - meta <- MediaMedia_idCommentsDeleteResponses200MetaGenerator - data <- MediaFilterGenerator - } yield MediaMedia_idCommentsDeleteResponses200(meta, data) - def MediaSearchGetResponses200DataOptArrResultGenerator = for { - location <- MediaLocationGenerator - created_time <- MediaIdGenerator - comments_esc <- MediaComments_escGenerator - tags <- MediaTagsGenerator - users_in_photo <- MediaUsers_in_photoGenerator - filter <- MediaFilterGenerator - likes <- MediaLikesGenerator - id <- MediaIdGenerator - videos <- MediaVideosGenerator - `type` <- MediaFilterGenerator - images <- MediaImagesGenerator - user <- CommentFromGenerator - distance <- LocationLatitudeGenerator - } yield MediaSearchGetResponses200DataOptArrResult(location, created_time, comments_esc, tags, users_in_photo, filter, likes, id, videos, `type`, images, user, distance) + data <- Gen.option(arbitrary[String]) + meta <- Gen.option(MediaMedia_idCommentsDeleteResponses200MetaOptionMetaGenerator) + } yield MediaMedia_idCommentsDeleteResponses200(data, meta) def UsersUser_idFollowsGetResponses200Generator = for { - data <- MediaUsers_in_photoGenerator + data <- Gen.option(Gen.containerOf[List,MiniProfile](MiniProfileGenerator)) } yield UsersUser_idFollowsGetResponses200(data) - def UserCountsOptGenerator = for { - media <- MediaIdGenerator - follows <- MediaIdGenerator - follwed_by <- MediaIdGenerator - } yield UserCountsOpt(media, follows, follwed_by) def UserGenerator = for { - website <- MediaFilterGenerator - profile_picture <- MediaFilterGenerator - username <- MediaFilterGenerator - full_name <- MediaFilterGenerator - bio <- MediaFilterGenerator - id <- MediaIdGenerator - counts <- UserCountsGenerator + website <- Gen.option(arbitrary[String]) + profile_picture <- Gen.option(arbitrary[String]) + username <- Gen.option(arbitrary[String]) + full_name <- Gen.option(arbitrary[String]) + bio <- Gen.option(arbitrary[String]) + id <- Gen.option(arbitrary[BigInt]) + counts <- Gen.option(UserCountsOptionCountsGenerator) } yield User(website, profile_picture, username, full_name, bio, id, counts) def TagsTag_nameMediaRecentGetResponses200Generator = for { - data <- MediaTagsGenerator + data <- Gen.option(Gen.containerOf[List,Tag](TagGenerator)) } yield TagsTag_nameMediaRecentGetResponses200(data) def ImageGenerator = for { - width <- MediaIdGenerator - height <- MediaIdGenerator - url <- MediaFilterGenerator + width <- Gen.option(arbitrary[BigInt]) + height <- Gen.option(arbitrary[BigInt]) + url <- Gen.option(arbitrary[String]) } yield Image(width, height, url) def UsersSelfRequested_byGetResponses200Generator = for { - meta <- TagsSearchGetResponses200MetaGenerator - data <- MediaUsers_in_photoGenerator + meta <- Gen.option(TagsSearchGetResponses200MetaOptionMetaGenerator) + data <- Gen.option(Gen.containerOf[List,MiniProfile](MiniProfileGenerator)) } yield UsersSelfRequested_byGetResponses200(meta, data) + def MediaMedia_idCommentsDeleteResponses200MetaOptionMetaGenerator = for { + code <- Gen.option(arbitrary[BigDecimal]) + } yield MediaMedia_idCommentsDeleteResponses200MetaOptionMeta(code) def TagGenerator = for { - media_count <- MediaIdGenerator - name <- MediaFilterGenerator + media_count <- Gen.option(arbitrary[BigInt]) + name <- Gen.option(arbitrary[String]) } yield Tag(media_count, name) - def UsersSelfRequested_byGetResponses200MetaOptGenerator = for { - code <- MediaIdGenerator - } yield UsersSelfRequested_byGetResponses200MetaOpt(code) def LocationsLocation_idGetResponses200Generator = for { - data <- MediaLocationGenerator + data <- Gen.option(LocationGenerator) } yield LocationsLocation_idGetResponses200(data) def CommentGenerator = for { - id <- MediaFilterGenerator - created_time <- MediaFilterGenerator - text <- MediaFilterGenerator - from <- CommentFromGenerator + id <- Gen.option(arbitrary[String]) + created_time <- Gen.option(arbitrary[String]) + text <- Gen.option(arbitrary[String]) + from <- Gen.option(MiniProfileGenerator) } yield Comment(id, created_time, text, from) def MediaGenerator = for { - location <- MediaLocationGenerator - created_time <- MediaIdGenerator - comments_esc <- MediaComments_escGenerator - tags <- MediaTagsGenerator - users_in_photo <- MediaUsers_in_photoGenerator - filter <- MediaFilterGenerator - likes <- MediaLikesGenerator - id <- MediaIdGenerator - videos <- MediaVideosGenerator - `type` <- MediaFilterGenerator - images <- MediaImagesGenerator - user <- CommentFromGenerator - } yield Media(location, created_time, comments_esc, tags, users_in_photo, filter, likes, id, videos, `type`, images, user) + created_time <- Gen.option(arbitrary[BigInt]) + filter <- Gen.option(arbitrary[String]) + id <- Gen.option(arbitrary[BigInt]) + `type` <- Gen.option(arbitrary[String]) + location <- Gen.option(LocationGenerator) + comments_esc <- Gen.option(MediaComments_OptionComments_escGenerator) + tags <- Gen.option(Gen.containerOf[List,Tag](TagGenerator)) + users_in_photo <- Gen.option(Gen.containerOf[List,MiniProfile](MiniProfileGenerator)) + likes <- Gen.option(MediaLikesOptionLikesGenerator) + videos <- Gen.option(MediaVideosOptionVideosGenerator) + images <- Gen.option(MediaImagesOptionImagesGenerator) + user <- Gen.option(MiniProfileGenerator) + } yield Media(created_time, filter, id, `type`, location, comments_esc, tags, users_in_photo, likes, videos, images, user) def MediaMedia_idLikesGetResponses200Generator = for { - meta <- MediaMedia_idCommentsDeleteResponses200MetaGenerator - data <- MediaMedia_idLikesGetResponses200DataGenerator + meta <- Gen.option(MediaMedia_idCommentsDeleteResponses200MetaOptionMetaGenerator) + data <- Gen.option(Gen.containerOf[List,Like](LikeGenerator)) } yield MediaMedia_idLikesGetResponses200(meta, data) - def MediaMedia_idLikesGetResponses200MetaOptGenerator = for { - code <- LocationLatitudeGenerator - } yield MediaMedia_idLikesGetResponses200MetaOpt(code) def MediaSearchGetResponses200Generator = for { - data <- MediaSearchGetResponses200DataGenerator + data <- Gen.option(Gen.containerOf[List,MediaSearchGetResponses200DataOptionSeqData](MediaSearchGetResponses200DataOptionSeqDataGenerator)) } yield MediaSearchGetResponses200(data) def TagsSearchGetResponses200Generator = for { - meta <- TagsSearchGetResponses200MetaGenerator - data <- MediaTagsGenerator + meta <- Gen.option(TagsSearchGetResponses200MetaOptionMetaGenerator) + data <- Gen.option(Gen.containerOf[List,Tag](TagGenerator)) } yield TagsSearchGetResponses200(meta, data) def LikeGenerator = for { - first_name <- MediaFilterGenerator - id <- MediaFilterGenerator - last_name <- MediaFilterGenerator - `type` <- MediaFilterGenerator - user_name <- MediaFilterGenerator + first_name <- Gen.option(arbitrary[String]) + id <- Gen.option(arbitrary[String]) + last_name <- Gen.option(arbitrary[String]) + `type` <- Gen.option(arbitrary[String]) + user_name <- Gen.option(arbitrary[String]) } yield Like(first_name, id, last_name, `type`, user_name) - def MediaComments_OptGenerator = for { - count <- MediaIdGenerator - data <- MediaComments_DataGenerator - } yield MediaComments_Opt(count, data) def UsersUser_idGetResponses200Generator = for { - data <- UsersUser_idGetResponses200DataGenerator + data <- Gen.option(UserGenerator) } yield UsersUser_idGetResponses200(data) def MediaMedia_idCommentsGetResponses200Generator = for { - meta <- MediaMedia_idCommentsDeleteResponses200MetaGenerator - data <- MediaComments_DataGenerator + meta <- Gen.option(MediaMedia_idCommentsDeleteResponses200MetaOptionMetaGenerator) + data <- Gen.option(Gen.containerOf[List,Comment](CommentGenerator)) } yield MediaMedia_idCommentsGetResponses200(meta, data) - def MediaVideosOptGenerator = for { - low_resolution <- MediaVideosLow_resolutionGenerator - standard_resolution <- MediaVideosLow_resolutionGenerator - } yield MediaVideosOpt(low_resolution, standard_resolution) + def MediaLikesOptionLikesGenerator = for { + count <- Gen.option(arbitrary[BigInt]) + data <- Gen.option(Gen.containerOf[List,MiniProfile](MiniProfileGenerator)) + } yield MediaLikesOptionLikes(count, data) def LocationGenerator = for { - id <- MediaFilterGenerator - name <- MediaFilterGenerator - latitude <- LocationLatitudeGenerator - longitude <- LocationLatitudeGenerator + id <- Gen.option(arbitrary[String]) + name <- Gen.option(arbitrary[String]) + latitude <- Gen.option(arbitrary[BigDecimal]) + longitude <- Gen.option(arbitrary[BigDecimal]) } yield Location(id, name, latitude, longitude) + def MediaComments_OptionComments_escGenerator = for { + count <- Gen.option(arbitrary[BigInt]) + data <- Gen.option(Gen.containerOf[List,Comment](CommentGenerator)) + } yield MediaComments_OptionComments_esc(count, data) def MiniProfileGenerator = for { - user_name <- MediaFilterGenerator - full_name <- MediaFilterGenerator - id <- MediaIdGenerator - profile_picture <- MediaFilterGenerator + user_name <- Gen.option(arbitrary[String]) + full_name <- Gen.option(arbitrary[String]) + id <- Gen.option(arbitrary[BigInt]) + profile_picture <- Gen.option(arbitrary[String]) } yield MiniProfile(user_name, full_name, id, profile_picture) - def MediaLikesOptGenerator = for { - count <- MediaIdGenerator - data <- MediaUsers_in_photoGenerator - } yield MediaLikesOpt(count, data) + def MediaVideosOptionVideosGenerator = for { + low_resolution <- Gen.option(ImageGenerator) + standard_resolution <- Gen.option(ImageGenerator) + } yield MediaVideosOptionVideos(low_resolution, standard_resolution) + def MediaImagesOptionImagesGenerator = for { + low_resolution <- Gen.option(ImageGenerator) + thumbnail <- Gen.option(ImageGenerator) + standard_resolution <- Gen.option(ImageGenerator) + } yield MediaImagesOptionImages(low_resolution, thumbnail, standard_resolution) def LocationsSearchGetResponses200Generator = for { - data <- LocationsSearchGetResponses200DataGenerator + data <- Gen.option(Gen.containerOf[List,Location](LocationGenerator)) } yield LocationsSearchGetResponses200(data) - def MediaImagesOptGenerator = for { - low_resolution <- MediaVideosLow_resolutionGenerator - thumbnail <- MediaVideosLow_resolutionGenerator - standard_resolution <- MediaVideosLow_resolutionGenerator - } yield MediaImagesOpt(low_resolution, thumbnail, standard_resolution) def _generate[T](gen: Gen[T]) = (count: Int) => for (i <- 1 to count) yield gen.sample diff --git a/play-scala-generator/src/test/resources/expected_results/test_data/nakadi_yaml.scala b/play-scala-generator/src/test/resources/expected_results/test_data/nakadi_yaml.scala index 7af0fbe9..dfcee4a8 100644 --- a/play-scala-generator/src/test/resources/expected_results/test_data/nakadi_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/test_data/nakadi_yaml.scala @@ -11,39 +11,25 @@ object Generators extends JsValueGenerators { def createStringGenerator = _generate(StringGenerator) - def createTopicsTopicEventsGetStream_timeoutGenerator = _generate(TopicsTopicEventsGetStream_timeoutGenerator) + def createOptionIntGenerator = _generate(OptionIntGenerator) def createIntGenerator = _generate(IntGenerator) - def createEventEvent_typeGenerator = _generate(EventEvent_typeGenerator) - def createSimpleStreamEventEventsOptGenerator = _generate(SimpleStreamEventEventsOptGenerator) - def createEventMetaDataParent_idGenerator = _generate(EventMetaDataParent_idGenerator) - def createEventMetadataGenerator = _generate(EventMetadataGenerator) def createNullGenerator = _generate(NullGenerator) - def createEventMetaDataScopesOptGenerator = _generate(EventMetaDataScopesOptGenerator) - def createTopicsTopicPartitionsGetResponses200Generator = _generate(TopicsTopicPartitionsGetResponses200Generator) - def createTopicsTopicEventsBatchPostEventGenerator = _generate(TopicsTopicEventsBatchPostEventGenerator) - def createSimpleStreamEventEventsGenerator = _generate(SimpleStreamEventEventsGenerator) - def createEventMetaDataScopesGenerator = _generate(EventMetaDataScopesGenerator) - def createTopicsGetResponses200Generator = _generate(TopicsGetResponses200Generator) + def createSeqTopicPartitionGenerator = _generate(SeqTopicPartitionGenerator) + def createOptionEventGenerator = _generate(OptionEventGenerator) + def createSeqTopicGenerator = _generate(SeqTopicGenerator) def StringGenerator = arbitrary[String] - def TopicsTopicEventsGetStream_timeoutGenerator = Gen.option(arbitrary[Int]) + def OptionIntGenerator = Gen.option(arbitrary[Int]) def IntGenerator = arbitrary[Int] - def EventEvent_typeGenerator = Gen.option(arbitrary[String]) - def SimpleStreamEventEventsOptGenerator: Gen[List[Event]] = Gen.containerOf[List,Event](EventGenerator) - def EventMetaDataParent_idGenerator = Gen.option(arbitrary[UUID]) - def EventMetadataGenerator = Gen.option(EventMetaDataNameClashGenerator) def NullGenerator = arbitrary[Null] - def EventMetaDataScopesOptGenerator: Gen[List[String]] = Gen.containerOf[List,String](arbitrary[String]) - def TopicsTopicPartitionsGetResponses200Generator: Gen[List[TopicPartition]] = Gen.containerOf[List,TopicPartition](TopicPartitionGenerator) - def TopicsTopicEventsBatchPostEventGenerator = Gen.option(EventGenerator) - def SimpleStreamEventEventsGenerator = Gen.option(SimpleStreamEventEventsOptGenerator) - def EventMetaDataScopesGenerator = Gen.option(EventMetaDataScopesOptGenerator) - def TopicsGetResponses200Generator: Gen[List[Topic]] = Gen.containerOf[List,Topic](TopicGenerator) + def SeqTopicPartitionGenerator: Gen[List[TopicPartition]] = Gen.containerOf[List,TopicPartition](TopicPartitionGenerator) + def OptionEventGenerator = Gen.option(EventGenerator) + def SeqTopicGenerator: Gen[List[Topic]] = Gen.containerOf[List,Topic](TopicGenerator) - def createEventMetaDataNameClashGenerator = _generate(EventMetaDataNameClashGenerator) + def createEventMetaDataGenerator = _generate(EventMetaDataGenerator) def createTopicGenerator = _generate(TopicGenerator) def createMetricsGenerator = _generate(MetricsGenerator) def createEventGenerator = _generate(EventGenerator) @@ -53,23 +39,23 @@ object Generators extends JsValueGenerators { def createSimpleStreamEventGenerator = _generate(SimpleStreamEventGenerator) - def EventMetaDataNameClashGenerator = for { - root_id <- EventMetaDataParent_idGenerator - parent_id <- EventMetaDataParent_idGenerator - scopes <- EventMetaDataScopesGenerator - id <- EventMetaDataParent_idGenerator - created <- EventEvent_typeGenerator - } yield EventMetaDataNameClash(root_id, parent_id, scopes, id, created) + def EventMetaDataGenerator = for { + root_id <- Gen.option(arbitrary[UUID]) + parent_id <- Gen.option(arbitrary[UUID]) + scopes <- Gen.option(Gen.containerOf[List,String](arbitrary[String])) + id <- Gen.option(arbitrary[UUID]) + created <- Gen.option(arbitrary[String]) + } yield EventMetaData(root_id, parent_id, scopes, id, created) def TopicGenerator = for { name <- arbitrary[String] } yield Topic(name) def MetricsGenerator = for { - name <- EventEvent_typeGenerator + name <- Gen.option(arbitrary[String]) } yield Metrics(name) def EventGenerator = for { - event_type <- EventEvent_typeGenerator - partitioning_key <- EventEvent_typeGenerator - metadata <- EventMetadataGenerator + event_type <- Gen.option(arbitrary[String]) + partitioning_key <- Gen.option(arbitrary[String]) + metadata <- Gen.option(EventMetaDataGenerator) } yield Event(event_type, partitioning_key, metadata) def CursorGenerator = for { partition <- arbitrary[String] @@ -85,7 +71,7 @@ object Generators extends JsValueGenerators { } yield TopicPartition(partition, oldest_available_offset, newest_available_offset) def SimpleStreamEventGenerator = for { cursor <- CursorGenerator - events <- SimpleStreamEventEventsGenerator + events <- Gen.option(Gen.containerOf[List,Event](EventGenerator)) } yield SimpleStreamEvent(cursor, events) def _generate[T](gen: Gen[T]) = (count: Int) => for (i <- 1 to count) yield gen.sample diff --git a/play-scala-generator/src/test/resources/expected_results/test_data/nested_arrays_yaml.scala b/play-scala-generator/src/test/resources/expected_results/test_data/nested_arrays_yaml.scala index bd0519fd..b9948194 100644 --- a/play-scala-generator/src/test/resources/expected_results/test_data/nested_arrays_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/test_data/nested_arrays_yaml.scala @@ -7,29 +7,7 @@ import Arbitrary._ object Generators extends JsValueGenerators { - - - def createExampleNestedArraysOptArrResultArrResultGenerator = _generate(ExampleNestedArraysOptArrResultArrResultGenerator) - def createExampleNestedArraysOptGenerator = _generate(ExampleNestedArraysOptGenerator) - def createExampleMessagesOptGenerator = _generate(ExampleMessagesOptGenerator) - def createExampleMessagesGenerator = _generate(ExampleMessagesGenerator) - def createExampleNestedArraysOptArrResultArrResultArrResultGenerator = _generate(ExampleNestedArraysOptArrResultArrResultArrResultGenerator) - def createExampleNestedArraysOptArrResultGenerator = _generate(ExampleNestedArraysOptArrResultGenerator) - def createExampleNestedArraysGenerator = _generate(ExampleNestedArraysGenerator) - def createExampleMessagesOptArrResultGenerator = _generate(ExampleMessagesOptArrResultGenerator) - def createActivityActionsGenerator = _generate(ActivityActionsGenerator) - - - def ExampleNestedArraysOptArrResultArrResultGenerator: Gen[List[ExampleNestedArraysOptArrResultArrResultArrResult]] = Gen.containerOf[List,ExampleNestedArraysOptArrResultArrResultArrResult](ExampleNestedArraysOptArrResultArrResultArrResultGenerator) - def ExampleNestedArraysOptGenerator: Gen[List[ExampleNestedArraysOptArrResult]] = Gen.containerOf[List,ExampleNestedArraysOptArrResult](ExampleNestedArraysOptArrResultGenerator) - def ExampleMessagesOptGenerator: Gen[List[ExampleMessagesOptArrResult]] = Gen.containerOf[List,ExampleMessagesOptArrResult](ExampleMessagesOptArrResultGenerator) - def ExampleMessagesGenerator = Gen.option(ExampleMessagesOptGenerator) - def ExampleNestedArraysOptArrResultArrResultArrResultGenerator: Gen[List[String]] = Gen.containerOf[List,String](arbitrary[String]) - def ExampleNestedArraysOptArrResultGenerator: Gen[List[ExampleNestedArraysOptArrResultArrResult]] = Gen.containerOf[List,ExampleNestedArraysOptArrResultArrResult](ExampleNestedArraysOptArrResultArrResultGenerator) - def ExampleNestedArraysGenerator = Gen.option(ExampleNestedArraysOptGenerator) - def ExampleMessagesOptArrResultGenerator: Gen[List[Activity]] = Gen.containerOf[List,Activity](ActivityGenerator) - def ActivityActionsGenerator = Gen.option(arbitrary[String]) def createActivityGenerator = _generate(ActivityGenerator) @@ -37,12 +15,12 @@ object Generators extends JsValueGenerators { def ActivityGenerator = for { - actions <- ActivityActionsGenerator + actions <- Gen.option(arbitrary[String]) } yield Activity(actions) def ExampleGenerator = for { - messages <- ExampleMessagesGenerator - nestedArrays <- ExampleNestedArraysGenerator - } yield Example(messages, nestedArrays) + nestedArrays <- Gen.option(Gen.containerOf[List,Seq](Gen.containerOf[List,Seq](Gen.containerOf[List,Seq](Gen.containerOf[List,String](arbitrary[String]))))) + messages <- Gen.option(Gen.containerOf[List,Seq](Gen.containerOf[List,Activity](ActivityGenerator))) + } yield Example(nestedArrays, messages) def _generate[T](gen: Gen[T]) = (count: Int) => for (i <- 1 to count) yield gen.sample diff --git a/play-scala-generator/src/test/resources/expected_results/test_data/nested_objects_yaml.scala b/play-scala-generator/src/test/resources/expected_results/test_data/nested_objects_yaml.scala index b9b36b80..ca1d35d4 100644 --- a/play-scala-generator/src/test/resources/expected_results/test_data/nested_objects_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/test_data/nested_objects_yaml.scala @@ -7,43 +7,31 @@ import Arbitrary._ object Generators extends JsValueGenerators { - - - def createNestedObjectsNestedGenerator = _generate(NestedObjectsNestedGenerator) - def createNestedObjectsNestedNested2Nested3BottomGenerator = _generate(NestedObjectsNestedNested2Nested3BottomGenerator) - def createNestedObjectsNestedNested2Nested3Generator = _generate(NestedObjectsNestedNested2Nested3Generator) - def createNestedObjectsPlainGenerator = _generate(NestedObjectsPlainGenerator) - - - def NestedObjectsNestedGenerator = Gen.option(NestedObjectsNestedOptGenerator) - def NestedObjectsNestedNested2Nested3BottomGenerator = Gen.option(arbitrary[String]) - def NestedObjectsNestedNested2Nested3Generator = Gen.option(NestedObjectsNestedNested2Nested3OptGenerator) - def NestedObjectsPlainGenerator = Gen.option(NestedObjectsPlainOptGenerator) - def createNestedObjectsNestedOptGenerator = _generate(NestedObjectsNestedOptGenerator) - def createNestedObjectsNestedNested2Nested3OptGenerator = _generate(NestedObjectsNestedNested2Nested3OptGenerator) + def createNestedObjectsNestedNested2Nested3OptionNested3Generator = _generate(NestedObjectsNestedNested2Nested3OptionNested3Generator) + def createNestedObjectsPlainOptionPlainGenerator = _generate(NestedObjectsPlainOptionPlainGenerator) def createNestedObjectsGenerator = _generate(NestedObjectsGenerator) - def createNestedObjectsPlainOptGenerator = _generate(NestedObjectsPlainOptGenerator) + def createNestedObjectsNestedOptionNestedGenerator = _generate(NestedObjectsNestedOptionNestedGenerator) def createNestedObjectsNestedNested2Generator = _generate(NestedObjectsNestedNested2Generator) - def NestedObjectsNestedOptGenerator = for { - nested2 <- NestedObjectsNestedNested2Generator - } yield NestedObjectsNestedOpt(nested2) - def NestedObjectsNestedNested2Nested3OptGenerator = for { - bottom <- NestedObjectsNestedNested2Nested3BottomGenerator - } yield NestedObjectsNestedNested2Nested3Opt(bottom) + def NestedObjectsNestedNested2Nested3OptionNested3Generator = for { + bottom <- Gen.option(arbitrary[String]) + } yield NestedObjectsNestedNested2Nested3OptionNested3(bottom) + def NestedObjectsPlainOptionPlainGenerator = for { + simple <- arbitrary[String] + } yield NestedObjectsPlainOptionPlain(simple) def NestedObjectsGenerator = for { - plain <- NestedObjectsPlainGenerator - nested <- NestedObjectsNestedGenerator + plain <- Gen.option(NestedObjectsPlainOptionPlainGenerator) + nested <- Gen.option(NestedObjectsNestedOptionNestedGenerator) } yield NestedObjects(plain, nested) - def NestedObjectsPlainOptGenerator = for { - simple <- arbitrary[String] - } yield NestedObjectsPlainOpt(simple) + def NestedObjectsNestedOptionNestedGenerator = for { + nested2 <- NestedObjectsNestedNested2Generator + } yield NestedObjectsNestedOptionNested(nested2) def NestedObjectsNestedNested2Generator = for { - nested3 <- NestedObjectsNestedNested2Nested3Generator + nested3 <- Gen.option(NestedObjectsNestedNested2Nested3OptionNested3Generator) } yield NestedObjectsNestedNested2(nested3) def _generate[T](gen: Gen[T]) = (count: Int) => for (i <- 1 to count) yield gen.sample diff --git a/play-scala-generator/src/test/resources/expected_results/test_data/nested_options_yaml.scala b/play-scala-generator/src/test/resources/expected_results/test_data/nested_options_yaml.scala index 64c876c0..66639fd3 100644 --- a/play-scala-generator/src/test/resources/expected_results/test_data/nested_options_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/test_data/nested_options_yaml.scala @@ -7,27 +7,19 @@ import Arbitrary._ object Generators extends JsValueGenerators { - - - def createBasicOptionalGenerator = _generate(BasicOptionalGenerator) - def createBasicOptionalNested_optionalGenerator = _generate(BasicOptionalNested_optionalGenerator) - - - def BasicOptionalGenerator = Gen.option(BasicOptionalOptGenerator) - def BasicOptionalNested_optionalGenerator = Gen.option(arbitrary[String]) def createBasicGenerator = _generate(BasicGenerator) - def createBasicOptionalOptGenerator = _generate(BasicOptionalOptGenerator) + def createBasicOptionalOptionOptionalGenerator = _generate(BasicOptionalOptionOptionalGenerator) def BasicGenerator = for { - optional <- BasicOptionalGenerator + optional <- Gen.option(BasicOptionalOptionOptionalGenerator) } yield Basic(optional) - def BasicOptionalOptGenerator = for { - nested_optional <- BasicOptionalNested_optionalGenerator - } yield BasicOptionalOpt(nested_optional) + def BasicOptionalOptionOptionalGenerator = for { + nested_optional <- Gen.option(arbitrary[String]) + } yield BasicOptionalOptionOptional(nested_optional) def _generate[T](gen: Gen[T]) = (count: Int) => for (i <- 1 to count) yield gen.sample diff --git a/play-scala-generator/src/test/resources/expected_results/test_data/options_yaml.scala b/play-scala-generator/src/test/resources/expected_results/test_data/options_yaml.scala index 6e1f3135..33cd9e5c 100644 --- a/play-scala-generator/src/test/resources/expected_results/test_data/options_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/test_data/options_yaml.scala @@ -7,15 +7,7 @@ import Arbitrary._ object Generators extends JsValueGenerators { - - - def createBasicRequiredGenerator = _generate(BasicRequiredGenerator) - def createBasicOptionalGenerator = _generate(BasicOptionalGenerator) - - - def BasicRequiredGenerator: Gen[List[String]] = Gen.containerOf[List,String](arbitrary[String]) - def BasicOptionalGenerator = Gen.option(BasicRequiredGenerator) def createBasicGenerator = _generate(BasicGenerator) @@ -23,8 +15,8 @@ object Generators extends JsValueGenerators { def BasicGenerator = for { id <- arbitrary[Long] - required <- BasicRequiredGenerator - optional <- BasicOptionalGenerator + required <- Gen.containerOf[List,String](arbitrary[String]) + optional <- Gen.option(Gen.containerOf[List,String](arbitrary[String])) } yield Basic(id, required, optional) def _generate[T](gen: Gen[T]) = (count: Int) => for (i <- 1 to count) yield gen.sample diff --git a/play-scala-generator/src/test/resources/expected_results/test_data/security_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/test_data/security_api_yaml.scala index 3f9fd067..548c7e24 100644 --- a/play-scala-generator/src/test/resources/expected_results/test_data/security_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/test_data/security_api_yaml.scala @@ -10,15 +10,13 @@ object Generators extends JsValueGenerators { - def createPetsIdGetIdGenerator = _generate(PetsIdGetIdGenerator) - def createPetsIdGetResponses200Generator = _generate(PetsIdGetResponses200Generator) - def createPetTagGenerator = _generate(PetTagGenerator) + def createArrayWrapperStringGenerator = _generate(ArrayWrapperStringGenerator) + def createSeqPetGenerator = _generate(SeqPetGenerator) - def PetsIdGetIdGenerator = _genList(arbitrary[String], "csv") - def PetsIdGetResponses200Generator: Gen[List[Pet]] = Gen.containerOf[List,Pet](PetGenerator) - def PetTagGenerator = Gen.option(arbitrary[String]) + def ArrayWrapperStringGenerator = _genList(arbitrary[String], "csv") + def SeqPetGenerator: Gen[List[Pet]] = Gen.containerOf[List,Pet](PetGenerator) def createErrorModelGenerator = _generate(ErrorModelGenerator) @@ -31,7 +29,7 @@ object Generators extends JsValueGenerators { } yield ErrorModel(code, message) def PetGenerator = for { name <- arbitrary[String] - tag <- PetTagGenerator + tag <- Gen.option(arbitrary[String]) } yield Pet(name, tag) def _generate[T](gen: Gen[T]) = (count: Int) => for (i <- 1 to count) yield gen.sample diff --git a/play-scala-generator/src/test/resources/expected_results/test_data/simple_petstore_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/test_data/simple_petstore_api_yaml.scala index ea2011b6..50c8e7f7 100644 --- a/play-scala-generator/src/test/resources/expected_results/test_data/simple_petstore_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/test_data/simple_petstore_api_yaml.scala @@ -11,24 +11,18 @@ object Generators extends JsValueGenerators { def createNullGenerator = _generate(NullGenerator) - def createNewPetTagGenerator = _generate(NewPetTagGenerator) def createLongGenerator = _generate(LongGenerator) - def createPetsGetLimitGenerator = _generate(PetsGetLimitGenerator) - def createNewPetIdGenerator = _generate(NewPetIdGenerator) - def createPetsGetTagsOptGenerator = _generate(PetsGetTagsOptGenerator) - def createPetsGetResponses200Generator = _generate(PetsGetResponses200Generator) - def createPetsGetTagsGenerator = _generate(PetsGetTagsGenerator) + def createOptionIntGenerator = _generate(OptionIntGenerator) + def createSeqPetGenerator = _generate(SeqPetGenerator) + def createOptionArrayWrapperStringGenerator = _generate(OptionArrayWrapperStringGenerator) def NullGenerator = arbitrary[Null] - def NewPetTagGenerator = Gen.option(arbitrary[String]) def LongGenerator = arbitrary[Long] - def PetsGetLimitGenerator = Gen.option(arbitrary[Int]) - def NewPetIdGenerator = Gen.option(arbitrary[Long]) - def PetsGetTagsOptGenerator = _genList(arbitrary[String], "csv") - def PetsGetResponses200Generator: Gen[List[Pet]] = Gen.containerOf[List,Pet](PetGenerator) - def PetsGetTagsGenerator = Gen.option(PetsGetTagsOptGenerator) + def OptionIntGenerator = Gen.option(arbitrary[Int]) + def SeqPetGenerator: Gen[List[Pet]] = Gen.containerOf[List,Pet](PetGenerator) + def OptionArrayWrapperStringGenerator = Gen.option(_genList(arbitrary[String], "csv")) def createErrorModelGenerator = _generate(ErrorModelGenerator) @@ -43,13 +37,13 @@ object Generators extends JsValueGenerators { def PetGenerator = for { id <- arbitrary[Long] name <- arbitrary[String] - tag <- NewPetTagGenerator + tag <- Gen.option(arbitrary[String]) } yield Pet(id, name, tag) def NewPetGenerator = for { + id <- Gen.option(arbitrary[Long]) name <- arbitrary[String] - id <- NewPetIdGenerator - tag <- NewPetTagGenerator - } yield NewPet(name, id, tag) + tag <- Gen.option(arbitrary[String]) + } yield NewPet(id, name, tag) def _generate[T](gen: Gen[T]) = (count: Int) => for (i <- 1 to count) yield gen.sample diff --git a/play-scala-generator/src/test/resources/expected_results/test_data/split_petstore_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/test_data/split_petstore_api_yaml.scala index 017f0e40..018c820e 100644 --- a/play-scala-generator/src/test/resources/expected_results/test_data/split_petstore_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/test_data/split_petstore_api_yaml.scala @@ -4,8 +4,8 @@ import org.scalacheck.Gen import org.scalacheck.Arbitrary import play.api.libs.json.scalacheck.JsValueGenerators import Arbitrary._ -import de.zalando.play.controllers.ArrayWrapper import java.time.ZonedDateTime +import de.zalando.play.controllers.ArrayWrapper object Generators extends JsValueGenerators { @@ -13,84 +13,64 @@ object Generators extends JsValueGenerators { def createStringGenerator = _generate(StringGenerator) def createNullGenerator = _generate(NullGenerator) - def createOrderStatusGenerator = _generate(OrderStatusGenerator) - def createPetsFindByStatusGetStatusOptGenerator = _generate(PetsFindByStatusGetStatusOptGenerator) - def createUsersCreateWithListPostBodyOptGenerator = _generate(UsersCreateWithListPostBodyOptGenerator) - def createOrderPetIdGenerator = _generate(OrderPetIdGenerator) - def createPetsFindByStatusGetResponses200Generator = _generate(PetsFindByStatusGetResponses200Generator) - def createPetsPostBodyGenerator = _generate(PetsPostBodyGenerator) - def createOrderShipDateGenerator = _generate(OrderShipDateGenerator) - def createUsersUsernamePutBodyGenerator = _generate(UsersUsernamePutBodyGenerator) - def createStoresOrderPostBodyGenerator = _generate(StoresOrderPostBodyGenerator) - def createOrderCompleteGenerator = _generate(OrderCompleteGenerator) - def createPetTagsGenerator = _generate(PetTagsGenerator) + def createOptionStringGenerator = _generate(OptionStringGenerator) + def createSeqPetGenerator = _generate(SeqPetGenerator) + def createOptionPetGenerator = _generate(OptionPetGenerator) + def createOptionUserGenerator = _generate(OptionUserGenerator) + def createOptionOrderGenerator = _generate(OptionOrderGenerator) def createLongGenerator = _generate(LongGenerator) - def createOrderQuantityGenerator = _generate(OrderQuantityGenerator) - def createPetPhotoUrlsGenerator = _generate(PetPhotoUrlsGenerator) - def createUsersCreateWithListPostBodyGenerator = _generate(UsersCreateWithListPostBodyGenerator) - def createPetsFindByStatusGetStatusGenerator = _generate(PetsFindByStatusGetStatusGenerator) - def createPetCategoryGenerator = _generate(PetCategoryGenerator) - def createPetTagsOptGenerator = _generate(PetTagsOptGenerator) + def createOptionSeqUserGenerator = _generate(OptionSeqUserGenerator) + def createOptionArrayWrapperStringGenerator = _generate(OptionArrayWrapperStringGenerator) def StringGenerator = arbitrary[String] def NullGenerator = arbitrary[Null] - def OrderStatusGenerator = Gen.option(arbitrary[String]) - def PetsFindByStatusGetStatusOptGenerator = _genList(arbitrary[String], "multi") - def UsersCreateWithListPostBodyOptGenerator: Gen[List[User]] = Gen.containerOf[List,User](UserGenerator) - def OrderPetIdGenerator = Gen.option(arbitrary[Long]) - def PetsFindByStatusGetResponses200Generator: Gen[List[Pet]] = Gen.containerOf[List,Pet](PetGenerator) - def PetsPostBodyGenerator = Gen.option(PetGenerator) - def OrderShipDateGenerator = Gen.option(arbitrary[ZonedDateTime]) - def UsersUsernamePutBodyGenerator = Gen.option(UserGenerator) - def StoresOrderPostBodyGenerator = Gen.option(OrderGenerator) - def OrderCompleteGenerator = Gen.option(arbitrary[Boolean]) - def PetTagsGenerator = Gen.option(PetTagsOptGenerator) + def OptionStringGenerator = Gen.option(arbitrary[String]) + def SeqPetGenerator: Gen[List[Pet]] = Gen.containerOf[List,Pet](PetGenerator) + def OptionPetGenerator = Gen.option(PetGenerator) + def OptionUserGenerator = Gen.option(UserGenerator) + def OptionOrderGenerator = Gen.option(OrderGenerator) def LongGenerator = arbitrary[Long] - def OrderQuantityGenerator = Gen.option(arbitrary[Int]) - def PetPhotoUrlsGenerator: Gen[List[String]] = Gen.containerOf[List,String](arbitrary[String]) - def UsersCreateWithListPostBodyGenerator = Gen.option(UsersCreateWithListPostBodyOptGenerator) - def PetsFindByStatusGetStatusGenerator = Gen.option(PetsFindByStatusGetStatusOptGenerator) - def PetCategoryGenerator = Gen.option(PetCategoryOptGenerator) - def PetTagsOptGenerator: Gen[List[PetCategoryOpt]] = Gen.containerOf[List,PetCategoryOpt](PetCategoryOptGenerator) + def OptionSeqUserGenerator = Gen.option(Gen.containerOf[List,User](UserGenerator)) + def OptionArrayWrapperStringGenerator = Gen.option(_genList(arbitrary[String], "multi")) - def createPetCategoryOptGenerator = _generate(PetCategoryOptGenerator) - def createPetGenerator = _generate(PetGenerator) + def createPetCategoryOptionCategoryGenerator = _generate(PetCategoryOptionCategoryGenerator) def createUserGenerator = _generate(UserGenerator) + def createPetGenerator = _generate(PetGenerator) def createOrderGenerator = _generate(OrderGenerator) - def PetCategoryOptGenerator = for { - id <- OrderPetIdGenerator - name <- OrderStatusGenerator - } yield PetCategoryOpt(id, name) - def PetGenerator = for { - name <- arbitrary[String] - tags <- PetTagsGenerator - photoUrls <- PetPhotoUrlsGenerator - id <- OrderPetIdGenerator - status <- OrderStatusGenerator - category <- PetCategoryGenerator - } yield Pet(name, tags, photoUrls, id, status, category) + def PetCategoryOptionCategoryGenerator = for { + id <- Gen.option(arbitrary[Long]) + name <- Gen.option(arbitrary[String]) + } yield PetCategoryOptionCategory(id, name) def UserGenerator = for { - email <- OrderStatusGenerator - username <- OrderStatusGenerator - userStatus <- OrderQuantityGenerator - lastName <- OrderStatusGenerator - firstName <- OrderStatusGenerator - id <- OrderPetIdGenerator - phone <- OrderStatusGenerator - password <- OrderStatusGenerator + email <- Gen.option(arbitrary[String]) + username <- Gen.option(arbitrary[String]) + userStatus <- Gen.option(arbitrary[Int]) + lastName <- Gen.option(arbitrary[String]) + firstName <- Gen.option(arbitrary[String]) + id <- Gen.option(arbitrary[Long]) + phone <- Gen.option(arbitrary[String]) + password <- Gen.option(arbitrary[String]) } yield User(email, username, userStatus, lastName, firstName, id, phone, password) + def PetGenerator = for { + name <- arbitrary[String] + photoUrls <- Gen.containerOf[List,String](arbitrary[String]) + id <- Gen.option(arbitrary[Long]) + status <- Gen.option(arbitrary[String]) + tags <- Gen.option(Gen.containerOf[List,PetCategoryOptionCategory](PetCategoryOptionCategoryGenerator)) + category <- Gen.option(PetCategoryOptionCategoryGenerator) + } yield Pet(name, photoUrls, id, status, tags, category) def OrderGenerator = for { - shipDate <- OrderShipDateGenerator - quantity <- OrderQuantityGenerator - petId <- OrderPetIdGenerator - id <- OrderPetIdGenerator - complete <- OrderCompleteGenerator - status <- OrderStatusGenerator + shipDate <- Gen.option(arbitrary[ZonedDateTime]) + quantity <- Gen.option(arbitrary[Int]) + petId <- Gen.option(arbitrary[Long]) + id <- Gen.option(arbitrary[Long]) + complete <- Gen.option(arbitrary[Boolean]) + status <- Gen.option(arbitrary[String]) } yield Order(shipDate, quantity, petId, id, complete, status) def _generate[T](gen: Gen[T]) = (count: Int) => for (i <- 1 to count) yield gen.sample diff --git a/play-scala-generator/src/test/resources/expected_results/test_data/string_formats_yaml.scala b/play-scala-generator/src/test/resources/expected_results/test_data/string_formats_yaml.scala index 561a0e30..20547131 100644 --- a/play-scala-generator/src/test/resources/expected_results/test_data/string_formats_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/test_data/string_formats_yaml.scala @@ -6,30 +6,30 @@ import play.api.libs.json.scalacheck.JsValueGenerators import Arbitrary._ import de.zalando.play.controllers.Base64String import Base64String._ +import de.zalando.play.controllers.BinaryString +import BinaryString._ import java.time.ZonedDateTime import java.util.UUID import java.time.LocalDate -import de.zalando.play.controllers.BinaryString -import BinaryString._ object Generators extends JsValueGenerators { - def createGetBase64Generator = _generate(GetBase64Generator) + def createOptionBase64StringGenerator = _generate(OptionBase64StringGenerator) def createBinaryStringGenerator = _generate(BinaryStringGenerator) - def createGetDate_timeGenerator = _generate(GetDate_timeGenerator) - def createGetUuidGenerator = _generate(GetUuidGenerator) - def createGetDateGenerator = _generate(GetDateGenerator) + def createOptionZonedDateTimeGenerator = _generate(OptionZonedDateTimeGenerator) + def createOptionUUIDGenerator = _generate(OptionUUIDGenerator) + def createOptionLocalDateGenerator = _generate(OptionLocalDateGenerator) def createNullGenerator = _generate(NullGenerator) - def GetBase64Generator = Gen.option(arbitrary[Base64String]) + def OptionBase64StringGenerator = Gen.option(arbitrary[Base64String]) def BinaryStringGenerator = arbitrary[BinaryString] - def GetDate_timeGenerator = Gen.option(arbitrary[ZonedDateTime]) - def GetUuidGenerator = Gen.option(arbitrary[UUID]) - def GetDateGenerator = Gen.option(arbitrary[LocalDate]) + def OptionZonedDateTimeGenerator = Gen.option(arbitrary[ZonedDateTime]) + def OptionUUIDGenerator = Gen.option(arbitrary[UUID]) + def OptionLocalDateGenerator = Gen.option(arbitrary[LocalDate]) def NullGenerator = arbitrary[Null] diff --git a/play-scala-generator/src/test/resources/expected_results/test_data/type_deduplication_yaml.scala b/play-scala-generator/src/test/resources/expected_results/test_data/type_deduplication_yaml.scala index c543fed8..025ac82f 100644 --- a/play-scala-generator/src/test/resources/expected_results/test_data/type_deduplication_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/test_data/type_deduplication_yaml.scala @@ -11,32 +11,28 @@ object Generators extends JsValueGenerators { def createStringGenerator = _generate(StringGenerator) - def createUsersGetLimitGenerator = _generate(UsersGetLimitGenerator) + def createOptionBigIntGenerator = _generate(OptionBigIntGenerator) def createNullGenerator = _generate(NullGenerator) - def createPlantPlant_idGenerator = _generate(PlantPlant_idGenerator) - def createPlantsGetLimitGenerator = _generate(PlantsGetLimitGenerator) - def createUsersGetResponses200Generator = _generate(UsersGetResponses200Generator) - def createErrorCodeGenerator = _generate(ErrorCodeGenerator) - def createPlantsGetResponses200Generator = _generate(PlantsGetResponses200Generator) - def createAreasGetResponses200Generator = _generate(AreasGetResponses200Generator) - def createPlantsGetOffsetGenerator = _generate(PlantsGetOffsetGenerator) - def createPlantsPlant_idPicturesGetResponses200Generator = _generate(PlantsPlant_idPicturesGetResponses200Generator) - def createPlantsPlant_idWateringsGetResponses200Generator = _generate(PlantsPlant_idWateringsGetResponses200Generator) + def createOptionBigIntNameClashGenerator = _generate(OptionBigIntNameClashGenerator) + def createSeqUserGenerator = _generate(SeqUserGenerator) + def createSeqPlantGenerator = _generate(SeqPlantGenerator) + def createSeqAreaGenerator = _generate(SeqAreaGenerator) + def createOptionBigIntNameClashNameClashGenerator = _generate(OptionBigIntNameClashNameClashGenerator) + def createSeqStringGenerator = _generate(SeqStringGenerator) + def createSeqWateringGenerator = _generate(SeqWateringGenerator) def StringGenerator = arbitrary[String] - def UsersGetLimitGenerator = Gen.option(arbitrary[BigInt]) + def OptionBigIntGenerator = Gen.option(arbitrary[BigInt]) def NullGenerator = arbitrary[Null] - def PlantPlant_idGenerator = Gen.option(arbitrary[String]) - def PlantsGetLimitGenerator = Gen.option(arbitrary[BigInt]) - def UsersGetResponses200Generator: Gen[List[User]] = Gen.containerOf[List,User](UserGenerator) - def ErrorCodeGenerator = Gen.option(arbitrary[Int]) - def PlantsGetResponses200Generator: Gen[List[Plant]] = Gen.containerOf[List,Plant](PlantGenerator) - def AreasGetResponses200Generator: Gen[List[Area]] = Gen.containerOf[List,Area](AreaGenerator) - def PlantsGetOffsetGenerator = Gen.option(arbitrary[BigInt]) - def PlantsPlant_idPicturesGetResponses200Generator: Gen[List[String]] = Gen.containerOf[List,String](arbitrary[String]) - def PlantsPlant_idWateringsGetResponses200Generator: Gen[List[Watering]] = Gen.containerOf[List,Watering](WateringGenerator) + def OptionBigIntNameClashGenerator = Gen.option(arbitrary[BigInt]) + def SeqUserGenerator: Gen[List[User]] = Gen.containerOf[List,User](UserGenerator) + def SeqPlantGenerator: Gen[List[Plant]] = Gen.containerOf[List,Plant](PlantGenerator) + def SeqAreaGenerator: Gen[List[Area]] = Gen.containerOf[List,Area](AreaGenerator) + def OptionBigIntNameClashNameClashGenerator = Gen.option(arbitrary[BigInt]) + def SeqStringGenerator: Gen[List[String]] = Gen.containerOf[List,String](arbitrary[String]) + def SeqWateringGenerator: Gen[List[Watering]] = Gen.containerOf[List,Watering](WateringGenerator) def createSunlightNeedsGenerator = _generate(SunlightNeedsGenerator) @@ -51,49 +47,49 @@ object Generators extends JsValueGenerators { def SunlightNeedsGenerator = for { - amount <- PlantPlant_idGenerator + amount <- Gen.option(arbitrary[String]) } yield SunlightNeeds(amount) def PlantGenerator = for { - species <- PlantPlant_idGenerator - name <- PlantPlant_idGenerator - description <- PlantPlant_idGenerator - owner_id <- PlantPlant_idGenerator - plant_id <- PlantPlant_idGenerator - godparent <- PlantPlant_idGenerator + species <- Gen.option(arbitrary[String]) + name <- Gen.option(arbitrary[String]) + description <- Gen.option(arbitrary[String]) + owner_id <- Gen.option(arbitrary[String]) + plant_id <- Gen.option(arbitrary[String]) + godparent <- Gen.option(arbitrary[String]) } yield Plant(species, name, description, owner_id, plant_id, godparent) def UserGenerator = for { - user_id <- PlantPlant_idGenerator - name <- PlantPlant_idGenerator - area_id <- PlantPlant_idGenerator + user_id <- Gen.option(arbitrary[String]) + name <- Gen.option(arbitrary[String]) + area_id <- Gen.option(arbitrary[String]) } yield User(user_id, name, area_id) def SigninDataGenerator = for { - username <- PlantPlant_idGenerator - password <- PlantPlant_idGenerator - email <- PlantPlant_idGenerator + username <- Gen.option(arbitrary[String]) + password <- Gen.option(arbitrary[String]) + email <- Gen.option(arbitrary[String]) } yield SigninData(username, password, email) def WateringGenerator = for { - watering_id <- PlantPlant_idGenerator - user_id <- PlantPlant_idGenerator - date <- PlantPlant_idGenerator + watering_id <- Gen.option(arbitrary[String]) + user_id <- Gen.option(arbitrary[String]) + date <- Gen.option(arbitrary[String]) } yield Watering(watering_id, user_id, date) def AreaGenerator = for { - area_id <- PlantPlant_idGenerator - building <- PlantPlant_idGenerator - floor <- PlantPlant_idGenerator - room <- PlantPlant_idGenerator + area_id <- Gen.option(arbitrary[String]) + building <- Gen.option(arbitrary[String]) + floor <- Gen.option(arbitrary[String]) + room <- Gen.option(arbitrary[String]) } yield Area(area_id, building, floor, room) def LocationGenerator = for { - area_id <- PlantPlant_idGenerator - details <- PlantPlant_idGenerator + area_id <- Gen.option(arbitrary[String]) + details <- Gen.option(arbitrary[String]) } yield Location(area_id, details) def ErrorGenerator = for { - code <- ErrorCodeGenerator - message <- PlantPlant_idGenerator - fields <- PlantPlant_idGenerator + code <- Gen.option(arbitrary[Int]) + message <- Gen.option(arbitrary[String]) + fields <- Gen.option(arbitrary[String]) } yield Error(code, message, fields) def WaterNeedsGenerator = for { - amount <- PlantPlant_idGenerator - period <- PlantPlant_idGenerator + amount <- Gen.option(arbitrary[String]) + period <- Gen.option(arbitrary[String]) } yield WaterNeeds(amount, period) def _generate[T](gen: Gen[T]) = (count: Int) => for (i <- 1 to count) yield gen.sample diff --git a/play-scala-generator/src/test/resources/expected_results/test_data/uber_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/test_data/uber_api_yaml.scala index 71c96478..f550e3ee 100644 --- a/play-scala-generator/src/test/resources/expected_results/test_data/uber_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/test_data/uber_api_yaml.scala @@ -4,34 +4,28 @@ import org.scalacheck.Gen import org.scalacheck.Arbitrary import play.api.libs.json.scalacheck.JsValueGenerators import Arbitrary._ -import java.util.UUID import scala.math.BigDecimal +import java.util.UUID object Generators extends JsValueGenerators { def createDoubleGenerator = _generate(DoubleGenerator) - def createActivitiesHistoryGenerator = _generate(ActivitiesHistoryGenerator) - def createProfilePictureGenerator = _generate(ProfilePictureGenerator) - def createErrorCodeGenerator = _generate(ErrorCodeGenerator) - def createEstimatesTimeGetCustomer_uuidGenerator = _generate(EstimatesTimeGetCustomer_uuidGenerator) - def createProductsGetResponses200Generator = _generate(ProductsGetResponses200Generator) - def createPriceEstimateHigh_estimateGenerator = _generate(PriceEstimateHigh_estimateGenerator) - def createEstimatesPriceGetResponses200Generator = _generate(EstimatesPriceGetResponses200Generator) - def createActivitiesHistoryOptGenerator = _generate(ActivitiesHistoryOptGenerator) + def createOptionIntGenerator = _generate(OptionIntGenerator) + def createOptionUUIDGenerator = _generate(OptionUUIDGenerator) + def createSeqProductGenerator = _generate(SeqProductGenerator) + def createOptionStringGenerator = _generate(OptionStringGenerator) + def createSeqPriceEstimateGenerator = _generate(SeqPriceEstimateGenerator) def DoubleGenerator = arbitrary[Double] - def ActivitiesHistoryGenerator = Gen.option(ActivitiesHistoryOptGenerator) - def ProfilePictureGenerator = Gen.option(arbitrary[String]) - def ErrorCodeGenerator = Gen.option(arbitrary[Int]) - def EstimatesTimeGetCustomer_uuidGenerator = Gen.option(arbitrary[UUID]) - def ProductsGetResponses200Generator: Gen[List[Product]] = Gen.containerOf[List,Product](ProductGenerator) - def PriceEstimateHigh_estimateGenerator = Gen.option(arbitrary[BigDecimal]) - def EstimatesPriceGetResponses200Generator: Gen[List[PriceEstimate]] = Gen.containerOf[List,PriceEstimate](PriceEstimateGenerator) - def ActivitiesHistoryOptGenerator: Gen[List[Activity]] = Gen.containerOf[List,Activity](ActivityGenerator) + def OptionIntGenerator = Gen.option(arbitrary[Int]) + def OptionUUIDGenerator = Gen.option(arbitrary[UUID]) + def SeqProductGenerator: Gen[List[Product]] = Gen.containerOf[List,Product](ProductGenerator) + def OptionStringGenerator = Gen.option(arbitrary[String]) + def SeqPriceEstimateGenerator: Gen[List[PriceEstimate]] = Gen.containerOf[List,PriceEstimate](PriceEstimateGenerator) def createActivityGenerator = _generate(ActivityGenerator) @@ -43,41 +37,41 @@ object Generators extends JsValueGenerators { def ActivityGenerator = for { - uuid <- ProfilePictureGenerator + uuid <- Gen.option(arbitrary[String]) } yield Activity(uuid) def PriceEstimateGenerator = for { - low_estimate <- PriceEstimateHigh_estimateGenerator - display_name <- ProfilePictureGenerator - estimate <- ProfilePictureGenerator - high_estimate <- PriceEstimateHigh_estimateGenerator - product_id <- ProfilePictureGenerator - currency_code <- ProfilePictureGenerator - surge_multiplier <- PriceEstimateHigh_estimateGenerator + low_estimate <- Gen.option(arbitrary[BigDecimal]) + display_name <- Gen.option(arbitrary[String]) + estimate <- Gen.option(arbitrary[String]) + high_estimate <- Gen.option(arbitrary[BigDecimal]) + product_id <- Gen.option(arbitrary[String]) + currency_code <- Gen.option(arbitrary[String]) + surge_multiplier <- Gen.option(arbitrary[BigDecimal]) } yield PriceEstimate(low_estimate, display_name, estimate, high_estimate, product_id, currency_code, surge_multiplier) def ProductGenerator = for { - image <- ProfilePictureGenerator - description <- ProfilePictureGenerator - display_name <- ProfilePictureGenerator - product_id <- ProfilePictureGenerator - capacity <- ProfilePictureGenerator + image <- Gen.option(arbitrary[String]) + description <- Gen.option(arbitrary[String]) + display_name <- Gen.option(arbitrary[String]) + product_id <- Gen.option(arbitrary[String]) + capacity <- Gen.option(arbitrary[String]) } yield Product(image, description, display_name, product_id, capacity) def ProfileGenerator = for { - first_name <- ProfilePictureGenerator - email <- ProfilePictureGenerator - promo_code <- ProfilePictureGenerator - last_name <- ProfilePictureGenerator - picture <- ProfilePictureGenerator + first_name <- Gen.option(arbitrary[String]) + email <- Gen.option(arbitrary[String]) + promo_code <- Gen.option(arbitrary[String]) + last_name <- Gen.option(arbitrary[String]) + picture <- Gen.option(arbitrary[String]) } yield Profile(first_name, email, promo_code, last_name, picture) def ActivitiesGenerator = for { - offset <- ErrorCodeGenerator - limit <- ErrorCodeGenerator - count <- ErrorCodeGenerator - history <- ActivitiesHistoryGenerator + offset <- Gen.option(arbitrary[Int]) + limit <- Gen.option(arbitrary[Int]) + count <- Gen.option(arbitrary[Int]) + history <- Gen.option(Gen.containerOf[List,Activity](ActivityGenerator)) } yield Activities(offset, limit, count, history) def ErrorGenerator = for { - code <- ErrorCodeGenerator - message <- ProfilePictureGenerator - fields <- ProfilePictureGenerator + code <- Gen.option(arbitrary[Int]) + message <- Gen.option(arbitrary[String]) + fields <- Gen.option(arbitrary[String]) } yield Error(code, message, fields) def _generate[T](gen: Gen[T]) = (count: Int) => for (i <- 1 to count) yield gen.sample diff --git a/play-scala-generator/src/test/resources/expected_results/test_data/wrong_field_name_yaml.scala b/play-scala-generator/src/test/resources/expected_results/test_data/wrong_field_name_yaml.scala index 73aef715..591806cd 100644 --- a/play-scala-generator/src/test/resources/expected_results/test_data/wrong_field_name_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/test_data/wrong_field_name_yaml.scala @@ -10,14 +10,14 @@ object Generators extends JsValueGenerators { def createGetCodesGenerator = _generate(GetCodesGenerator) - def createGetOptCodesGenerator = _generate(GetOptCodesGenerator) + def createOptionGetOptCodesOptGenerator = _generate(OptionGetOptCodesOptGenerator) def createGetOptCodesOptGenerator = _generate(GetOptCodesOptGenerator) def createStatusGenerator = _generate(StatusGenerator) def GetCodesGenerator = { import GetCodes._ ; Gen.oneOf(Seq(Get, GET)) } - def GetOptCodesGenerator = Gen.option(GetOptCodesOptGenerator) + def OptionGetOptCodesOptGenerator = Gen.option(GetOptCodesOptGenerator) def GetOptCodesOptGenerator = { import GetOptCodesOpt._ ; Gen.oneOf(Seq(Put, PUT)) } def StatusGenerator = { import Status._ ; Gen.oneOf(Seq(OK, WARNING, ERROR)) } diff --git a/play-scala-generator/src/test/resources/expected_results/tests/basic_polymorphism_yaml.scala b/play-scala-generator/src/test/resources/expected_results/tests/basic_polymorphism_yaml.scala index 6743b8d6..5d84a774 100644 --- a/play-scala-generator/src/test/resources/expected_results/tests/basic_polymorphism_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/tests/basic_polymorphism_yaml.scala @@ -53,7 +53,7 @@ class Basic_polymorphism_yamlSpec extends WordSpec with OptionValues with WsScal "PUT /" should { - def testInvalidInput(dummy: PutDummy): Prop = { + def testInvalidInput(dummy: Option[Pet]): Prop = { val url = s"""/""" @@ -97,7 +97,7 @@ class Basic_polymorphism_yamlSpec extends WordSpec with OptionValues with WsScal } propertyList.reduce(_ && _) } - def testValidInput(dummy: PutDummy): Prop = { + def testValidInput(dummy: Option[Pet]): Prop = { val parsed_dummy = parserConstructor("application/json").writeValueAsString(dummy) @@ -149,7 +149,7 @@ class Basic_polymorphism_yamlSpec extends WordSpec with OptionValues with WsScal } "discard invalid data" in { val genInputs = for { - dummy <- PutDummyGenerator + dummy <- OptionPetGenerator } yield dummy val inputs = genInputs suchThat { dummy => new PutValidator(dummy).errors.nonEmpty @@ -159,7 +159,7 @@ class Basic_polymorphism_yamlSpec extends WordSpec with OptionValues with WsScal } "do something with valid data" in { val genInputs = for { - dummy <- PutDummyGenerator + dummy <- OptionPetGenerator } yield dummy val inputs = genInputs suchThat { dummy => new PutValidator(dummy).errors.isEmpty diff --git a/play-scala-generator/src/test/resources/expected_results/tests/echo_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/tests/echo_api_yaml.scala index ae264553..e6bc83df 100644 --- a/play-scala-generator/src/test/resources/expected_results/tests/echo_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/tests/echo_api_yaml.scala @@ -168,7 +168,7 @@ class Echo_api_yamlSpec extends WordSpec with OptionValues with WsScalaTestClien } "POST /echo/" should { - def testInvalidInput(input: (PostName, PostName)): Prop = { + def testInvalidInput(input: (Option[String], Option[String])): Prop = { val (name, year) = input @@ -213,7 +213,7 @@ class Echo_api_yamlSpec extends WordSpec with OptionValues with WsScalaTestClien } propertyList.reduce(_ && _) } - def testValidInput(input: (PostName, PostName)): Prop = { + def testValidInput(input: (Option[String], Option[String])): Prop = { val (name, year) = input val url = s"""/echo/""" @@ -265,8 +265,8 @@ class Echo_api_yamlSpec extends WordSpec with OptionValues with WsScalaTestClien } "discard invalid data" in { val genInputs = for { - name <- PostNameGenerator - year <- PostNameGenerator + name <- OptionStringGenerator + year <- OptionStringGenerator } yield (name, year) val inputs = genInputs suchThat { case (name, year) => @@ -277,8 +277,8 @@ class Echo_api_yamlSpec extends WordSpec with OptionValues with WsScalaTestClien } "do something with valid data" in { val genInputs = for { - name <- PostNameGenerator - year <- PostNameGenerator + name <- OptionStringGenerator + year <- OptionStringGenerator } yield (name, year) val inputs = genInputs suchThat { case (name, year) => diff --git a/play-scala-generator/src/test/resources/expected_results/tests/enum_yaml.scala b/play-scala-generator/src/test/resources/expected_results/tests/enum_yaml.scala new file mode 100644 index 00000000..54c4d7ac --- /dev/null +++ b/play-scala-generator/src/test/resources/expected_results/tests/enum_yaml.scala @@ -0,0 +1,169 @@ +package enum.yaml + +import de.zalando.play.controllers._ +import org.scalacheck._ +import org.scalacheck.Arbitrary._ +import org.scalacheck.Prop._ +import org.scalacheck.Test._ +import org.specs2.mutable._ +import org.specs2.execute._ +import play.api.test.Helpers._ +import play.api.test._ +import play.api.mvc.MultipartFormData.FilePart +import play.api.mvc._ + +import org.junit.runner.RunWith +import java.net.URLEncoder +import com.fasterxml.jackson.databind.ObjectMapper + +import play.api.http.Writeable +import play.api.libs.Files.TemporaryFile +import play.api.test.Helpers.{status => requestStatusCode_} +import play.api.test.Helpers.{contentAsString => requestContentAsString_} +import play.api.test.Helpers.{contentType => requestContentType_} + +import org.scalatest.{OptionValues, WordSpec} +import org.scalatestplus.play.{OneAppPerTest, WsScalaTestClient} + +import Generators._ + + +//noinspection ScalaStyle +class Enum_yamlSpec extends WordSpec with OptionValues with WsScalaTestClient with OneAppPerTest { + def toPath[T](value: T)(implicit binder: PathBindable[T]): String = Option(binder.unbind("", value)).getOrElse("") + def toQuery[T](key: String, value: T)(implicit binder: QueryStringBindable[T]): String = Option(binder.unbind(key, value)).getOrElse("") + def toHeader[T](value: T)(implicit binder: QueryStringBindable[T]): String = Option(binder.unbind("", value)).getOrElse("") + + def checkResult(props: Prop): org.specs2.execute.Result = + Test.check(Test.Parameters.default, props).status match { + case Failed(args, labels) => + val failureMsg = labels.mkString("\n") + " given args: " + args.map(_.arg).mkString("'", "', '","'") + org.specs2.execute.Failure(failureMsg) + case Proved(_) | Exhausted | Passed => org.specs2.execute.Success() + case PropException(_, e: IllegalStateException, _) => org.specs2.execute.Error(e.getMessage) + case PropException(_, e, labels) => + val error = if (labels.isEmpty) e.getLocalizedMessage else labels.mkString("\n") + org.specs2.execute.Failure(error) + } + + private def parserConstructor(mimeType: String) = PlayBodyParsing.jacksonMapper(mimeType) + + def parseResponseContent[T](mapper: ObjectMapper, content: String, mimeType: Option[String], expectedType: Class[T]) = + if (expectedType.getCanonicalName == "scala.runtime.Null$") null else mapper.readValue(content, expectedType) + + + "GET /test" should { + def testInvalidInput(includes: Option[TestGetIncludesOptionEnum]): Prop = { + + + val url = s"""/test?${toQuery("includes", includes)}""" + val contentTypes: Seq[String] = Seq() + val acceptHeaders: Seq[String] = Seq() + val contentHeaders = for { ct <- contentTypes; ac <- acceptHeaders } yield (ac, ct) + if (contentHeaders.isEmpty) throw new IllegalStateException(s"No 'produces' defined for the $url") + + val propertyList = contentHeaders.map { case (acceptHeader, contentType) => + val headers = + Seq() :+ ("Accept" -> acceptHeader) :+ ("Content-Type" -> contentType) + + + val request = FakeRequest(GET, url).withHeaders(headers:_*) + val path = + if (contentType == "multipart/form-data") { + import de.zalando.play.controllers.WriteableWrapper.anyContentAsMultipartFormWritable + + val files: Seq[FilePart[TemporaryFile]] = Nil + val data = Map.empty[String, Seq[String]] + val form = new MultipartFormData(data, files, Nil) + + route(app, request.withMultipartFormDataBody(form)).get + } else if (contentType == "application/x-www-form-urlencoded") { + route(app, request.withFormUrlEncodedBody()).get + } else route(app, request).get + + val errors = new TestGetValidator(includes).errors + + lazy val validations = errors flatMap { _.messages } map { m => + s"Contains error: $m in ${contentAsString(path)}" |:(contentAsString(path).contains(m) ?= true) + } + + (s"given 'Content-Type' [$contentType], 'Accept' header [$acceptHeader] and URL: [$url]" ) |: all( + "StatusCode = BAD_REQUEST" |: (requestStatusCode_(path) ?= BAD_REQUEST), + s"Content-Type = $acceptHeader" |: (requestContentType_(path) ?= Some(acceptHeader)), + "non-empty errors" |: (errors.nonEmpty ?= true), + "at least one validation failing" |: atLeastOne(validations:_*) + ) + } + propertyList.reduce(_ && _) + } + def testValidInput(includes: Option[TestGetIncludesOptionEnum]): Prop = { + + val url = s"""/test?${toQuery("includes", includes)}""" + val contentTypes: Seq[String] = Seq() + val acceptHeaders: Seq[String] = Seq() + val contentHeaders = for { ct <- contentTypes; ac <- acceptHeaders } yield (ac, ct) + if (contentHeaders.isEmpty) throw new IllegalStateException(s"No 'produces' defined for the $url") + + val propertyList = contentHeaders.map { case (acceptHeader, contentType) => + val headers = + Seq() :+ ("Accept" -> acceptHeader) :+ ("Content-Type" -> contentType) + + val request = FakeRequest(GET, url).withHeaders(headers:_*) + val path = + if (contentType == "multipart/form-data") { + import de.zalando.play.controllers.WriteableWrapper.anyContentAsMultipartFormWritable + + val files: Seq[FilePart[TemporaryFile]] = Nil + val data = Map.empty[String, Seq[String]] + val form = new MultipartFormData(data, files, Nil) + + route(app, request.withMultipartFormDataBody(form)).get + } else if (contentType == "application/x-www-form-urlencoded") { + route(app, request.withFormUrlEncodedBody()).get + } else route(app, request).get + + val errors = new TestGetValidator(includes).errors + val possibleResponseTypes: Map[Int,Class[_ <: Any]] = Map( + 200 -> classOf[String] + ) + + val expectedCode = requestStatusCode_(path) + val mimeType = requestContentType_(path) + val mapper = parserConstructor(mimeType.getOrElse("application/json")) + + val parsedApiResponse = scala.util.Try { + parseResponseContent(mapper, requestContentAsString_(path), mimeType, possibleResponseTypes(expectedCode)) + } + + (s"Given response code [$expectedCode], 'Content-Type' [$contentType], 'Accept' header [$acceptHeader] and URL: [$url]" ) |: all( + "Response Code is allowed" |: (possibleResponseTypes.contains(expectedCode) ?= true), + "Successful" |: (parsedApiResponse.isSuccess ?= true), + s"Content-Type = $acceptHeader" |: ((parsedApiResponse.get ?= null) || (requestContentType_(path) ?= Some(acceptHeader))), + "No errors" |: (errors.isEmpty ?= true) + ) + } + propertyList.reduce(_ && _) + } + "discard invalid data" in { + val genInputs = for { + includes <- OptionTestGetIncludesOptionEnumGenerator + } yield includes + val inputs = genInputs suchThat { includes => + new TestGetValidator(includes).errors.nonEmpty + } + val props = forAll(inputs) { i => testInvalidInput(i) } + assert(checkResult(props) == Success()) + } + "do something with valid data" in { + val genInputs = for { + includes <- OptionTestGetIncludesOptionEnumGenerator + } yield includes + val inputs = genInputs suchThat { includes => + new TestGetValidator(includes).errors.isEmpty + } + val props = forAll(inputs) { i => testValidInput(i) } + assert(checkResult(props) == Success()) + } + + } +} diff --git a/play-scala-generator/src/test/resources/expected_results/tests/expanded_polymorphism_yaml.scala b/play-scala-generator/src/test/resources/expected_results/tests/expanded_polymorphism_yaml.scala index 7068f04c..648b00a9 100644 --- a/play-scala-generator/src/test/resources/expected_results/tests/expanded_polymorphism_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/tests/expanded_polymorphism_yaml.scala @@ -180,7 +180,7 @@ class Expanded_polymorphism_yamlSpec extends WordSpec with OptionValues with WsS } "GET /api/pets" should { - def testInvalidInput(input: (PetsGetTags, PetsGetLimit)): Prop = { + def testInvalidInput(input: (Option[ArrayWrapper[String]], Option[Int])): Prop = { val (tags, limit) = input @@ -228,7 +228,7 @@ class Expanded_polymorphism_yamlSpec extends WordSpec with OptionValues with WsS } propertyList.reduce(_ && _) } - def testValidInput(input: (PetsGetTags, PetsGetLimit)): Prop = { + def testValidInput(input: (Option[ArrayWrapper[String]], Option[Int])): Prop = { val (tags, limit) = input val url = s"""/api/pets?${toQuery("tags", tags)}&${toQuery("limit", limit)}""" @@ -283,8 +283,8 @@ class Expanded_polymorphism_yamlSpec extends WordSpec with OptionValues with WsS } "discard invalid data" in { val genInputs = for { - tags <- PetsGetTagsGenerator - limit <- PetsGetLimitGenerator + tags <- OptionArrayWrapperStringGenerator + limit <- OptionIntGenerator } yield (tags, limit) val inputs = genInputs suchThat { case (tags, limit) => @@ -295,8 +295,8 @@ class Expanded_polymorphism_yamlSpec extends WordSpec with OptionValues with WsS } "do something with valid data" in { val genInputs = for { - tags <- PetsGetTagsGenerator - limit <- PetsGetLimitGenerator + tags <- OptionArrayWrapperStringGenerator + limit <- OptionIntGenerator } yield (tags, limit) val inputs = genInputs suchThat { case (tags, limit) => diff --git a/play-scala-generator/src/test/resources/expected_results/tests/foodpanda_yaml.scala b/play-scala-generator/src/test/resources/expected_results/tests/foodpanda_yaml.scala new file mode 100644 index 00000000..c751a10d --- /dev/null +++ b/play-scala-generator/src/test/resources/expected_results/tests/foodpanda_yaml.scala @@ -0,0 +1,176 @@ +package com.foodpanda.popsey.api + +import de.zalando.play.controllers._ +import org.scalacheck._ +import org.scalacheck.Arbitrary._ +import org.scalacheck.Prop._ +import org.scalacheck.Test._ +import org.specs2.mutable._ +import org.specs2.execute._ +import play.api.test.Helpers._ +import play.api.test._ +import play.api.mvc.MultipartFormData.FilePart +import play.api.mvc._ + +import org.junit.runner.RunWith +import java.net.URLEncoder +import com.fasterxml.jackson.databind.ObjectMapper + +import play.api.http.Writeable +import play.api.libs.Files.TemporaryFile +import play.api.test.Helpers.{status => requestStatusCode_} +import play.api.test.Helpers.{contentAsString => requestContentAsString_} +import play.api.test.Helpers.{contentType => requestContentType_} + +import org.scalatest.{OptionValues, WordSpec} +import org.scalatestplus.play.{OneAppPerTest, WsScalaTestClient} + +import Generators._ + + +//noinspection ScalaStyle +class Foodpanda_yamlSpec extends WordSpec with OptionValues with WsScalaTestClient with OneAppPerTest { + def toPath[T](value: T)(implicit binder: PathBindable[T]): String = Option(binder.unbind("", value)).getOrElse("") + def toQuery[T](key: String, value: T)(implicit binder: QueryStringBindable[T]): String = Option(binder.unbind(key, value)).getOrElse("") + def toHeader[T](value: T)(implicit binder: QueryStringBindable[T]): String = Option(binder.unbind("", value)).getOrElse("") + + def checkResult(props: Prop): org.specs2.execute.Result = + Test.check(Test.Parameters.default, props).status match { + case Failed(args, labels) => + val failureMsg = labels.mkString("\n") + " given args: " + args.map(_.arg).mkString("'", "', '","'") + org.specs2.execute.Failure(failureMsg) + case Proved(_) | Exhausted | Passed => org.specs2.execute.Success() + case PropException(_, e: IllegalStateException, _) => org.specs2.execute.Error(e.getMessage) + case PropException(_, e, labels) => + val error = if (labels.isEmpty) e.getLocalizedMessage else labels.mkString("\n") + org.specs2.execute.Failure(error) + } + + private def parserConstructor(mimeType: String) = PlayBodyParsing.jacksonMapper(mimeType) + + def parseResponseContent[T](mapper: ObjectMapper, content: String, mimeType: Option[String], expectedType: Class[T]) = + if (expectedType.getCanonicalName == "scala.runtime.Null$") null else mapper.readValue(content, expectedType) + + + "GET /api/vendors" should { + def testInvalidInput(query: VendorQuery): Prop = { + + + val url = s"""/api/vendors""" + val contentTypes: Seq[String] = Seq() + val acceptHeaders: Seq[String] = Seq( + "application/json" + ) + val contentHeaders = for { ct <- contentTypes; ac <- acceptHeaders } yield (ac, ct) + if (contentHeaders.isEmpty) throw new IllegalStateException(s"No 'produces' defined for the $url") + + val propertyList = contentHeaders.map { case (acceptHeader, contentType) => + val headers = + Seq() :+ ("Accept" -> acceptHeader) :+ ("Content-Type" -> contentType) + + val parsed_query = PlayBodyParsing.jacksonMapper("application/json").writeValueAsString(query) + + val request = FakeRequest(GET, url).withHeaders(headers:_*).withBody(parsed_query) + val path = + if (contentType == "multipart/form-data") { + import de.zalando.play.controllers.WriteableWrapper.anyContentAsMultipartFormWritable + + val files: Seq[FilePart[TemporaryFile]] = Nil + val data = Map.empty[String, Seq[String]] + val form = new MultipartFormData(data, files, Nil) + + route(app, request.withMultipartFormDataBody(form)).get + } else if (contentType == "application/x-www-form-urlencoded") { + route(app, request.withFormUrlEncodedBody()).get + } else route(app, request).get + + val errors = new VendorsGetValidator(query).errors + + lazy val validations = errors flatMap { _.messages } map { m => + s"Contains error: $m in ${contentAsString(path)}" |:(contentAsString(path).contains(m) ?= true) + } + + (s"given 'Content-Type' [$contentType], 'Accept' header [$acceptHeader] and URL: [$url]" + " and body [" + parsed_query + "]") |: all( + "StatusCode = BAD_REQUEST" |: (requestStatusCode_(path) ?= BAD_REQUEST), + s"Content-Type = $acceptHeader" |: (requestContentType_(path) ?= Some(acceptHeader)), + "non-empty errors" |: (errors.nonEmpty ?= true), + "at least one validation failing" |: atLeastOne(validations:_*) + ) + } + propertyList.reduce(_ && _) + } + def testValidInput(query: VendorQuery): Prop = { + + val parsed_query = parserConstructor("application/json").writeValueAsString(query) + + val url = s"""/api/vendors""" + val contentTypes: Seq[String] = Seq() + val acceptHeaders: Seq[String] = Seq( + "application/json" + ) + val contentHeaders = for { ct <- contentTypes; ac <- acceptHeaders } yield (ac, ct) + if (contentHeaders.isEmpty) throw new IllegalStateException(s"No 'produces' defined for the $url") + + val propertyList = contentHeaders.map { case (acceptHeader, contentType) => + val headers = + Seq() :+ ("Accept" -> acceptHeader) :+ ("Content-Type" -> contentType) + + val request = FakeRequest(GET, url).withHeaders(headers:_*).withBody(parsed_query) + val path = + if (contentType == "multipart/form-data") { + import de.zalando.play.controllers.WriteableWrapper.anyContentAsMultipartFormWritable + + val files: Seq[FilePart[TemporaryFile]] = Nil + val data = Map.empty[String, Seq[String]] + val form = new MultipartFormData(data, files, Nil) + + route(app, request.withMultipartFormDataBody(form)).get + } else if (contentType == "application/x-www-form-urlencoded") { + route(app, request.withFormUrlEncodedBody()).get + } else route(app, request).get + + val errors = new VendorsGetValidator(query).errors + val possibleResponseTypes: Map[Int,Class[_ <: Any]] = Map( + 200 -> classOf[Int] + ) + + val expectedCode = requestStatusCode_(path) + val mimeType = requestContentType_(path) + val mapper = parserConstructor(mimeType.getOrElse("application/json")) + + val parsedApiResponse = scala.util.Try { + parseResponseContent(mapper, requestContentAsString_(path), mimeType, possibleResponseTypes(expectedCode)) + } + + (s"Given response code [$expectedCode], 'Content-Type' [$contentType], 'Accept' header [$acceptHeader] and URL: [$url]" + " and body [" + parsed_query + "]") |: all( + "Response Code is allowed" |: (possibleResponseTypes.contains(expectedCode) ?= true), + "Successful" |: (parsedApiResponse.isSuccess ?= true), + s"Content-Type = $acceptHeader" |: ((parsedApiResponse.get ?= null) || (requestContentType_(path) ?= Some(acceptHeader))), + "No errors" |: (errors.isEmpty ?= true) + ) + } + propertyList.reduce(_ && _) + } + "discard invalid data" in { + val genInputs = for { + query <- VendorQueryGenerator + } yield query + val inputs = genInputs suchThat { query => + new VendorsGetValidator(query).errors.nonEmpty + } + val props = forAll(inputs) { i => testInvalidInput(i) } + assert(checkResult(props) == Success()) + } + "do something with valid data" in { + val genInputs = for { + query <- VendorQueryGenerator + } yield query + val inputs = genInputs suchThat { query => + new VendorsGetValidator(query).errors.isEmpty + } + val props = forAll(inputs) { i => testValidInput(i) } + assert(checkResult(props) == Success()) + } + + } +} diff --git a/play-scala-generator/src/test/resources/expected_results/tests/form_data_yaml.scala b/play-scala-generator/src/test/resources/expected_results/tests/form_data_yaml.scala index 896a1895..c571aa1d 100644 --- a/play-scala-generator/src/test/resources/expected_results/tests/form_data_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/tests/form_data_yaml.scala @@ -27,8 +27,8 @@ import org.scalatestplus.play.{OneAppPerTest, WsScalaTestClient} import Generators._ -import java.io.File import scala.math.BigInt +import java.io.File //noinspection ScalaStyle class Form_data_yamlSpec extends WordSpec with OptionValues with WsScalaTestClient with OneAppPerTest { @@ -55,7 +55,7 @@ class Form_data_yamlSpec extends WordSpec with OptionValues with WsScalaTestClie "POST /form_data/multipart" should { - def testInvalidInput(input: (String, BothPostYear, MultipartPostAvatar)): Prop = { + def testInvalidInput(input: (String, Option[BigInt], Option[File])): Prop = { val (name, year, avatar) = input @@ -104,7 +104,7 @@ class Form_data_yamlSpec extends WordSpec with OptionValues with WsScalaTestClie } propertyList.reduce(_ && _) } - def testValidInput(input: (String, BothPostYear, MultipartPostAvatar)): Prop = { + def testValidInput(input: (String, Option[BigInt], Option[File])): Prop = { val (name, year, avatar) = input val url = s"""/form_data/multipart""" @@ -161,8 +161,8 @@ class Form_data_yamlSpec extends WordSpec with OptionValues with WsScalaTestClie "discard invalid data" in { val genInputs = for { name <- StringGenerator - year <- BothPostYearGenerator - avatar <- MultipartPostAvatarGenerator + year <- OptionBigIntGenerator + avatar <- OptionFileGenerator } yield (name, year, avatar) val inputs = genInputs suchThat { case (name, year, avatar) => @@ -174,8 +174,8 @@ class Form_data_yamlSpec extends WordSpec with OptionValues with WsScalaTestClie "do something with valid data" in { val genInputs = for { name <- StringGenerator - year <- BothPostYearGenerator - avatar <- MultipartPostAvatarGenerator + year <- OptionBigIntGenerator + avatar <- OptionFileGenerator } yield (name, year, avatar) val inputs = genInputs suchThat { case (name, year, avatar) => @@ -188,7 +188,7 @@ class Form_data_yamlSpec extends WordSpec with OptionValues with WsScalaTestClie } "POST /form_data/both" should { - def testInvalidInput(input: (String, BothPostYear, MultipartPostAvatar, File)): Prop = { + def testInvalidInput(input: (String, Option[BigInt], Option[File], File)): Prop = { val (name, year, avatar, ringtone) = input @@ -239,7 +239,7 @@ class Form_data_yamlSpec extends WordSpec with OptionValues with WsScalaTestClie } propertyList.reduce(_ && _) } - def testValidInput(input: (String, BothPostYear, MultipartPostAvatar, File)): Prop = { + def testValidInput(input: (String, Option[BigInt], Option[File], File)): Prop = { val (name, year, avatar, ringtone) = input val url = s"""/form_data/both""" @@ -298,8 +298,8 @@ class Form_data_yamlSpec extends WordSpec with OptionValues with WsScalaTestClie "discard invalid data" in { val genInputs = for { name <- StringGenerator - year <- BothPostYearGenerator - avatar <- MultipartPostAvatarGenerator + year <- OptionBigIntGenerator + avatar <- OptionFileGenerator ringtone <- FileGenerator } yield (name, year, avatar, ringtone) @@ -312,8 +312,8 @@ class Form_data_yamlSpec extends WordSpec with OptionValues with WsScalaTestClie "do something with valid data" in { val genInputs = for { name <- StringGenerator - year <- BothPostYearGenerator - avatar <- MultipartPostAvatarGenerator + year <- OptionBigIntGenerator + avatar <- OptionFileGenerator ringtone <- FileGenerator } yield (name, year, avatar, ringtone) @@ -327,7 +327,7 @@ class Form_data_yamlSpec extends WordSpec with OptionValues with WsScalaTestClie } "POST /form_data/url-encoded" should { - def testInvalidInput(input: (String, BothPostYear, File)): Prop = { + def testInvalidInput(input: (String, Option[BigInt], File)): Prop = { val (name, year, avatar) = input @@ -376,7 +376,7 @@ class Form_data_yamlSpec extends WordSpec with OptionValues with WsScalaTestClie } propertyList.reduce(_ && _) } - def testValidInput(input: (String, BothPostYear, File)): Prop = { + def testValidInput(input: (String, Option[BigInt], File)): Prop = { val (name, year, avatar) = input val url = s"""/form_data/url-encoded""" @@ -433,7 +433,7 @@ class Form_data_yamlSpec extends WordSpec with OptionValues with WsScalaTestClie "discard invalid data" in { val genInputs = for { name <- StringGenerator - year <- BothPostYearGenerator + year <- OptionBigIntGenerator avatar <- FileGenerator } yield (name, year, avatar) @@ -446,7 +446,7 @@ class Form_data_yamlSpec extends WordSpec with OptionValues with WsScalaTestClie "do something with valid data" in { val genInputs = for { name <- StringGenerator - year <- BothPostYearGenerator + year <- OptionBigIntGenerator avatar <- FileGenerator } yield (name, year, avatar) diff --git a/play-scala-generator/src/test/resources/expected_results/tests/full_petstore_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/tests/full_petstore_api_yaml.scala index fe2ae1d5..245584ea 100644 --- a/play-scala-generator/src/test/resources/expected_results/tests/full_petstore_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/tests/full_petstore_api_yaml.scala @@ -27,8 +27,8 @@ import org.scalatestplus.play.{OneAppPerTest, WsScalaTestClient} import Generators._ -import de.zalando.play.controllers.ArrayWrapper import java.time.ZonedDateTime +import de.zalando.play.controllers.ArrayWrapper //noinspection ScalaStyle class Full_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScalaTestClient with OneAppPerTest { @@ -55,7 +55,7 @@ class Full_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScala "POST /v2/users" should { - def testInvalidInput(body: UsersUsernamePutBody): Prop = { + def testInvalidInput(body: Option[User]): Prop = { val url = s"""/v2/users""" @@ -103,7 +103,7 @@ class Full_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScala } propertyList.reduce(_ && _) } - def testValidInput(body: UsersUsernamePutBody): Prop = { + def testValidInput(body: Option[User]): Prop = { val parsed_body = parserConstructor("Null").writeValueAsString(body) @@ -157,7 +157,7 @@ class Full_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScala } "discard invalid data" in { val genInputs = for { - body <- UsersUsernamePutBodyGenerator + body <- OptionUserGenerator } yield body val inputs = genInputs suchThat { body => new UsersPostValidator(body).errors.nonEmpty @@ -167,7 +167,7 @@ class Full_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScala } "do something with valid data" in { val genInputs = for { - body <- UsersUsernamePutBodyGenerator + body <- OptionUserGenerator } yield body val inputs = genInputs suchThat { body => new UsersPostValidator(body).errors.isEmpty @@ -179,7 +179,7 @@ class Full_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScala } "POST /v2/stores/order" should { - def testInvalidInput(body: StoresOrderPostBody): Prop = { + def testInvalidInput(body: Option[Order]): Prop = { val url = s"""/v2/stores/order""" @@ -227,7 +227,7 @@ class Full_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScala } propertyList.reduce(_ && _) } - def testValidInput(body: StoresOrderPostBody): Prop = { + def testValidInput(body: Option[Order]): Prop = { val parsed_body = parserConstructor("application/json").writeValueAsString(body) @@ -284,7 +284,7 @@ class Full_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScala } "discard invalid data" in { val genInputs = for { - body <- StoresOrderPostBodyGenerator + body <- OptionOrderGenerator } yield body val inputs = genInputs suchThat { body => new StoresOrderPostValidator(body).errors.nonEmpty @@ -294,7 +294,7 @@ class Full_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScala } "do something with valid data" in { val genInputs = for { - body <- StoresOrderPostBodyGenerator + body <- OptionOrderGenerator } yield body val inputs = genInputs suchThat { body => new StoresOrderPostValidator(body).errors.isEmpty @@ -306,7 +306,7 @@ class Full_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScala } "POST /v2/users/createWithArray" should { - def testInvalidInput(body: UsersCreateWithListPostBody): Prop = { + def testInvalidInput(body: Option[Seq[User]]): Prop = { val url = s"""/v2/users/createWithArray""" @@ -354,7 +354,7 @@ class Full_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScala } propertyList.reduce(_ && _) } - def testValidInput(body: UsersCreateWithListPostBody): Prop = { + def testValidInput(body: Option[Seq[User]]): Prop = { val parsed_body = parserConstructor("Null").writeValueAsString(body) @@ -408,7 +408,7 @@ class Full_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScala } "discard invalid data" in { val genInputs = for { - body <- UsersCreateWithListPostBodyGenerator + body <- OptionSeqUserGenerator } yield body val inputs = genInputs suchThat { body => new UsersCreateWithArrayPostValidator(body).errors.nonEmpty @@ -418,7 +418,7 @@ class Full_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScala } "do something with valid data" in { val genInputs = for { - body <- UsersCreateWithListPostBodyGenerator + body <- OptionSeqUserGenerator } yield body val inputs = genInputs suchThat { body => new UsersCreateWithArrayPostValidator(body).errors.isEmpty @@ -430,7 +430,7 @@ class Full_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScala } "GET /v2/users/login" should { - def testInvalidInput(input: (OrderStatus, OrderStatus)): Prop = { + def testInvalidInput(input: (Option[String], Option[String])): Prop = { val (username, password) = input @@ -478,7 +478,7 @@ class Full_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScala } propertyList.reduce(_ && _) } - def testValidInput(input: (OrderStatus, OrderStatus)): Prop = { + def testValidInput(input: (Option[String], Option[String])): Prop = { val (username, password) = input val url = s"""/v2/users/login?${toQuery("username", username)}&${toQuery("password", password)}""" @@ -534,8 +534,8 @@ class Full_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScala } "discard invalid data" in { val genInputs = for { - username <- OrderStatusGenerator - password <- OrderStatusGenerator + username <- OptionStringGenerator + password <- OptionStringGenerator } yield (username, password) val inputs = genInputs suchThat { case (username, password) => @@ -546,8 +546,8 @@ class Full_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScala } "do something with valid data" in { val genInputs = for { - username <- OrderStatusGenerator - password <- OrderStatusGenerator + username <- OptionStringGenerator + password <- OptionStringGenerator } yield (username, password) val inputs = genInputs suchThat { case (username, password) => @@ -810,7 +810,7 @@ class Full_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScala } "POST /v2/users/createWithList" should { - def testInvalidInput(body: UsersCreateWithListPostBody): Prop = { + def testInvalidInput(body: Option[Seq[User]]): Prop = { val url = s"""/v2/users/createWithList""" @@ -858,7 +858,7 @@ class Full_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScala } propertyList.reduce(_ && _) } - def testValidInput(body: UsersCreateWithListPostBody): Prop = { + def testValidInput(body: Option[Seq[User]]): Prop = { val parsed_body = parserConstructor("Null").writeValueAsString(body) @@ -912,7 +912,7 @@ class Full_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScala } "discard invalid data" in { val genInputs = for { - body <- UsersCreateWithListPostBodyGenerator + body <- OptionSeqUserGenerator } yield body val inputs = genInputs suchThat { body => new UsersCreateWithListPostValidator(body).errors.nonEmpty @@ -922,7 +922,7 @@ class Full_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScala } "do something with valid data" in { val genInputs = for { - body <- UsersCreateWithListPostBodyGenerator + body <- OptionSeqUserGenerator } yield body val inputs = genInputs suchThat { body => new UsersCreateWithListPostValidator(body).errors.isEmpty @@ -1182,7 +1182,7 @@ class Full_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScala } "PUT /v2/users/{username}" should { - def testInvalidInput(input: (String, UsersUsernamePutBody)): Prop = { + def testInvalidInput(input: (String, Option[User])): Prop = { val (username, body) = input @@ -1231,7 +1231,7 @@ class Full_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScala } propertyList.reduce(_ && _) } - def testValidInput(input: (String, UsersUsernamePutBody)): Prop = { + def testValidInput(input: (String, Option[User])): Prop = { val (username, body) = input val parsed_body = parserConstructor("application/json").writeValueAsString(body) @@ -1290,7 +1290,7 @@ class Full_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScala "discard invalid data" in { val genInputs = for { username <- StringGenerator - body <- UsersUsernamePutBodyGenerator + body <- OptionUserGenerator } yield (username, body) val inputs = genInputs suchThat { case (username, body) => @@ -1302,7 +1302,7 @@ class Full_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScala "do something with valid data" in { val genInputs = for { username <- StringGenerator - body <- UsersUsernamePutBodyGenerator + body <- OptionUserGenerator } yield (username, body) val inputs = genInputs suchThat { case (username, body) => diff --git a/play-scala-generator/src/test/resources/expected_results/tests/heroku_petstore_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/tests/heroku_petstore_api_yaml.scala index 56827e54..755a2005 100644 --- a/play-scala-generator/src/test/resources/expected_results/tests/heroku_petstore_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/tests/heroku_petstore_api_yaml.scala @@ -54,7 +54,7 @@ class Heroku_petstore_api_yamlSpec extends WordSpec with OptionValues with WsSca "PUT /pet/" should { - def testInvalidInput(pet: PutPet): Prop = { + def testInvalidInput(pet: Option[Pet]): Prop = { val url = s"""/pet/""" @@ -106,7 +106,7 @@ class Heroku_petstore_api_yamlSpec extends WordSpec with OptionValues with WsSca } propertyList.reduce(_ && _) } - def testValidInput(pet: PutPet): Prop = { + def testValidInput(pet: Option[Pet]): Prop = { val parsed_pet = parserConstructor("application/json").writeValueAsString(pet) @@ -166,7 +166,7 @@ class Heroku_petstore_api_yamlSpec extends WordSpec with OptionValues with WsSca } "discard invalid data" in { val genInputs = for { - pet <- PutPetGenerator + pet <- OptionPetGenerator } yield pet val inputs = genInputs suchThat { pet => new PutValidator(pet).errors.nonEmpty @@ -176,7 +176,7 @@ class Heroku_petstore_api_yamlSpec extends WordSpec with OptionValues with WsSca } "do something with valid data" in { val genInputs = for { - pet <- PutPetGenerator + pet <- OptionPetGenerator } yield pet val inputs = genInputs suchThat { pet => new PutValidator(pet).errors.isEmpty diff --git a/play-scala-generator/src/test/resources/expected_results/tests/nakadi_yaml.scala b/play-scala-generator/src/test/resources/expected_results/tests/nakadi_yaml.scala index cb458df5..9a7177bd 100644 --- a/play-scala-generator/src/test/resources/expected_results/tests/nakadi_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/tests/nakadi_yaml.scala @@ -183,7 +183,7 @@ class Nakadi_yamlSpec extends WordSpec with OptionValues with WsScalaTestClient } "GET /topics/{topic}/events" should { - def testInvalidInput(input: (TopicsTopicEventsGetStream_timeout, TopicsTopicEventsGetStream_timeout, TopicsTopicEventsGetStream_timeout, String, Int, TopicsTopicEventsGetStream_timeout, String)): Prop = { + def testInvalidInput(input: (Option[Int], Option[Int], Option[Int], String, Int, Option[Int], String)): Prop = { val (stream_timeout, stream_limit, batch_flush_timeout, x_nakadi_cursors, batch_limit, batch_keep_alive_limit, topic) = input @@ -233,7 +233,7 @@ class Nakadi_yamlSpec extends WordSpec with OptionValues with WsScalaTestClient } propertyList.reduce(_ && _) } - def testValidInput(input: (TopicsTopicEventsGetStream_timeout, TopicsTopicEventsGetStream_timeout, TopicsTopicEventsGetStream_timeout, String, Int, TopicsTopicEventsGetStream_timeout, String)): Prop = { + def testValidInput(input: (Option[Int], Option[Int], Option[Int], String, Int, Option[Int], String)): Prop = { val (stream_timeout, stream_limit, batch_flush_timeout, x_nakadi_cursors, batch_limit, batch_keep_alive_limit, topic) = input val url = s"""/topics/${toPath(topic)}/events?${toQuery("stream_timeout", stream_timeout)}&${toQuery("stream_limit", stream_limit)}&${toQuery("batch_flush_timeout", batch_flush_timeout)}&${toQuery("batch_limit", batch_limit)}&${toQuery("batch_keep_alive_limit", batch_keep_alive_limit)}""" @@ -294,12 +294,12 @@ class Nakadi_yamlSpec extends WordSpec with OptionValues with WsScalaTestClient } "discard invalid data" in { val genInputs = for { - stream_timeout <- TopicsTopicEventsGetStream_timeoutGenerator - stream_limit <- TopicsTopicEventsGetStream_timeoutGenerator - batch_flush_timeout <- TopicsTopicEventsGetStream_timeoutGenerator + stream_timeout <- OptionIntGenerator + stream_limit <- OptionIntGenerator + batch_flush_timeout <- OptionIntGenerator x_nakadi_cursors <- StringGenerator batch_limit <- IntGenerator - batch_keep_alive_limit <- TopicsTopicEventsGetStream_timeoutGenerator + batch_keep_alive_limit <- OptionIntGenerator topic <- StringGenerator } yield (stream_timeout, stream_limit, batch_flush_timeout, x_nakadi_cursors, batch_limit, batch_keep_alive_limit, topic) @@ -311,12 +311,12 @@ class Nakadi_yamlSpec extends WordSpec with OptionValues with WsScalaTestClient } "do something with valid data" in { val genInputs = for { - stream_timeout <- TopicsTopicEventsGetStream_timeoutGenerator - stream_limit <- TopicsTopicEventsGetStream_timeoutGenerator - batch_flush_timeout <- TopicsTopicEventsGetStream_timeoutGenerator + stream_timeout <- OptionIntGenerator + stream_limit <- OptionIntGenerator + batch_flush_timeout <- OptionIntGenerator x_nakadi_cursors <- StringGenerator batch_limit <- IntGenerator - batch_keep_alive_limit <- TopicsTopicEventsGetStream_timeoutGenerator + batch_keep_alive_limit <- OptionIntGenerator topic <- StringGenerator } yield (stream_timeout, stream_limit, batch_flush_timeout, x_nakadi_cursors, batch_limit, batch_keep_alive_limit, topic) @@ -330,7 +330,7 @@ class Nakadi_yamlSpec extends WordSpec with OptionValues with WsScalaTestClient } "GET /topics/{topic}/partitions/{partition}/events" should { - def testInvalidInput(input: (String, String, TopicsTopicEventsGetStream_timeout, String, Int, TopicsTopicEventsGetStream_timeout, TopicsTopicEventsGetStream_timeout, TopicsTopicEventsGetStream_timeout)): Prop = { + def testInvalidInput(input: (String, String, Option[Int], String, Int, Option[Int], Option[Int], Option[Int])): Prop = { val (start_from, partition, stream_limit, topic, batch_limit, batch_flush_timeout, stream_timeout, batch_keep_alive_limit) = input @@ -378,7 +378,7 @@ class Nakadi_yamlSpec extends WordSpec with OptionValues with WsScalaTestClient } propertyList.reduce(_ && _) } - def testValidInput(input: (String, String, TopicsTopicEventsGetStream_timeout, String, Int, TopicsTopicEventsGetStream_timeout, TopicsTopicEventsGetStream_timeout, TopicsTopicEventsGetStream_timeout)): Prop = { + def testValidInput(input: (String, String, Option[Int], String, Int, Option[Int], Option[Int], Option[Int])): Prop = { val (start_from, partition, stream_limit, topic, batch_limit, batch_flush_timeout, stream_timeout, batch_keep_alive_limit) = input val url = s"""/topics/${toPath(topic)}/partitions/${toPath(partition)}/events?${toQuery("start_from", start_from)}&${toQuery("stream_limit", stream_limit)}&${toQuery("batch_limit", batch_limit)}&${toQuery("batch_flush_timeout", batch_flush_timeout)}&${toQuery("stream_timeout", stream_timeout)}&${toQuery("batch_keep_alive_limit", batch_keep_alive_limit)}""" @@ -439,12 +439,12 @@ class Nakadi_yamlSpec extends WordSpec with OptionValues with WsScalaTestClient val genInputs = for { start_from <- StringGenerator partition <- StringGenerator - stream_limit <- TopicsTopicEventsGetStream_timeoutGenerator + stream_limit <- OptionIntGenerator topic <- StringGenerator batch_limit <- IntGenerator - batch_flush_timeout <- TopicsTopicEventsGetStream_timeoutGenerator - stream_timeout <- TopicsTopicEventsGetStream_timeoutGenerator - batch_keep_alive_limit <- TopicsTopicEventsGetStream_timeoutGenerator + batch_flush_timeout <- OptionIntGenerator + stream_timeout <- OptionIntGenerator + batch_keep_alive_limit <- OptionIntGenerator } yield (start_from, partition, stream_limit, topic, batch_limit, batch_flush_timeout, stream_timeout, batch_keep_alive_limit) val inputs = genInputs suchThat { case (start_from, partition, stream_limit, topic, batch_limit, batch_flush_timeout, stream_timeout, batch_keep_alive_limit) => @@ -457,12 +457,12 @@ class Nakadi_yamlSpec extends WordSpec with OptionValues with WsScalaTestClient val genInputs = for { start_from <- StringGenerator partition <- StringGenerator - stream_limit <- TopicsTopicEventsGetStream_timeoutGenerator + stream_limit <- OptionIntGenerator topic <- StringGenerator batch_limit <- IntGenerator - batch_flush_timeout <- TopicsTopicEventsGetStream_timeoutGenerator - stream_timeout <- TopicsTopicEventsGetStream_timeoutGenerator - batch_keep_alive_limit <- TopicsTopicEventsGetStream_timeoutGenerator + batch_flush_timeout <- OptionIntGenerator + stream_timeout <- OptionIntGenerator + batch_keep_alive_limit <- OptionIntGenerator } yield (start_from, partition, stream_limit, topic, batch_limit, batch_flush_timeout, stream_timeout, batch_keep_alive_limit) val inputs = genInputs suchThat { case (start_from, partition, stream_limit, topic, batch_limit, batch_flush_timeout, stream_timeout, batch_keep_alive_limit) => @@ -475,7 +475,7 @@ class Nakadi_yamlSpec extends WordSpec with OptionValues with WsScalaTestClient } "POST /topics/{topic}/events" should { - def testInvalidInput(input: (String, TopicsTopicEventsBatchPostEvent)): Prop = { + def testInvalidInput(input: (String, Option[Event])): Prop = { val (topic, event) = input @@ -524,7 +524,7 @@ class Nakadi_yamlSpec extends WordSpec with OptionValues with WsScalaTestClient } propertyList.reduce(_ && _) } - def testValidInput(input: (String, TopicsTopicEventsBatchPostEvent)): Prop = { + def testValidInput(input: (String, Option[Event])): Prop = { val (topic, event) = input val parsed_event = parserConstructor("application/json").writeValueAsString(event) @@ -586,7 +586,7 @@ class Nakadi_yamlSpec extends WordSpec with OptionValues with WsScalaTestClient "discard invalid data" in { val genInputs = for { topic <- StringGenerator - event <- TopicsTopicEventsBatchPostEventGenerator + event <- OptionEventGenerator } yield (topic, event) val inputs = genInputs suchThat { case (topic, event) => @@ -598,7 +598,7 @@ class Nakadi_yamlSpec extends WordSpec with OptionValues with WsScalaTestClient "do something with valid data" in { val genInputs = for { topic <- StringGenerator - event <- TopicsTopicEventsBatchPostEventGenerator + event <- OptionEventGenerator } yield (topic, event) val inputs = genInputs suchThat { case (topic, event) => @@ -734,7 +734,7 @@ class Nakadi_yamlSpec extends WordSpec with OptionValues with WsScalaTestClient } "POST /topics/{topic}/events/batch" should { - def testInvalidInput(input: (String, TopicsTopicEventsBatchPostEvent)): Prop = { + def testInvalidInput(input: (String, Option[Event])): Prop = { val (topic, event) = input @@ -783,7 +783,7 @@ class Nakadi_yamlSpec extends WordSpec with OptionValues with WsScalaTestClient } propertyList.reduce(_ && _) } - def testValidInput(input: (String, TopicsTopicEventsBatchPostEvent)): Prop = { + def testValidInput(input: (String, Option[Event])): Prop = { val (topic, event) = input val parsed_event = parserConstructor("application/json").writeValueAsString(event) @@ -845,7 +845,7 @@ class Nakadi_yamlSpec extends WordSpec with OptionValues with WsScalaTestClient "discard invalid data" in { val genInputs = for { topic <- StringGenerator - event <- TopicsTopicEventsBatchPostEventGenerator + event <- OptionEventGenerator } yield (topic, event) val inputs = genInputs suchThat { case (topic, event) => @@ -857,7 +857,7 @@ class Nakadi_yamlSpec extends WordSpec with OptionValues with WsScalaTestClient "do something with valid data" in { val genInputs = for { topic <- StringGenerator - event <- TopicsTopicEventsBatchPostEventGenerator + event <- OptionEventGenerator } yield (topic, event) val inputs = genInputs suchThat { case (topic, event) => diff --git a/play-scala-generator/src/test/resources/expected_results/tests/nested_arrays_validation_yaml.scala b/play-scala-generator/src/test/resources/expected_results/tests/nested_arrays_validation_yaml.scala index 794d3020..192758fb 100644 --- a/play-scala-generator/src/test/resources/expected_results/tests/nested_arrays_validation_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/tests/nested_arrays_validation_yaml.scala @@ -179,7 +179,7 @@ class Nested_arrays_validation_yamlSpec extends WordSpec with OptionValues with } "POST /api/another" should { - def testInvalidInput(example: AnotherPostExample): Prop = { + def testInvalidInput(example: Option[Example]): Prop = { val url = s"""/api/another""" @@ -227,7 +227,7 @@ class Nested_arrays_validation_yamlSpec extends WordSpec with OptionValues with } propertyList.reduce(_ && _) } - def testValidInput(example: AnotherPostExample): Prop = { + def testValidInput(example: Option[Example]): Prop = { val parsed_example = parserConstructor("application/json").writeValueAsString(example) @@ -283,7 +283,7 @@ class Nested_arrays_validation_yamlSpec extends WordSpec with OptionValues with } "discard invalid data" in { val genInputs = for { - example <- AnotherPostExampleGenerator + example <- OptionExampleGenerator } yield example val inputs = genInputs suchThat { example => new AnotherPostValidator(example).errors.nonEmpty @@ -293,7 +293,7 @@ class Nested_arrays_validation_yamlSpec extends WordSpec with OptionValues with } "do something with valid data" in { val genInputs = for { - example <- AnotherPostExampleGenerator + example <- OptionExampleGenerator } yield example val inputs = genInputs suchThat { example => new AnotherPostValidator(example).errors.isEmpty diff --git a/play-scala-generator/src/test/resources/expected_results/tests/numbers_validation_yaml.scala b/play-scala-generator/src/test/resources/expected_results/tests/numbers_validation_yaml.scala index c0ff4210..b5e197b6 100644 --- a/play-scala-generator/src/test/resources/expected_results/tests/numbers_validation_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/tests/numbers_validation_yaml.scala @@ -53,7 +53,7 @@ class Numbers_validation_yamlSpec extends WordSpec with OptionValues with WsScal "GET /" should { - def testInvalidInput(input: (Float, Double, GetInteger_optional, Long, Int, GetFloat_optional, GetDouble_optional, GetLong_optional)): Prop = { + def testInvalidInput(input: (Float, Double, Option[Int], Long, Int, Option[Float], Option[Double], Option[Long])): Prop = { val (float_required, double_required, integer_optional, long_required, integer_required, float_optional, double_optional, long_optional) = input @@ -101,7 +101,7 @@ class Numbers_validation_yamlSpec extends WordSpec with OptionValues with WsScal } propertyList.reduce(_ && _) } - def testValidInput(input: (Float, Double, GetInteger_optional, Long, Int, GetFloat_optional, GetDouble_optional, GetLong_optional)): Prop = { + def testValidInput(input: (Float, Double, Option[Int], Long, Int, Option[Float], Option[Double], Option[Long])): Prop = { val (float_required, double_required, integer_optional, long_required, integer_required, float_optional, double_optional, long_optional) = input val url = s"""/?${toQuery("float_required", float_required)}&${toQuery("double_required", double_required)}&${toQuery("integer_optional", integer_optional)}&${toQuery("long_required", long_required)}&${toQuery("integer_required", integer_required)}&${toQuery("float_optional", float_optional)}&${toQuery("double_optional", double_optional)}&${toQuery("long_optional", long_optional)}""" @@ -158,12 +158,12 @@ class Numbers_validation_yamlSpec extends WordSpec with OptionValues with WsScal val genInputs = for { float_required <- FloatGenerator double_required <- DoubleGenerator - integer_optional <- GetInteger_optionalGenerator + integer_optional <- OptionIntGenerator long_required <- LongGenerator integer_required <- IntGenerator - float_optional <- GetFloat_optionalGenerator - double_optional <- GetDouble_optionalGenerator - long_optional <- GetLong_optionalGenerator + float_optional <- OptionFloatGenerator + double_optional <- OptionDoubleGenerator + long_optional <- OptionLongGenerator } yield (float_required, double_required, integer_optional, long_required, integer_required, float_optional, double_optional, long_optional) val inputs = genInputs suchThat { case (float_required, double_required, integer_optional, long_required, integer_required, float_optional, double_optional, long_optional) => @@ -176,12 +176,12 @@ class Numbers_validation_yamlSpec extends WordSpec with OptionValues with WsScal val genInputs = for { float_required <- FloatGenerator double_required <- DoubleGenerator - integer_optional <- GetInteger_optionalGenerator + integer_optional <- OptionIntGenerator long_required <- LongGenerator integer_required <- IntGenerator - float_optional <- GetFloat_optionalGenerator - double_optional <- GetDouble_optionalGenerator - long_optional <- GetLong_optionalGenerator + float_optional <- OptionFloatGenerator + double_optional <- OptionDoubleGenerator + long_optional <- OptionLongGenerator } yield (float_required, double_required, integer_optional, long_required, integer_required, float_optional, double_optional, long_optional) val inputs = genInputs suchThat { case (float_required, double_required, integer_optional, long_required, integer_required, float_optional, double_optional, long_optional) => diff --git a/play-scala-generator/src/test/resources/expected_results/tests/simple_petstore_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/tests/simple_petstore_api_yaml.scala index c84cc73c..b7144fc4 100644 --- a/play-scala-generator/src/test/resources/expected_results/tests/simple_petstore_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/tests/simple_petstore_api_yaml.scala @@ -180,7 +180,7 @@ class Simple_petstore_api_yamlSpec extends WordSpec with OptionValues with WsSca } "GET /api/pets" should { - def testInvalidInput(input: (PetsGetTags, PetsGetLimit)): Prop = { + def testInvalidInput(input: (Option[ArrayWrapper[String]], Option[Int])): Prop = { val (tags, limit) = input @@ -234,7 +234,7 @@ class Simple_petstore_api_yamlSpec extends WordSpec with OptionValues with WsSca } propertyList.reduce(_ && _) } - def testValidInput(input: (PetsGetTags, PetsGetLimit)): Prop = { + def testValidInput(input: (Option[ArrayWrapper[String]], Option[Int])): Prop = { val (tags, limit) = input val url = s"""/api/pets?${toQuery("tags", tags)}&${toQuery("limit", limit)}""" @@ -295,8 +295,8 @@ class Simple_petstore_api_yamlSpec extends WordSpec with OptionValues with WsSca } "discard invalid data" in { val genInputs = for { - tags <- PetsGetTagsGenerator - limit <- PetsGetLimitGenerator + tags <- OptionArrayWrapperStringGenerator + limit <- OptionIntGenerator } yield (tags, limit) val inputs = genInputs suchThat { case (tags, limit) => @@ -307,8 +307,8 @@ class Simple_petstore_api_yamlSpec extends WordSpec with OptionValues with WsSca } "do something with valid data" in { val genInputs = for { - tags <- PetsGetTagsGenerator - limit <- PetsGetLimitGenerator + tags <- OptionArrayWrapperStringGenerator + limit <- OptionIntGenerator } yield (tags, limit) val inputs = genInputs suchThat { case (tags, limit) => diff --git a/play-scala-generator/src/test/resources/expected_results/tests/split_petstore_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/tests/split_petstore_api_yaml.scala index db4dbf48..807f4513 100644 --- a/play-scala-generator/src/test/resources/expected_results/tests/split_petstore_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/tests/split_petstore_api_yaml.scala @@ -27,8 +27,8 @@ import org.scalatestplus.play.{OneAppPerTest, WsScalaTestClient} import Generators._ -import de.zalando.play.controllers.ArrayWrapper import java.time.ZonedDateTime +import de.zalando.play.controllers.ArrayWrapper //noinspection ScalaStyle class Split_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScalaTestClient with OneAppPerTest { @@ -55,7 +55,7 @@ class Split_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScal "POST /v2/users" should { - def testInvalidInput(body: UsersUsernamePutBody): Prop = { + def testInvalidInput(body: Option[User]): Prop = { val url = s"""/v2/users""" @@ -103,7 +103,7 @@ class Split_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScal } propertyList.reduce(_ && _) } - def testValidInput(body: UsersUsernamePutBody): Prop = { + def testValidInput(body: Option[User]): Prop = { val parsed_body = parserConstructor("Null").writeValueAsString(body) @@ -157,7 +157,7 @@ class Split_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScal } "discard invalid data" in { val genInputs = for { - body <- UsersUsernamePutBodyGenerator + body <- OptionUserGenerator } yield body val inputs = genInputs suchThat { body => new UsersPostValidator(body).errors.nonEmpty @@ -167,7 +167,7 @@ class Split_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScal } "do something with valid data" in { val genInputs = for { - body <- UsersUsernamePutBodyGenerator + body <- OptionUserGenerator } yield body val inputs = genInputs suchThat { body => new UsersPostValidator(body).errors.isEmpty @@ -179,7 +179,7 @@ class Split_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScal } "POST /v2/stores/order" should { - def testInvalidInput(body: StoresOrderPostBody): Prop = { + def testInvalidInput(body: Option[Order]): Prop = { val url = s"""/v2/stores/order""" @@ -227,7 +227,7 @@ class Split_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScal } propertyList.reduce(_ && _) } - def testValidInput(body: StoresOrderPostBody): Prop = { + def testValidInput(body: Option[Order]): Prop = { val parsed_body = parserConstructor("application/json").writeValueAsString(body) @@ -284,7 +284,7 @@ class Split_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScal } "discard invalid data" in { val genInputs = for { - body <- StoresOrderPostBodyGenerator + body <- OptionOrderGenerator } yield body val inputs = genInputs suchThat { body => new StoresOrderPostValidator(body).errors.nonEmpty @@ -294,7 +294,7 @@ class Split_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScal } "do something with valid data" in { val genInputs = for { - body <- StoresOrderPostBodyGenerator + body <- OptionOrderGenerator } yield body val inputs = genInputs suchThat { body => new StoresOrderPostValidator(body).errors.isEmpty @@ -306,7 +306,7 @@ class Split_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScal } "POST /v2/users/createWithArray" should { - def testInvalidInput(body: UsersCreateWithListPostBody): Prop = { + def testInvalidInput(body: Option[Seq[User]]): Prop = { val url = s"""/v2/users/createWithArray""" @@ -354,7 +354,7 @@ class Split_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScal } propertyList.reduce(_ && _) } - def testValidInput(body: UsersCreateWithListPostBody): Prop = { + def testValidInput(body: Option[Seq[User]]): Prop = { val parsed_body = parserConstructor("Null").writeValueAsString(body) @@ -408,7 +408,7 @@ class Split_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScal } "discard invalid data" in { val genInputs = for { - body <- UsersCreateWithListPostBodyGenerator + body <- OptionSeqUserGenerator } yield body val inputs = genInputs suchThat { body => new UsersCreateWithArrayPostValidator(body).errors.nonEmpty @@ -418,7 +418,7 @@ class Split_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScal } "do something with valid data" in { val genInputs = for { - body <- UsersCreateWithListPostBodyGenerator + body <- OptionSeqUserGenerator } yield body val inputs = genInputs suchThat { body => new UsersCreateWithArrayPostValidator(body).errors.isEmpty @@ -430,7 +430,7 @@ class Split_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScal } "GET /v2/users/login" should { - def testInvalidInput(input: (OrderStatus, OrderStatus)): Prop = { + def testInvalidInput(input: (Option[String], Option[String])): Prop = { val (username, password) = input @@ -478,7 +478,7 @@ class Split_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScal } propertyList.reduce(_ && _) } - def testValidInput(input: (OrderStatus, OrderStatus)): Prop = { + def testValidInput(input: (Option[String], Option[String])): Prop = { val (username, password) = input val url = s"""/v2/users/login?${toQuery("username", username)}&${toQuery("password", password)}""" @@ -534,8 +534,8 @@ class Split_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScal } "discard invalid data" in { val genInputs = for { - username <- OrderStatusGenerator - password <- OrderStatusGenerator + username <- OptionStringGenerator + password <- OptionStringGenerator } yield (username, password) val inputs = genInputs suchThat { case (username, password) => @@ -546,8 +546,8 @@ class Split_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScal } "do something with valid data" in { val genInputs = for { - username <- OrderStatusGenerator - password <- OrderStatusGenerator + username <- OptionStringGenerator + password <- OptionStringGenerator } yield (username, password) val inputs = genInputs suchThat { case (username, password) => @@ -810,7 +810,7 @@ class Split_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScal } "POST /v2/users/createWithList" should { - def testInvalidInput(body: UsersCreateWithListPostBody): Prop = { + def testInvalidInput(body: Option[Seq[User]]): Prop = { val url = s"""/v2/users/createWithList""" @@ -858,7 +858,7 @@ class Split_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScal } propertyList.reduce(_ && _) } - def testValidInput(body: UsersCreateWithListPostBody): Prop = { + def testValidInput(body: Option[Seq[User]]): Prop = { val parsed_body = parserConstructor("Null").writeValueAsString(body) @@ -912,7 +912,7 @@ class Split_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScal } "discard invalid data" in { val genInputs = for { - body <- UsersCreateWithListPostBodyGenerator + body <- OptionSeqUserGenerator } yield body val inputs = genInputs suchThat { body => new UsersCreateWithListPostValidator(body).errors.nonEmpty @@ -922,7 +922,7 @@ class Split_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScal } "do something with valid data" in { val genInputs = for { - body <- UsersCreateWithListPostBodyGenerator + body <- OptionSeqUserGenerator } yield body val inputs = genInputs suchThat { body => new UsersCreateWithListPostValidator(body).errors.isEmpty @@ -1182,7 +1182,7 @@ class Split_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScal } "PUT /v2/users/{username}" should { - def testInvalidInput(input: (String, UsersUsernamePutBody)): Prop = { + def testInvalidInput(input: (String, Option[User])): Prop = { val (username, body) = input @@ -1231,7 +1231,7 @@ class Split_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScal } propertyList.reduce(_ && _) } - def testValidInput(input: (String, UsersUsernamePutBody)): Prop = { + def testValidInput(input: (String, Option[User])): Prop = { val (username, body) = input val parsed_body = parserConstructor("application/json").writeValueAsString(body) @@ -1290,7 +1290,7 @@ class Split_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScal "discard invalid data" in { val genInputs = for { username <- StringGenerator - body <- UsersUsernamePutBodyGenerator + body <- OptionUserGenerator } yield (username, body) val inputs = genInputs suchThat { case (username, body) => @@ -1302,7 +1302,7 @@ class Split_petstore_api_yamlSpec extends WordSpec with OptionValues with WsScal "do something with valid data" in { val genInputs = for { username <- StringGenerator - body <- UsersUsernamePutBodyGenerator + body <- OptionUserGenerator } yield (username, body) val inputs = genInputs suchThat { case (username, body) => diff --git a/play-scala-generator/src/test/resources/expected_results/tests/string_formats_validation_yaml.scala b/play-scala-generator/src/test/resources/expected_results/tests/string_formats_validation_yaml.scala index 5d27f593..83654176 100644 --- a/play-scala-generator/src/test/resources/expected_results/tests/string_formats_validation_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/tests/string_formats_validation_yaml.scala @@ -27,10 +27,10 @@ import org.scalatestplus.play.{OneAppPerTest, WsScalaTestClient} import Generators._ +import java.time.ZonedDateTime import java.time.LocalDate import de.zalando.play.controllers.BinaryString import BinaryString._ -import java.time.ZonedDateTime import de.zalando.play.controllers.Base64String import Base64String._ @@ -59,7 +59,7 @@ class String_formats_validation_yamlSpec extends WordSpec with OptionValues with "POST /string" should { - def testInvalidInput(input: (String, StringPostPassword_optional, LocalDate, StringPostBinary_optional, StringPostDate_optional, Base64String, StringPostBase64optional, StringPostString_optional, ZonedDateTime, String, StringPostDate_time_optional)): Prop = { + def testInvalidInput(input: (String, Option[String], LocalDate, Option[BinaryString], Option[LocalDate], Base64String, Option[Base64String], Option[String], ZonedDateTime, String, Option[ZonedDateTime])): Prop = { val (string_required, password_optional, date_required, binary_optional, date_optional, base64required, base64optional, string_optional, date_time_required, password_required, date_time_optional) = input @@ -108,7 +108,7 @@ class String_formats_validation_yamlSpec extends WordSpec with OptionValues with } propertyList.reduce(_ && _) } - def testValidInput(input: (String, StringPostPassword_optional, LocalDate, StringPostBinary_optional, StringPostDate_optional, Base64String, StringPostBase64optional, StringPostString_optional, ZonedDateTime, String, StringPostDate_time_optional)): Prop = { + def testValidInput(input: (String, Option[String], LocalDate, Option[BinaryString], Option[LocalDate], Base64String, Option[Base64String], Option[String], ZonedDateTime, String, Option[ZonedDateTime])): Prop = { val (string_required, password_optional, date_required, binary_optional, date_optional, base64required, base64optional, string_optional, date_time_required, password_required, date_time_optional) = input val parsed_binary_optional = parserConstructor("application/json").writeValueAsString(binary_optional) @@ -166,16 +166,16 @@ class String_formats_validation_yamlSpec extends WordSpec with OptionValues with "discard invalid data" in { val genInputs = for { string_required <- StringGenerator - password_optional <- StringPostPassword_optionalGenerator + password_optional <- OptionStringGenerator date_required <- LocalDateGenerator - binary_optional <- StringPostBinary_optionalGenerator - date_optional <- StringPostDate_optionalGenerator + binary_optional <- OptionBinaryStringGenerator + date_optional <- OptionLocalDateGenerator base64required <- Base64StringGenerator - base64optional <- StringPostBase64optionalGenerator - string_optional <- StringPostString_optionalGenerator + base64optional <- OptionBase64StringGenerator + string_optional <- OptionStringGenerator date_time_required <- ZonedDateTimeGenerator password_required <- StringGenerator - date_time_optional <- StringPostDate_time_optionalGenerator + date_time_optional <- OptionZonedDateTimeGenerator } yield (string_required, password_optional, date_required, binary_optional, date_optional, base64required, base64optional, string_optional, date_time_required, password_required, date_time_optional) val inputs = genInputs suchThat { case (string_required, password_optional, date_required, binary_optional, date_optional, base64required, base64optional, string_optional, date_time_required, password_required, date_time_optional) => @@ -187,16 +187,16 @@ class String_formats_validation_yamlSpec extends WordSpec with OptionValues with "do something with valid data" in { val genInputs = for { string_required <- StringGenerator - password_optional <- StringPostPassword_optionalGenerator + password_optional <- OptionStringGenerator date_required <- LocalDateGenerator - binary_optional <- StringPostBinary_optionalGenerator - date_optional <- StringPostDate_optionalGenerator + binary_optional <- OptionBinaryStringGenerator + date_optional <- OptionLocalDateGenerator base64required <- Base64StringGenerator - base64optional <- StringPostBase64optionalGenerator - string_optional <- StringPostString_optionalGenerator + base64optional <- OptionBase64StringGenerator + string_optional <- OptionStringGenerator date_time_required <- ZonedDateTimeGenerator password_required <- StringGenerator - date_time_optional <- StringPostDate_time_optionalGenerator + date_time_optional <- OptionZonedDateTimeGenerator } yield (string_required, password_optional, date_required, binary_optional, date_optional, base64required, base64optional, string_optional, date_time_required, password_required, date_time_optional) val inputs = genInputs suchThat { case (string_required, password_optional, date_required, binary_optional, date_optional, base64required, base64optional, string_optional, date_time_required, password_required, date_time_optional) => diff --git a/play-scala-generator/src/test/resources/expected_results/tests/string_formats_yaml.scala b/play-scala-generator/src/test/resources/expected_results/tests/string_formats_yaml.scala index 687ebe78..a9fae735 100644 --- a/play-scala-generator/src/test/resources/expected_results/tests/string_formats_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/tests/string_formats_yaml.scala @@ -29,11 +29,11 @@ import Generators._ import de.zalando.play.controllers.Base64String import Base64String._ +import de.zalando.play.controllers.BinaryString +import BinaryString._ import java.time.ZonedDateTime import java.util.UUID import java.time.LocalDate -import de.zalando.play.controllers.BinaryString -import BinaryString._ //noinspection ScalaStyle class String_formats_yamlSpec extends WordSpec with OptionValues with WsScalaTestClient with OneAppPerTest { @@ -60,7 +60,7 @@ class String_formats_yamlSpec extends WordSpec with OptionValues with WsScalaTes "GET /" should { - def testInvalidInput(input: (GetDate_time, GetDate, GetBase64, GetUuid, BinaryString)): Prop = { + def testInvalidInput(input: (Option[ZonedDateTime], Option[LocalDate], Option[Base64String], Option[UUID], BinaryString)): Prop = { val (date_time, date, base64, uuid, petId) = input @@ -109,7 +109,7 @@ class String_formats_yamlSpec extends WordSpec with OptionValues with WsScalaTes } propertyList.reduce(_ && _) } - def testValidInput(input: (GetDate_time, GetDate, GetBase64, GetUuid, BinaryString)): Prop = { + def testValidInput(input: (Option[ZonedDateTime], Option[LocalDate], Option[Base64String], Option[UUID], BinaryString)): Prop = { val (date_time, date, base64, uuid, petId) = input val parsed_petId = parserConstructor("application/json").writeValueAsString(petId) @@ -166,10 +166,10 @@ class String_formats_yamlSpec extends WordSpec with OptionValues with WsScalaTes } "discard invalid data" in { val genInputs = for { - date_time <- GetDate_timeGenerator - date <- GetDateGenerator - base64 <- GetBase64Generator - uuid <- GetUuidGenerator + date_time <- OptionZonedDateTimeGenerator + date <- OptionLocalDateGenerator + base64 <- OptionBase64StringGenerator + uuid <- OptionUUIDGenerator petId <- BinaryStringGenerator } yield (date_time, date, base64, uuid, petId) @@ -181,10 +181,10 @@ class String_formats_yamlSpec extends WordSpec with OptionValues with WsScalaTes } "do something with valid data" in { val genInputs = for { - date_time <- GetDate_timeGenerator - date <- GetDateGenerator - base64 <- GetBase64Generator - uuid <- GetUuidGenerator + date_time <- OptionZonedDateTimeGenerator + date <- OptionLocalDateGenerator + base64 <- OptionBase64StringGenerator + uuid <- OptionUUIDGenerator petId <- BinaryStringGenerator } yield (date_time, date, base64, uuid, petId) diff --git a/play-scala-generator/src/test/resources/expected_results/tests/type_deduplication_yaml.scala b/play-scala-generator/src/test/resources/expected_results/tests/type_deduplication_yaml.scala index e9d04847..c7bfebd9 100644 --- a/play-scala-generator/src/test/resources/expected_results/tests/type_deduplication_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/tests/type_deduplication_yaml.scala @@ -1048,7 +1048,7 @@ class Type_deduplication_yamlSpec extends WordSpec with OptionValues with WsScal } "GET /api/user/{user_id}/plants" should { - def testInvalidInput(input: (String, UsersGetLimit, UsersGetLimit)): Prop = { + def testInvalidInput(input: (String, Option[BigInt], Option[BigInt])): Prop = { val (user_id, limit, offset) = input @@ -1094,7 +1094,7 @@ class Type_deduplication_yamlSpec extends WordSpec with OptionValues with WsScal } propertyList.reduce(_ && _) } - def testValidInput(input: (String, UsersGetLimit, UsersGetLimit)): Prop = { + def testValidInput(input: (String, Option[BigInt], Option[BigInt])): Prop = { val (user_id, limit, offset) = input val url = s"""/api/user/${toPath(user_id)}/plants?${toQuery("limit", limit)}&${toQuery("offset", offset)}""" @@ -1149,8 +1149,8 @@ class Type_deduplication_yamlSpec extends WordSpec with OptionValues with WsScal "discard invalid data" in { val genInputs = for { user_id <- StringGenerator - limit <- UsersGetLimitGenerator - offset <- UsersGetLimitGenerator + limit <- OptionBigIntGenerator + offset <- OptionBigIntGenerator } yield (user_id, limit, offset) val inputs = genInputs suchThat { case (user_id, limit, offset) => @@ -1162,8 +1162,8 @@ class Type_deduplication_yamlSpec extends WordSpec with OptionValues with WsScal "do something with valid data" in { val genInputs = for { user_id <- StringGenerator - limit <- UsersGetLimitGenerator - offset <- UsersGetLimitGenerator + limit <- OptionBigIntGenerator + offset <- OptionBigIntGenerator } yield (user_id, limit, offset) val inputs = genInputs suchThat { case (user_id, limit, offset) => @@ -1425,7 +1425,7 @@ class Type_deduplication_yamlSpec extends WordSpec with OptionValues with WsScal } "GET /api/plants/{plant_id}/waterings" should { - def testInvalidInput(input: (String, UsersGetLimit, UsersGetLimit)): Prop = { + def testInvalidInput(input: (String, Option[BigInt], Option[BigInt])): Prop = { val (plant_id, limit, offset) = input @@ -1471,7 +1471,7 @@ class Type_deduplication_yamlSpec extends WordSpec with OptionValues with WsScal } propertyList.reduce(_ && _) } - def testValidInput(input: (String, UsersGetLimit, UsersGetLimit)): Prop = { + def testValidInput(input: (String, Option[BigInt], Option[BigInt])): Prop = { val (plant_id, limit, offset) = input val url = s"""/api/plants/${toPath(plant_id)}/waterings?${toQuery("limit", limit)}&${toQuery("offset", offset)}""" @@ -1526,8 +1526,8 @@ class Type_deduplication_yamlSpec extends WordSpec with OptionValues with WsScal "discard invalid data" in { val genInputs = for { plant_id <- StringGenerator - limit <- UsersGetLimitGenerator - offset <- UsersGetLimitGenerator + limit <- OptionBigIntGenerator + offset <- OptionBigIntGenerator } yield (plant_id, limit, offset) val inputs = genInputs suchThat { case (plant_id, limit, offset) => @@ -1539,8 +1539,8 @@ class Type_deduplication_yamlSpec extends WordSpec with OptionValues with WsScal "do something with valid data" in { val genInputs = for { plant_id <- StringGenerator - limit <- UsersGetLimitGenerator - offset <- UsersGetLimitGenerator + limit <- OptionBigIntGenerator + offset <- OptionBigIntGenerator } yield (plant_id, limit, offset) val inputs = genInputs suchThat { case (plant_id, limit, offset) => @@ -1680,7 +1680,7 @@ class Type_deduplication_yamlSpec extends WordSpec with OptionValues with WsScal } "GET /api/users" should { - def testInvalidInput(input: (UsersGetLimit, UsersGetLimit)): Prop = { + def testInvalidInput(input: (Option[BigInt], Option[BigInt])): Prop = { val (limit, offset) = input @@ -1726,7 +1726,7 @@ class Type_deduplication_yamlSpec extends WordSpec with OptionValues with WsScal } propertyList.reduce(_ && _) } - def testValidInput(input: (UsersGetLimit, UsersGetLimit)): Prop = { + def testValidInput(input: (Option[BigInt], Option[BigInt])): Prop = { val (limit, offset) = input val url = s"""/api/users?${toQuery("limit", limit)}&${toQuery("offset", offset)}""" @@ -1779,8 +1779,8 @@ class Type_deduplication_yamlSpec extends WordSpec with OptionValues with WsScal } "discard invalid data" in { val genInputs = for { - limit <- UsersGetLimitGenerator - offset <- UsersGetLimitGenerator + limit <- OptionBigIntGenerator + offset <- OptionBigIntGenerator } yield (limit, offset) val inputs = genInputs suchThat { case (limit, offset) => @@ -1791,8 +1791,8 @@ class Type_deduplication_yamlSpec extends WordSpec with OptionValues with WsScal } "do something with valid data" in { val genInputs = for { - limit <- UsersGetLimitGenerator - offset <- UsersGetLimitGenerator + limit <- OptionBigIntGenerator + offset <- OptionBigIntGenerator } yield (limit, offset) val inputs = genInputs suchThat { case (limit, offset) => @@ -2300,7 +2300,7 @@ class Type_deduplication_yamlSpec extends WordSpec with OptionValues with WsScal } "GET /api/plants" should { - def testInvalidInput(input: (PlantsGetLimit, PlantsGetOffset)): Prop = { + def testInvalidInput(input: (Option[BigInt], Option[BigInt])): Prop = { val (limit, offset) = input @@ -2346,7 +2346,7 @@ class Type_deduplication_yamlSpec extends WordSpec with OptionValues with WsScal } propertyList.reduce(_ && _) } - def testValidInput(input: (PlantsGetLimit, PlantsGetOffset)): Prop = { + def testValidInput(input: (Option[BigInt], Option[BigInt])): Prop = { val (limit, offset) = input val url = s"""/api/plants?${toQuery("limit", limit)}&${toQuery("offset", offset)}""" @@ -2399,8 +2399,8 @@ class Type_deduplication_yamlSpec extends WordSpec with OptionValues with WsScal } "discard invalid data" in { val genInputs = for { - limit <- PlantsGetLimitGenerator - offset <- PlantsGetOffsetGenerator + limit <- OptionBigIntGenerator + offset <- OptionBigIntGenerator } yield (limit, offset) val inputs = genInputs suchThat { case (limit, offset) => @@ -2411,8 +2411,8 @@ class Type_deduplication_yamlSpec extends WordSpec with OptionValues with WsScal } "do something with valid data" in { val genInputs = for { - limit <- PlantsGetLimitGenerator - offset <- PlantsGetOffsetGenerator + limit <- OptionBigIntGenerator + offset <- OptionBigIntGenerator } yield (limit, offset) val inputs = genInputs suchThat { case (limit, offset) => @@ -2916,7 +2916,7 @@ class Type_deduplication_yamlSpec extends WordSpec with OptionValues with WsScal } "GET /api/areas" should { - def testInvalidInput(input: (UsersGetLimit, UsersGetLimit)): Prop = { + def testInvalidInput(input: (Option[BigInt], Option[BigInt])): Prop = { val (limit, offset) = input @@ -2962,7 +2962,7 @@ class Type_deduplication_yamlSpec extends WordSpec with OptionValues with WsScal } propertyList.reduce(_ && _) } - def testValidInput(input: (UsersGetLimit, UsersGetLimit)): Prop = { + def testValidInput(input: (Option[BigInt], Option[BigInt])): Prop = { val (limit, offset) = input val url = s"""/api/areas?${toQuery("limit", limit)}&${toQuery("offset", offset)}""" @@ -3015,8 +3015,8 @@ class Type_deduplication_yamlSpec extends WordSpec with OptionValues with WsScal } "discard invalid data" in { val genInputs = for { - limit <- UsersGetLimitGenerator - offset <- UsersGetLimitGenerator + limit <- OptionBigIntGenerator + offset <- OptionBigIntGenerator } yield (limit, offset) val inputs = genInputs suchThat { case (limit, offset) => @@ -3027,8 +3027,8 @@ class Type_deduplication_yamlSpec extends WordSpec with OptionValues with WsScal } "do something with valid data" in { val genInputs = for { - limit <- UsersGetLimitGenerator - offset <- UsersGetLimitGenerator + limit <- OptionBigIntGenerator + offset <- OptionBigIntGenerator } yield (limit, offset) val inputs = genInputs suchThat { case (limit, offset) => @@ -3772,7 +3772,7 @@ class Type_deduplication_yamlSpec extends WordSpec with OptionValues with WsScal } "GET /api/plants/{plant_id}/pictures" should { - def testInvalidInput(input: (String, UsersGetLimit, UsersGetLimit)): Prop = { + def testInvalidInput(input: (String, Option[BigInt], Option[BigInt])): Prop = { val (plant_id, limit, offset) = input @@ -3818,7 +3818,7 @@ class Type_deduplication_yamlSpec extends WordSpec with OptionValues with WsScal } propertyList.reduce(_ && _) } - def testValidInput(input: (String, UsersGetLimit, UsersGetLimit)): Prop = { + def testValidInput(input: (String, Option[BigInt], Option[BigInt])): Prop = { val (plant_id, limit, offset) = input val url = s"""/api/plants/${toPath(plant_id)}/pictures?${toQuery("limit", limit)}&${toQuery("offset", offset)}""" @@ -3873,8 +3873,8 @@ class Type_deduplication_yamlSpec extends WordSpec with OptionValues with WsScal "discard invalid data" in { val genInputs = for { plant_id <- StringGenerator - limit <- UsersGetLimitGenerator - offset <- UsersGetLimitGenerator + limit <- OptionBigIntGenerator + offset <- OptionBigIntGenerator } yield (plant_id, limit, offset) val inputs = genInputs suchThat { case (plant_id, limit, offset) => @@ -3886,8 +3886,8 @@ class Type_deduplication_yamlSpec extends WordSpec with OptionValues with WsScal "do something with valid data" in { val genInputs = for { plant_id <- StringGenerator - limit <- UsersGetLimitGenerator - offset <- UsersGetLimitGenerator + limit <- OptionBigIntGenerator + offset <- OptionBigIntGenerator } yield (plant_id, limit, offset) val inputs = genInputs suchThat { case (plant_id, limit, offset) => diff --git a/play-scala-generator/src/test/resources/expected_results/tests/uber_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/tests/uber_api_yaml.scala index dfd25d22..e9cd4856 100644 --- a/play-scala-generator/src/test/resources/expected_results/tests/uber_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/tests/uber_api_yaml.scala @@ -27,8 +27,8 @@ import org.scalatestplus.play.{OneAppPerTest, WsScalaTestClient} import Generators._ -import java.util.UUID import scala.math.BigDecimal +import java.util.UUID //noinspection ScalaStyle class Uber_api_yamlSpec extends WordSpec with OptionValues with WsScalaTestClient with OneAppPerTest { @@ -55,7 +55,7 @@ class Uber_api_yamlSpec extends WordSpec with OptionValues with WsScalaTestClien "GET /v1/history" should { - def testInvalidInput(input: (ErrorCode, ErrorCode)): Prop = { + def testInvalidInput(input: (Option[Int], Option[Int])): Prop = { val (offset, limit) = input @@ -101,7 +101,7 @@ class Uber_api_yamlSpec extends WordSpec with OptionValues with WsScalaTestClien } propertyList.reduce(_ && _) } - def testValidInput(input: (ErrorCode, ErrorCode)): Prop = { + def testValidInput(input: (Option[Int], Option[Int])): Prop = { val (offset, limit) = input val url = s"""/v1/history?${toQuery("offset", offset)}&${toQuery("limit", limit)}""" @@ -154,8 +154,8 @@ class Uber_api_yamlSpec extends WordSpec with OptionValues with WsScalaTestClien } "discard invalid data" in { val genInputs = for { - offset <- ErrorCodeGenerator - limit <- ErrorCodeGenerator + offset <- OptionIntGenerator + limit <- OptionIntGenerator } yield (offset, limit) val inputs = genInputs suchThat { case (offset, limit) => @@ -166,8 +166,8 @@ class Uber_api_yamlSpec extends WordSpec with OptionValues with WsScalaTestClien } "do something with valid data" in { val genInputs = for { - offset <- ErrorCodeGenerator - limit <- ErrorCodeGenerator + offset <- OptionIntGenerator + limit <- OptionIntGenerator } yield (offset, limit) val inputs = genInputs suchThat { case (offset, limit) => @@ -180,7 +180,7 @@ class Uber_api_yamlSpec extends WordSpec with OptionValues with WsScalaTestClien } "GET /v1/estimates/time" should { - def testInvalidInput(input: (Double, Double, EstimatesTimeGetCustomer_uuid, ProfilePicture)): Prop = { + def testInvalidInput(input: (Double, Double, Option[UUID], Option[String])): Prop = { val (start_latitude, start_longitude, customer_uuid, product_id) = input @@ -226,7 +226,7 @@ class Uber_api_yamlSpec extends WordSpec with OptionValues with WsScalaTestClien } propertyList.reduce(_ && _) } - def testValidInput(input: (Double, Double, EstimatesTimeGetCustomer_uuid, ProfilePicture)): Prop = { + def testValidInput(input: (Double, Double, Option[UUID], Option[String])): Prop = { val (start_latitude, start_longitude, customer_uuid, product_id) = input val url = s"""/v1/estimates/time?${toQuery("start_latitude", start_latitude)}&${toQuery("start_longitude", start_longitude)}&${toQuery("customer_uuid", customer_uuid)}&${toQuery("product_id", product_id)}""" @@ -281,8 +281,8 @@ class Uber_api_yamlSpec extends WordSpec with OptionValues with WsScalaTestClien val genInputs = for { start_latitude <- DoubleGenerator start_longitude <- DoubleGenerator - customer_uuid <- EstimatesTimeGetCustomer_uuidGenerator - product_id <- ProfilePictureGenerator + customer_uuid <- OptionUUIDGenerator + product_id <- OptionStringGenerator } yield (start_latitude, start_longitude, customer_uuid, product_id) val inputs = genInputs suchThat { case (start_latitude, start_longitude, customer_uuid, product_id) => @@ -295,8 +295,8 @@ class Uber_api_yamlSpec extends WordSpec with OptionValues with WsScalaTestClien val genInputs = for { start_latitude <- DoubleGenerator start_longitude <- DoubleGenerator - customer_uuid <- EstimatesTimeGetCustomer_uuidGenerator - product_id <- ProfilePictureGenerator + customer_uuid <- OptionUUIDGenerator + product_id <- OptionStringGenerator } yield (start_latitude, start_longitude, customer_uuid, product_id) val inputs = genInputs suchThat { case (start_latitude, start_longitude, customer_uuid, product_id) => diff --git a/play-scala-generator/src/test/resources/expected_results/tests/wrong_field_name_yaml.scala b/play-scala-generator/src/test/resources/expected_results/tests/wrong_field_name_yaml.scala index 8944557b..246bf981 100644 --- a/play-scala-generator/src/test/resources/expected_results/tests/wrong_field_name_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/tests/wrong_field_name_yaml.scala @@ -53,7 +53,7 @@ class Wrong_field_name_yamlSpec extends WordSpec with OptionValues with WsScalaT "GET /status/" should { - def testInvalidInput(input: (GetOptCodes, GetCodes)): Prop = { + def testInvalidInput(input: (Option[GetOptCodesOpt], GetCodes)): Prop = { val (optCodes, codes) = input @@ -101,7 +101,7 @@ class Wrong_field_name_yamlSpec extends WordSpec with OptionValues with WsScalaT } propertyList.reduce(_ && _) } - def testValidInput(input: (GetOptCodes, GetCodes)): Prop = { + def testValidInput(input: (Option[GetOptCodesOpt], GetCodes)): Prop = { val (optCodes, codes) = input val url = s"""/status/""" @@ -156,7 +156,7 @@ class Wrong_field_name_yamlSpec extends WordSpec with OptionValues with WsScalaT } "discard invalid data" in { val genInputs = for { - optCodes <- GetOptCodesGenerator + optCodes <- OptionGetOptCodesOptGenerator codes <- GetCodesGenerator } yield (optCodes, codes) @@ -168,7 +168,7 @@ class Wrong_field_name_yamlSpec extends WordSpec with OptionValues with WsScalaT } "do something with valid data" in { val genInputs = for { - optCodes <- GetOptCodesGenerator + optCodes <- OptionGetOptCodesOptGenerator codes <- GetCodesGenerator } yield (optCodes, codes) diff --git a/play-scala-generator/src/test/resources/expected_results/validation/basic_polymorphism_yaml.scala b/play-scala-generator/src/test/resources/expected_results/validation/basic_polymorphism_yaml.scala index 02ee3fae..7194183f 100644 --- a/play-scala-generator/src/test/resources/expected_results/validation/basic_polymorphism_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/validation/basic_polymorphism_yaml.scala @@ -29,14 +29,14 @@ class PetValidator(instance: IPet) extends RecursiveValidator { } // ----- option delegating validators ----- -class PutDummyValidator(instance: PutDummy) extends RecursiveValidator { +class PutDummyValidator(instance: Option[Pet]) extends RecursiveValidator { override val validators = instance.toSeq.map { new PetValidator(_) } } // ----- array delegating validators ----- // ----- catch all simple validators ----- // ----- composite validators ----- // ----- call validations ----- -class PutValidator(dummy: PutDummy) extends RecursiveValidator { +class PutValidator(dummy: Option[Pet]) extends RecursiveValidator { override val validators = Seq( new PutDummyValidator(dummy) diff --git a/play-scala-generator/src/test/resources/expected_results/validation/cross_spec_references_yaml.scala b/play-scala-generator/src/test/resources/expected_results/validation/cross_spec_references_yaml.scala index 8660006f..ebb7931c 100644 --- a/play-scala-generator/src/test/resources/expected_results/validation/cross_spec_references_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/validation/cross_spec_references_yaml.scala @@ -14,6 +14,13 @@ class ModelSchemaNameConstraints(override val instance: String) extends Validati class ModelSchemaNameValidator(instance: String) extends RecursiveValidator { override val validators = Seq(new ModelSchemaNameConstraints(instance)) } +class ModelSchemaDescriptionOptConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class ModelSchemaDescriptionOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new ModelSchemaDescriptionOptConstraints(instance)) +} class ModelSchemaSizeRegisterConstraints(override val instance: String) extends ValidationBase[String] { override def constraints: Seq[Constraint[String]] = Seq(maxLength(10), minLength(10), pattern("""/[1-9][A-Z0-9]*/""".r)) @@ -35,20 +42,6 @@ class ModelSchemaPartnerArticleModelIdConstraints(override val instance: BigInt) class ModelSchemaPartnerArticleModelIdValidator(instance: BigInt) extends RecursiveValidator { override val validators = Seq(new ModelSchemaPartnerArticleModelIdConstraints(instance)) } -class MetaCopyrightOptConstraints(override val instance: String) extends ValidationBase[String] { - override def constraints: Seq[Constraint[String]] = - Seq() -} -class MetaCopyrightOptValidator(instance: String) extends RecursiveValidator { - override val validators = Seq(new MetaCopyrightOptConstraints(instance)) -} -class ModelSchemaAgeGroupsArrResultEnumConstraints(override val instance: String) extends ValidationBase[String] { - override def constraints: Seq[Constraint[String]] = - Seq(enum("baby,kid,teen,adult")) -} -class ModelSchemaAgeGroupsArrResultEnumValidator(instance: String) extends RecursiveValidator { - override val validators = Seq(new ModelSchemaAgeGroupsArrResultEnumConstraints(instance)) -} class ModelSchemaKeywordsOptConstraints(override val instance: String) extends ValidationBase[String] { override def constraints: Seq[Constraint[String]] = Seq(pattern("""/([\w\s]{1,255}|([\w\s]{1,255}, )+[\w\s]{1,255})/""".r)) @@ -63,6 +56,20 @@ class ModelSchemaLengthRegisterOptConstraints(override val instance: String) ext class ModelSchemaLengthRegisterOptValidator(instance: String) extends RecursiveValidator { override val validators = Seq(new ModelSchemaLengthRegisterOptConstraints(instance)) } +class ModelSchemaSpecialDescriptionsOptArrConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class ModelSchemaSpecialDescriptionsOptArrValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new ModelSchemaSpecialDescriptionsOptArrConstraints(instance)) +} +class ModelSchemaArticleModelAttributesOptArrConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class ModelSchemaArticleModelAttributesOptArrValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new ModelSchemaArticleModelAttributesOptArrConstraints(instance)) +} class ModelSchemaSilhouetteIdEnumConstraints(override val instance: String) extends ValidationBase[String] { override def constraints: Seq[Constraint[String]] = Seq(enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")) @@ -70,12 +77,33 @@ class ModelSchemaSilhouetteIdEnumConstraints(override val instance: String) exte class ModelSchemaSilhouetteIdEnumValidator(instance: String) extends RecursiveValidator { override val validators = Seq(new ModelSchemaSilhouetteIdEnumConstraints(instance)) } -class PetPhotoUrlsArrConstraints(override val instance: String) extends ValidationBase[String] { +class ModelSchemaAgeGroupsSeqEnumEnumConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq(enum("baby,kid,teen,adult")) +} +class ModelSchemaAgeGroupsSeqEnumEnumValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new ModelSchemaAgeGroupsSeqEnumEnumConstraints(instance)) +} +class MetaCopyrightOptConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class MetaCopyrightOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new MetaCopyrightOptConstraints(instance)) +} +class LinksSelfOptConstraints(override val instance: String) extends ValidationBase[String] { override def constraints: Seq[Constraint[String]] = Seq() } -class PetPhotoUrlsArrValidator(instance: String) extends RecursiveValidator { - override val validators = Seq(new PetPhotoUrlsArrConstraints(instance)) +class LinksSelfOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new LinksSelfOptConstraints(instance)) +} +class LinksRelatedOptConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class LinksRelatedOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new LinksRelatedOptConstraints(instance)) } // ----- complex type validators ----- class PostRootValidator(instance: ModelSchemaRoot) extends RecursiveValidator { @@ -85,77 +113,96 @@ class PostRootValidator(instance: ModelSchemaRoot) extends RecursiveValidator { new ModelSchemaRootLinksValidator(instance.links) ) } -class ModelSchemaRootDataOptValidator(instance: ModelSchemaRootDataOpt) extends RecursiveValidator { +class ModelSchemaRootDataOptionModelSchemaValidator(instance: ModelSchemaRootDataOptionModelSchema) extends RecursiveValidator { override val validators = Seq( new ModelSchemaNameValidator(instance.name), + new ModelSchemaDescriptionValidator(instance.description), new ModelSchemaSizeRegisterValidator(instance.sizeRegister), new ModelSchemaBrandValidator(instance.brand), new ModelSchemaPartnerArticleModelIdValidator(instance.partnerArticleModelId), - new MetaCopyrightValidator(instance.description), - new ModelSchemaAgeGroupsValidator(instance.ageGroups), new ModelSchemaKeywordsValidator(instance.keywords), new ModelSchemaLengthRegisterValidator(instance.lengthRegister), - new ModelSchemaSilhouetteIdValidator(instance.silhouetteId), new ModelSchemaSpecialDescriptionsValidator(instance.specialDescriptions), - new ModelSchemaSpecialDescriptionsValidator(instance.articleModelAttributes) + new ModelSchemaArticleModelAttributesValidator(instance.articleModelAttributes), + new ModelSchemaSilhouetteIdValidator(instance.silhouetteId), + new ModelSchemaAgeGroupsValidator(instance.ageGroups) ) } -class ModelSchemaRootMetaOptValidator(instance: ModelSchemaRootMetaOpt) extends RecursiveValidator { +class ModelSchemaRootMetaOptionMetaValidator(instance: ModelSchemaRootMetaOptionMeta) extends RecursiveValidator { override val validators = Seq( new MetaCopyrightValidator(instance.copyright) ) } -class ModelSchemaRootLinksOptValidator(instance: ModelSchemaRootLinksOpt) extends RecursiveValidator { +class ModelSchemaRootLinksOptionLinksValidator(instance: ModelSchemaRootLinksOptionLinks) extends RecursiveValidator { override val validators = Seq( - new MetaCopyrightValidator(instance.self), - new MetaCopyrightValidator(instance.related) + new LinksSelfValidator(instance.self), + new LinksRelatedValidator(instance.related) ) } // ----- enum delegating validators ----- -class ModelSchemaAgeGroupsArrResultValidator(instance: ModelSchemaAgeGroupsArrResult) extends RecursiveValidator { - override val validators = Seq(new ModelSchemaAgeGroupsArrResultEnumValidator(instance.value)) -} class ModelSchemaSilhouetteIdValidator(instance: ModelSchemaSilhouetteId) extends RecursiveValidator { override val validators = Seq(new ModelSchemaSilhouetteIdEnumValidator(instance.value)) } +class ModelSchemaAgeGroupsSeqEnumValidator(instance: ModelSchemaAgeGroupsSeqEnum) extends RecursiveValidator { + override val validators = Seq(new ModelSchemaAgeGroupsSeqEnumEnumValidator(instance.value)) +} // ----- option delegating validators ----- -class ModelSchemaRootDataValidator(instance: ModelSchemaRootData) extends RecursiveValidator { - override val validators = instance.toSeq.map { new ModelSchemaRootDataOptValidator(_) } +class ModelSchemaRootDataValidator(instance: Option[ModelSchema]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new ModelSchemaRootDataOptionModelSchemaValidator(_) } } -class MetaCopyrightValidator(instance: MetaCopyright) extends RecursiveValidator { - override val validators = instance.toSeq.map { new MetaCopyrightOptValidator(_) } +class ModelSchemaDescriptionValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new ModelSchemaDescriptionOptValidator(_) } } -class ModelSchemaKeywordsValidator(instance: ModelSchemaKeywords) extends RecursiveValidator { +class ModelSchemaKeywordsValidator(instance: Option[String]) extends RecursiveValidator { override val validators = instance.toSeq.map { new ModelSchemaKeywordsOptValidator(_) } } -class ModelSchemaLengthRegisterValidator(instance: ModelSchemaLengthRegister) extends RecursiveValidator { +class ModelSchemaLengthRegisterValidator(instance: Option[String]) extends RecursiveValidator { override val validators = instance.toSeq.map { new ModelSchemaLengthRegisterOptValidator(_) } } -class ModelSchemaSpecialDescriptionsValidator(instance: ModelSchemaSpecialDescriptions) extends RecursiveValidator { - override val validators = instance.toSeq.map { new PetPhotoUrlsValidator(_) } +class ModelSchemaSpecialDescriptionsValidator(instance: Option[Seq[String]]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new ModelSchemaSpecialDescriptionsOptValidator(_) } } -class ModelSchemaRootMetaValidator(instance: ModelSchemaRootMeta) extends RecursiveValidator { - override val validators = instance.toSeq.map { new ModelSchemaRootMetaOptValidator(_) } +class ModelSchemaArticleModelAttributesValidator(instance: Option[Seq[String]]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new ModelSchemaArticleModelAttributesOptValidator(_) } } -class ModelSchemaRootLinksValidator(instance: ModelSchemaRootLinks) extends RecursiveValidator { - override val validators = instance.toSeq.map { new ModelSchemaRootLinksOptValidator(_) } +class ModelSchemaRootMetaValidator(instance: Option[Meta]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new ModelSchemaRootMetaOptionMetaValidator(_) } } -// ----- array delegating validators ----- -class ModelSchemaAgeGroupsConstraints(override val instance: ModelSchemaAgeGroups) extends ValidationBase[ModelSchemaAgeGroups] { - override def constraints: Seq[Constraint[ModelSchemaAgeGroups]] = - Seq(maxItems(4)) +class MetaCopyrightValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new MetaCopyrightOptValidator(_) } +} +class ModelSchemaRootLinksValidator(instance: Option[Links]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new ModelSchemaRootLinksOptionLinksValidator(_) } +} +class LinksSelfValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new LinksSelfOptValidator(_) } } -class ModelSchemaAgeGroupsValidator(instance: ModelSchemaAgeGroups) extends RecursiveValidator { - override val validators = new ModelSchemaAgeGroupsConstraints(instance) +: instance.map { new ModelSchemaAgeGroupsArrResultValidator(_)} +class LinksRelatedValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new LinksRelatedOptValidator(_) } } -class PetPhotoUrlsConstraints(override val instance: PetPhotoUrls) extends ValidationBase[PetPhotoUrls] { - override def constraints: Seq[Constraint[PetPhotoUrls]] = +// ----- array delegating validators ----- +class ModelSchemaSpecialDescriptionsOptConstraints(override val instance: Seq[String]) extends ValidationBase[Seq[String]] { + override def constraints: Seq[Constraint[Seq[String]]] = Seq() } -class PetPhotoUrlsValidator(instance: PetPhotoUrls) extends RecursiveValidator { - override val validators = new PetPhotoUrlsConstraints(instance) +: instance.map { new PetPhotoUrlsArrValidator(_)} +class ModelSchemaSpecialDescriptionsOptValidator(instance: Seq[String]) extends RecursiveValidator { + override val validators = new ModelSchemaSpecialDescriptionsOptConstraints(instance) +: instance.map { new ModelSchemaSpecialDescriptionsOptArrValidator(_)} +} +class ModelSchemaArticleModelAttributesOptConstraints(override val instance: Seq[String]) extends ValidationBase[Seq[String]] { + override def constraints: Seq[Constraint[Seq[String]]] = + Seq(minItems(1)) +} +class ModelSchemaArticleModelAttributesOptValidator(instance: Seq[String]) extends RecursiveValidator { + override val validators = new ModelSchemaArticleModelAttributesOptConstraints(instance) +: instance.map { new ModelSchemaArticleModelAttributesOptArrValidator(_)} +} +class ModelSchemaAgeGroupsConstraints(override val instance: Seq[ModelSchemaAgeGroupsSeqEnum]) extends ValidationBase[Seq[ModelSchemaAgeGroupsSeqEnum]] { + override def constraints: Seq[Constraint[Seq[ModelSchemaAgeGroupsSeqEnum]]] = + Seq(maxItems(4)) +} +class ModelSchemaAgeGroupsValidator(instance: Seq[ModelSchemaAgeGroupsSeqEnum]) extends RecursiveValidator { + override val validators = new ModelSchemaAgeGroupsConstraints(instance) +: instance.map { new ModelSchemaAgeGroupsSeqEnumValidator(_)} } // ----- catch all simple validators ----- // ----- composite validators ----- diff --git a/play-scala-generator/src/test/resources/expected_results/validation/echo_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/validation/echo_api_yaml.scala index 2640f191..47fa0c64 100644 --- a/play-scala-generator/src/test/resources/expected_results/validation/echo_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/validation/echo_api_yaml.scala @@ -23,7 +23,7 @@ class Test_pathIdGetIdValidator(instance: String) extends RecursiveValidator { // ----- complex type validators ----- // ----- option delegating validators ----- -class PostNameValidator(instance: PostName) extends RecursiveValidator { +class PostNameValidator(instance: Option[String]) extends RecursiveValidator { override val validators = instance.toSeq.map { new PostNameOptValidator(_) } } // ----- array delegating validators ----- @@ -36,7 +36,7 @@ class Test_pathIdGetValidator(id: String) extends RecursiveValidator { ) } -class PostValidator(name: PostName, year: PostName) extends RecursiveValidator { +class PostValidator(name: Option[String], year: Option[String]) extends RecursiveValidator { override val validators = Seq( new PostNameValidator(name), diff --git a/play-scala-generator/src/test/resources/expected_results/validation/enum_yaml.scala b/play-scala-generator/src/test/resources/expected_results/validation/enum_yaml.scala new file mode 100644 index 00000000..1e03c392 --- /dev/null +++ b/play-scala-generator/src/test/resources/expected_results/validation/enum_yaml.scala @@ -0,0 +1,36 @@ +package enum.yaml +import play.api.mvc.{Action, Controller} +import play.api.data.validation.Constraint +import de.zalando.play.controllers._ +import PlayBodyParsing._ +import PlayValidations._ + +// ----- constraints and wrapper validations ----- +class TestGetIncludesOptionEnumEnumConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq(enum("option_one,option_two")) +} +class TestGetIncludesOptionEnumEnumValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new TestGetIncludesOptionEnumEnumConstraints(instance)) +} +// ----- complex type validators ----- + +// ----- enum delegating validators ----- +class TestGetIncludesOptionEnumValidator(instance: TestGetIncludesOptionEnum) extends RecursiveValidator { + override val validators = Seq(new TestGetIncludesOptionEnumEnumValidator(instance.value)) +} + +// ----- option delegating validators ----- +class TestGetIncludesValidator(instance: Option[TestGetIncludesOptionEnum]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new TestGetIncludesOptionEnumValidator(_) } +} +// ----- array delegating validators ----- +// ----- catch all simple validators ----- +// ----- composite validators ----- +// ----- call validations ----- +class TestGetValidator(includes: Option[TestGetIncludesOptionEnum]) extends RecursiveValidator { + override val validators = Seq( + new TestGetIncludesValidator(includes) + + ) +} diff --git a/play-scala-generator/src/test/resources/expected_results/validation/error_in_array_yaml.scala b/play-scala-generator/src/test/resources/expected_results/validation/error_in_array_yaml.scala index d09f6751..82d24882 100644 --- a/play-scala-generator/src/test/resources/expected_results/validation/error_in_array_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/validation/error_in_array_yaml.scala @@ -14,6 +14,13 @@ class ModelSchemaNameConstraints(override val instance: String) extends Validati class ModelSchemaNameValidator(instance: String) extends RecursiveValidator { override val validators = Seq(new ModelSchemaNameConstraints(instance)) } +class ModelSchemaDescriptionOptConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class ModelSchemaDescriptionOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new ModelSchemaDescriptionOptConstraints(instance)) +} class ModelSchemaSizeRegisterConstraints(override val instance: String) extends ValidationBase[String] { override def constraints: Seq[Constraint[String]] = Seq(maxLength(10), minLength(10), pattern("""/[1-9][A-Z0-9]*/""".r)) @@ -35,20 +42,6 @@ class ModelSchemaPartnerArticleModelIdConstraints(override val instance: BigInt) class ModelSchemaPartnerArticleModelIdValidator(instance: BigInt) extends RecursiveValidator { override val validators = Seq(new ModelSchemaPartnerArticleModelIdConstraints(instance)) } -class MetaCopyrightOptConstraints(override val instance: String) extends ValidationBase[String] { - override def constraints: Seq[Constraint[String]] = - Seq() -} -class MetaCopyrightOptValidator(instance: String) extends RecursiveValidator { - override val validators = Seq(new MetaCopyrightOptConstraints(instance)) -} -class ModelSchemaAgeGroupsArrResultEnumConstraints(override val instance: String) extends ValidationBase[String] { - override def constraints: Seq[Constraint[String]] = - Seq(enum("baby,kid,teen,adult")) -} -class ModelSchemaAgeGroupsArrResultEnumValidator(instance: String) extends RecursiveValidator { - override val validators = Seq(new ModelSchemaAgeGroupsArrResultEnumConstraints(instance)) -} class ModelSchemaKeywordsOptConstraints(override val instance: String) extends ValidationBase[String] { override def constraints: Seq[Constraint[String]] = Seq(pattern("""/([\w\s]{1,255}|([\w\s]{1,255}, )+[\w\s]{1,255})/""".r)) @@ -63,6 +56,20 @@ class ModelSchemaLengthRegisterOptConstraints(override val instance: String) ext class ModelSchemaLengthRegisterOptValidator(instance: String) extends RecursiveValidator { override val validators = Seq(new ModelSchemaLengthRegisterOptConstraints(instance)) } +class ModelSchemaSpecialDescriptionsOptArrConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class ModelSchemaSpecialDescriptionsOptArrValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new ModelSchemaSpecialDescriptionsOptArrConstraints(instance)) +} +class ModelSchemaArticleModelAttributesOptArrConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class ModelSchemaArticleModelAttributesOptArrValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new ModelSchemaArticleModelAttributesOptArrConstraints(instance)) +} class ModelSchemaSilhouetteIdEnumConstraints(override val instance: String) extends ValidationBase[String] { override def constraints: Seq[Constraint[String]] = Seq(enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")) @@ -70,12 +77,33 @@ class ModelSchemaSilhouetteIdEnumConstraints(override val instance: String) exte class ModelSchemaSilhouetteIdEnumValidator(instance: String) extends RecursiveValidator { override val validators = Seq(new ModelSchemaSilhouetteIdEnumConstraints(instance)) } -class ModelSchemaSpecialDescriptionsOptArrConstraints(override val instance: String) extends ValidationBase[String] { +class ModelSchemaAgeGroupsSeqEnumEnumConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq(enum("baby,kid,teen,adult")) +} +class ModelSchemaAgeGroupsSeqEnumEnumValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new ModelSchemaAgeGroupsSeqEnumEnumConstraints(instance)) +} +class MetaCopyrightOptConstraints(override val instance: String) extends ValidationBase[String] { override def constraints: Seq[Constraint[String]] = Seq() } -class ModelSchemaSpecialDescriptionsOptArrValidator(instance: String) extends RecursiveValidator { - override val validators = Seq(new ModelSchemaSpecialDescriptionsOptArrConstraints(instance)) +class MetaCopyrightOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new MetaCopyrightOptConstraints(instance)) +} +class LinksSelfOptConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class LinksSelfOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new LinksSelfOptConstraints(instance)) +} +class LinksRelatedOptConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class LinksRelatedOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new LinksRelatedOptConstraints(instance)) } // ----- complex type validators ----- class ModelSchemaRootValidator(instance: ModelSchemaRoot) extends RecursiveValidator { @@ -88,16 +116,16 @@ class ModelSchemaRootValidator(instance: ModelSchemaRoot) extends RecursiveValid class ModelSchemaValidator(instance: ModelSchema) extends RecursiveValidator { override val validators = Seq( new ModelSchemaNameValidator(instance.name), + new ModelSchemaDescriptionValidator(instance.description), new ModelSchemaSizeRegisterValidator(instance.sizeRegister), new ModelSchemaBrandValidator(instance.brand), new ModelSchemaPartnerArticleModelIdValidator(instance.partnerArticleModelId), - new MetaCopyrightValidator(instance.description), - new ModelSchemaAgeGroupsValidator(instance.ageGroups), new ModelSchemaKeywordsValidator(instance.keywords), new ModelSchemaLengthRegisterValidator(instance.lengthRegister), - new ModelSchemaSilhouetteIdValidator(instance.silhouetteId), new ModelSchemaSpecialDescriptionsValidator(instance.specialDescriptions), - new ModelSchemaSpecialDescriptionsValidator(instance.articleModelAttributes) + new ModelSchemaArticleModelAttributesValidator(instance.articleModelAttributes), + new ModelSchemaSilhouetteIdValidator(instance.silhouetteId), + new ModelSchemaAgeGroupsValidator(instance.ageGroups) ) } class MetaValidator(instance: Meta) extends RecursiveValidator { @@ -107,56 +135,75 @@ class MetaValidator(instance: Meta) extends RecursiveValidator { } class LinksValidator(instance: Links) extends RecursiveValidator { override val validators = Seq( - new MetaCopyrightValidator(instance.self), - new MetaCopyrightValidator(instance.related) + new LinksSelfValidator(instance.self), + new LinksRelatedValidator(instance.related) ) } // ----- enum delegating validators ----- -class ModelSchemaAgeGroupsArrResultValidator(instance: ModelSchemaAgeGroupsArrResult) extends RecursiveValidator { - override val validators = Seq(new ModelSchemaAgeGroupsArrResultEnumValidator(instance.value)) -} class ModelSchemaSilhouetteIdValidator(instance: ModelSchemaSilhouetteId) extends RecursiveValidator { override val validators = Seq(new ModelSchemaSilhouetteIdEnumValidator(instance.value)) } +class ModelSchemaAgeGroupsSeqEnumValidator(instance: ModelSchemaAgeGroupsSeqEnum) extends RecursiveValidator { + override val validators = Seq(new ModelSchemaAgeGroupsSeqEnumEnumValidator(instance.value)) +} // ----- option delegating validators ----- -class ModelSchemaRootDataValidator(instance: ModelSchemaRootData) extends RecursiveValidator { +class ModelSchemaRootDataValidator(instance: Option[ModelSchema]) extends RecursiveValidator { override val validators = instance.toSeq.map { new ModelSchemaValidator(_) } } -class MetaCopyrightValidator(instance: MetaCopyright) extends RecursiveValidator { - override val validators = instance.toSeq.map { new MetaCopyrightOptValidator(_) } +class ModelSchemaDescriptionValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new ModelSchemaDescriptionOptValidator(_) } } -class ModelSchemaKeywordsValidator(instance: ModelSchemaKeywords) extends RecursiveValidator { +class ModelSchemaKeywordsValidator(instance: Option[String]) extends RecursiveValidator { override val validators = instance.toSeq.map { new ModelSchemaKeywordsOptValidator(_) } } -class ModelSchemaLengthRegisterValidator(instance: ModelSchemaLengthRegister) extends RecursiveValidator { +class ModelSchemaLengthRegisterValidator(instance: Option[String]) extends RecursiveValidator { override val validators = instance.toSeq.map { new ModelSchemaLengthRegisterOptValidator(_) } } -class ModelSchemaSpecialDescriptionsValidator(instance: ModelSchemaSpecialDescriptions) extends RecursiveValidator { +class ModelSchemaSpecialDescriptionsValidator(instance: Option[Seq[String]]) extends RecursiveValidator { override val validators = instance.toSeq.map { new ModelSchemaSpecialDescriptionsOptValidator(_) } } -class ModelSchemaRootMetaValidator(instance: ModelSchemaRootMeta) extends RecursiveValidator { +class ModelSchemaArticleModelAttributesValidator(instance: Option[Seq[String]]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new ModelSchemaArticleModelAttributesOptValidator(_) } +} +class ModelSchemaRootMetaValidator(instance: Option[Meta]) extends RecursiveValidator { override val validators = instance.toSeq.map { new MetaValidator(_) } } -class ModelSchemaRootLinksValidator(instance: ModelSchemaRootLinks) extends RecursiveValidator { +class MetaCopyrightValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new MetaCopyrightOptValidator(_) } +} +class ModelSchemaRootLinksValidator(instance: Option[Links]) extends RecursiveValidator { override val validators = instance.toSeq.map { new LinksValidator(_) } } -// ----- array delegating validators ----- -class ModelSchemaAgeGroupsConstraints(override val instance: ModelSchemaAgeGroups) extends ValidationBase[ModelSchemaAgeGroups] { - override def constraints: Seq[Constraint[ModelSchemaAgeGroups]] = - Seq(maxItems(4)) +class LinksSelfValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new LinksSelfOptValidator(_) } } -class ModelSchemaAgeGroupsValidator(instance: ModelSchemaAgeGroups) extends RecursiveValidator { - override val validators = new ModelSchemaAgeGroupsConstraints(instance) +: instance.map { new ModelSchemaAgeGroupsArrResultValidator(_)} +class LinksRelatedValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new LinksRelatedOptValidator(_) } } -class ModelSchemaSpecialDescriptionsOptConstraints(override val instance: ModelSchemaSpecialDescriptionsOpt) extends ValidationBase[ModelSchemaSpecialDescriptionsOpt] { - override def constraints: Seq[Constraint[ModelSchemaSpecialDescriptionsOpt]] = +// ----- array delegating validators ----- +class ModelSchemaSpecialDescriptionsOptConstraints(override val instance: Seq[String]) extends ValidationBase[Seq[String]] { + override def constraints: Seq[Constraint[Seq[String]]] = Seq() } -class ModelSchemaSpecialDescriptionsOptValidator(instance: ModelSchemaSpecialDescriptionsOpt) extends RecursiveValidator { +class ModelSchemaSpecialDescriptionsOptValidator(instance: Seq[String]) extends RecursiveValidator { override val validators = new ModelSchemaSpecialDescriptionsOptConstraints(instance) +: instance.map { new ModelSchemaSpecialDescriptionsOptArrValidator(_)} } +class ModelSchemaArticleModelAttributesOptConstraints(override val instance: Seq[String]) extends ValidationBase[Seq[String]] { + override def constraints: Seq[Constraint[Seq[String]]] = + Seq(minItems(1)) +} +class ModelSchemaArticleModelAttributesOptValidator(instance: Seq[String]) extends RecursiveValidator { + override val validators = new ModelSchemaArticleModelAttributesOptConstraints(instance) +: instance.map { new ModelSchemaArticleModelAttributesOptArrValidator(_)} +} +class ModelSchemaAgeGroupsConstraints(override val instance: Seq[ModelSchemaAgeGroupsSeqEnum]) extends ValidationBase[Seq[ModelSchemaAgeGroupsSeqEnum]] { + override def constraints: Seq[Constraint[Seq[ModelSchemaAgeGroupsSeqEnum]]] = + Seq(maxItems(4)) +} +class ModelSchemaAgeGroupsValidator(instance: Seq[ModelSchemaAgeGroupsSeqEnum]) extends RecursiveValidator { + override val validators = new ModelSchemaAgeGroupsConstraints(instance) +: instance.map { new ModelSchemaAgeGroupsSeqEnumValidator(_)} +} // ----- catch all simple validators ----- // ----- composite validators ----- // ----- call validations ----- diff --git a/play-scala-generator/src/test/resources/expected_results/validation/expanded_polymorphism_yaml.scala b/play-scala-generator/src/test/resources/expected_results/validation/expanded_polymorphism_yaml.scala index 5a3a58ec..0fe385d2 100644 --- a/play-scala-generator/src/test/resources/expected_results/validation/expanded_polymorphism_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/validation/expanded_polymorphism_yaml.scala @@ -58,21 +58,21 @@ class NewPetValidator(instance: NewPet) extends RecursiveValidator { } // ----- option delegating validators ----- -class PetsGetLimitValidator(instance: PetsGetLimit) extends RecursiveValidator { +class PetsGetLimitValidator(instance: Option[Int]) extends RecursiveValidator { override val validators = instance.toSeq.map { new PetsGetLimitOptValidator(_) } } -class PetsGetTagsValidator(instance: PetsGetTags) extends RecursiveValidator { +class PetsGetTagsValidator(instance: Option[ArrayWrapper[String]]) extends RecursiveValidator { override val validators = instance.toSeq.map { new PetsGetTagsOptValidator(_) } } -class NewPetTagValidator(instance: NewPetTag) extends RecursiveValidator { +class NewPetTagValidator(instance: Option[String]) extends RecursiveValidator { override val validators = instance.toSeq.map { new NewPetTagOptValidator(_) } } // ----- array delegating validators ----- -class PetsGetTagsOptConstraints(override val instance: PetsGetTagsOpt) extends ValidationBase[PetsGetTagsOpt] { - override def constraints: Seq[Constraint[PetsGetTagsOpt]] = +class PetsGetTagsOptConstraints(override val instance: ArrayWrapper[String]) extends ValidationBase[ArrayWrapper[String]] { + override def constraints: Seq[Constraint[ArrayWrapper[String]]] = Seq() } -class PetsGetTagsOptValidator(instance: PetsGetTagsOpt) extends RecursiveValidator { +class PetsGetTagsOptValidator(instance: ArrayWrapper[String]) extends RecursiveValidator { override val validators = new PetsGetTagsOptConstraints(instance) +: instance.map { new PetsGetTagsOptArrValidator(_)} } // ----- catch all simple validators ----- @@ -84,7 +84,7 @@ class PetsPostValidator(pet: NewPet) extends RecursiveValidator { ) } -class PetsGetValidator(tags: PetsGetTags, limit: PetsGetLimit) extends RecursiveValidator { +class PetsGetValidator(tags: Option[ArrayWrapper[String]], limit: Option[Int]) extends RecursiveValidator { override val validators = Seq( new PetsGetTagsValidator(tags), diff --git a/play-scala-generator/src/test/resources/expected_results/validation/foodpanda_yaml.scala b/play-scala-generator/src/test/resources/expected_results/validation/foodpanda_yaml.scala new file mode 100644 index 00000000..8d0d8487 --- /dev/null +++ b/play-scala-generator/src/test/resources/expected_results/validation/foodpanda_yaml.scala @@ -0,0 +1,59 @@ +package com.foodpanda.popsey.api +import play.api.mvc.{Action, Controller} +import play.api.data.validation.Constraint +import de.zalando.play.controllers._ +import PlayBodyParsing._ +import PlayValidations._ + +// ----- constraints and wrapper validations ----- +class VendorQueryVendor_codesOptArrConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class VendorQueryVendor_codesOptArrValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new VendorQueryVendor_codesOptArrConstraints(instance)) +} +class VendorQueryIncludesOptionEnumEnumConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq(enum("menus,payments")) +} +class VendorQueryIncludesOptionEnumEnumValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new VendorQueryIncludesOptionEnumEnumConstraints(instance)) +} +// ----- complex type validators ----- +class VendorQueryValidator(instance: VendorQuery) extends RecursiveValidator { + override val validators = Seq( + new VendorQueryVendor_codesValidator(instance.vendor_codes), + new VendorQueryIncludesValidator(instance.includes) + ) +} + +// ----- enum delegating validators ----- +class VendorQueryIncludesOptionEnumValidator(instance: VendorQueryIncludesOptionEnum) extends RecursiveValidator { + override val validators = Seq(new VendorQueryIncludesOptionEnumEnumValidator(instance.value)) +} + +// ----- option delegating validators ----- +class VendorQueryVendor_codesValidator(instance: Option[Seq[String]]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new VendorQueryVendor_codesOptValidator(_) } +} +class VendorQueryIncludesValidator(instance: Option[VendorQueryIncludesOptionEnum]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new VendorQueryIncludesOptionEnumValidator(_) } +} +// ----- array delegating validators ----- +class VendorQueryVendor_codesOptConstraints(override val instance: Seq[String]) extends ValidationBase[Seq[String]] { + override def constraints: Seq[Constraint[Seq[String]]] = + Seq() +} +class VendorQueryVendor_codesOptValidator(instance: Seq[String]) extends RecursiveValidator { + override val validators = new VendorQueryVendor_codesOptConstraints(instance) +: instance.map { new VendorQueryVendor_codesOptArrValidator(_)} +} +// ----- catch all simple validators ----- +// ----- composite validators ----- +// ----- call validations ----- +class VendorsGetValidator(query: VendorQuery) extends RecursiveValidator { + override val validators = Seq( + new VendorQueryValidator(query) + + ) +} diff --git a/play-scala-generator/src/test/resources/expected_results/validation/form_data_yaml.scala b/play-scala-generator/src/test/resources/expected_results/validation/form_data_yaml.scala index 22bf634f..5526645f 100644 --- a/play-scala-generator/src/test/resources/expected_results/validation/form_data_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/validation/form_data_yaml.scala @@ -5,8 +5,8 @@ import de.zalando.play.controllers._ import PlayBodyParsing._ import PlayValidations._ -import java.io.File import scala.math.BigInt +import java.io.File // ----- constraints and wrapper validations ----- class MultipartPostAvatarOptConstraints(override val instance: File) extends ValidationBase[File] { override def constraints: Seq[Constraint[File]] = @@ -60,17 +60,17 @@ class Url_encodedPostAvatarValidator(instance: File) extends RecursiveValidator // ----- complex type validators ----- // ----- option delegating validators ----- -class MultipartPostAvatarValidator(instance: MultipartPostAvatar) extends RecursiveValidator { +class MultipartPostAvatarValidator(instance: Option[File]) extends RecursiveValidator { override val validators = instance.toSeq.map { new MultipartPostAvatarOptValidator(_) } } -class BothPostYearValidator(instance: BothPostYear) extends RecursiveValidator { +class BothPostYearValidator(instance: Option[BigInt]) extends RecursiveValidator { override val validators = instance.toSeq.map { new BothPostYearOptValidator(_) } } // ----- array delegating validators ----- // ----- catch all simple validators ----- // ----- composite validators ----- // ----- call validations ----- -class MultipartPostValidator(name: String, year: BothPostYear, avatar: MultipartPostAvatar) extends RecursiveValidator { +class MultipartPostValidator(name: String, year: Option[BigInt], avatar: Option[File]) extends RecursiveValidator { override val validators = Seq( new MultipartPostNameValidator(name), @@ -80,7 +80,7 @@ class MultipartPostValidator(name: String, year: BothPostYear, avatar: Multipart ) } -class BothPostValidator(name: String, year: BothPostYear, avatar: MultipartPostAvatar, ringtone: File) extends RecursiveValidator { +class BothPostValidator(name: String, year: Option[BigInt], avatar: Option[File], ringtone: File) extends RecursiveValidator { override val validators = Seq( new BothPostNameValidator(name), @@ -92,7 +92,7 @@ class BothPostValidator(name: String, year: BothPostYear, avatar: MultipartPostA ) } -class Url_encodedPostValidator(name: String, year: BothPostYear, avatar: File) extends RecursiveValidator { +class Url_encodedPostValidator(name: String, year: Option[BigInt], avatar: File) extends RecursiveValidator { override val validators = Seq( new Url_encodedPostNameValidator(name), diff --git a/play-scala-generator/src/test/resources/expected_results/validation/full_petstore_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/validation/full_petstore_api_yaml.scala index 84ca8826..b2b52933 100644 --- a/play-scala-generator/src/test/resources/expected_results/validation/full_petstore_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/validation/full_petstore_api_yaml.scala @@ -5,8 +5,8 @@ import de.zalando.play.controllers._ import PlayBodyParsing._ import PlayValidations._ -import de.zalando.play.controllers.ArrayWrapper import java.time.ZonedDateTime +import de.zalando.play.controllers.ArrayWrapper // ----- constraints and wrapper validations ----- class UsersUsernameGetUsernameConstraints(override val instance: String) extends ValidationBase[String] { override def constraints: Seq[Constraint[String]] = @@ -22,12 +22,12 @@ class PetsPetIdPostStatusConstraints(override val instance: String) extends Vali class PetsPetIdPostStatusValidator(instance: String) extends RecursiveValidator { override val validators = Seq(new PetsPetIdPostStatusConstraints(instance)) } -class OrderStatusOptConstraints(override val instance: String) extends ValidationBase[String] { +class UsersLoginGetUsernameOptConstraints(override val instance: String) extends ValidationBase[String] { override def constraints: Seq[Constraint[String]] = Seq() } -class OrderStatusOptValidator(instance: String) extends RecursiveValidator { - override val validators = Seq(new OrderStatusOptConstraints(instance)) +class UsersLoginGetUsernameOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new UsersLoginGetUsernameOptConstraints(instance)) } class PetNameConstraints(override val instance: String) extends ValidationBase[String] { override def constraints: Seq[Constraint[String]] = @@ -36,26 +36,96 @@ class PetNameConstraints(override val instance: String) extends ValidationBase[S class PetNameValidator(instance: String) extends RecursiveValidator { override val validators = Seq(new PetNameConstraints(instance)) } -class OrderPetIdOptConstraints(override val instance: Long) extends ValidationBase[Long] { +class PetPhotoUrlsArrConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class PetPhotoUrlsArrValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new PetPhotoUrlsArrConstraints(instance)) +} +class PetIdOptConstraints(override val instance: Long) extends ValidationBase[Long] { override def constraints: Seq[Constraint[Long]] = Seq() } -class OrderPetIdOptValidator(instance: Long) extends RecursiveValidator { - override val validators = Seq(new OrderPetIdOptConstraints(instance)) +class PetIdOptValidator(instance: Long) extends RecursiveValidator { + override val validators = Seq(new PetIdOptConstraints(instance)) } -class PetPhotoUrlsArrConstraints(override val instance: String) extends ValidationBase[String] { +class PetStatusOptConstraints(override val instance: String) extends ValidationBase[String] { override def constraints: Seq[Constraint[String]] = Seq() } -class PetPhotoUrlsArrValidator(instance: String) extends RecursiveValidator { - override val validators = Seq(new PetPhotoUrlsArrConstraints(instance)) +class PetStatusOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new PetStatusOptConstraints(instance)) } -class OrderQuantityOptConstraints(override val instance: Int) extends ValidationBase[Int] { +class TagIdOptConstraints(override val instance: Long) extends ValidationBase[Long] { + override def constraints: Seq[Constraint[Long]] = + Seq() +} +class TagIdOptValidator(instance: Long) extends RecursiveValidator { + override val validators = Seq(new TagIdOptConstraints(instance)) +} +class TagNameOptConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class TagNameOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new TagNameOptConstraints(instance)) +} +class UserEmailOptConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class UserEmailOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new UserEmailOptConstraints(instance)) +} +class UserUsernameOptConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class UserUsernameOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new UserUsernameOptConstraints(instance)) +} +class UserUserStatusOptConstraints(override val instance: Int) extends ValidationBase[Int] { override def constraints: Seq[Constraint[Int]] = Seq() } -class OrderQuantityOptValidator(instance: Int) extends RecursiveValidator { - override val validators = Seq(new OrderQuantityOptConstraints(instance)) +class UserUserStatusOptValidator(instance: Int) extends RecursiveValidator { + override val validators = Seq(new UserUserStatusOptConstraints(instance)) +} +class UserLastNameOptConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class UserLastNameOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new UserLastNameOptConstraints(instance)) +} +class UserFirstNameOptConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class UserFirstNameOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new UserFirstNameOptConstraints(instance)) +} +class UserIdOptConstraints(override val instance: Long) extends ValidationBase[Long] { + override def constraints: Seq[Constraint[Long]] = + Seq() +} +class UserIdOptValidator(instance: Long) extends RecursiveValidator { + override val validators = Seq(new UserIdOptConstraints(instance)) +} +class UserPhoneOptConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class UserPhoneOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new UserPhoneOptConstraints(instance)) +} +class UserPasswordOptConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class UserPasswordOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new UserPasswordOptConstraints(instance)) } class OrderShipDateOptConstraints(override val instance: ZonedDateTime) extends ValidationBase[ZonedDateTime] { override def constraints: Seq[Constraint[ZonedDateTime]] = @@ -64,6 +134,27 @@ class OrderShipDateOptConstraints(override val instance: ZonedDateTime) extends class OrderShipDateOptValidator(instance: ZonedDateTime) extends RecursiveValidator { override val validators = Seq(new OrderShipDateOptConstraints(instance)) } +class OrderQuantityOptConstraints(override val instance: Int) extends ValidationBase[Int] { + override def constraints: Seq[Constraint[Int]] = + Seq() +} +class OrderQuantityOptValidator(instance: Int) extends RecursiveValidator { + override val validators = Seq(new OrderQuantityOptConstraints(instance)) +} +class OrderPetIdOptConstraints(override val instance: Long) extends ValidationBase[Long] { + override def constraints: Seq[Constraint[Long]] = + Seq() +} +class OrderPetIdOptValidator(instance: Long) extends RecursiveValidator { + override val validators = Seq(new OrderPetIdOptConstraints(instance)) +} +class OrderIdOptConstraints(override val instance: Long) extends ValidationBase[Long] { + override def constraints: Seq[Constraint[Long]] = + Seq() +} +class OrderIdOptValidator(instance: Long) extends RecursiveValidator { + override val validators = Seq(new OrderIdOptConstraints(instance)) +} class OrderCompleteOptConstraints(override val instance: Boolean) extends ValidationBase[Boolean] { override def constraints: Seq[Constraint[Boolean]] = Seq() @@ -71,6 +162,13 @@ class OrderCompleteOptConstraints(override val instance: Boolean) extends Valida class OrderCompleteOptValidator(instance: Boolean) extends RecursiveValidator { override val validators = Seq(new OrderCompleteOptConstraints(instance)) } +class OrderStatusOptConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class OrderStatusOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new OrderStatusOptConstraints(instance)) +} class PetsPetIdPostPetIdConstraints(override val instance: String) extends ValidationBase[String] { override def constraints: Seq[Constraint[String]] = Seq() @@ -145,29 +243,29 @@ class UsersUsernameDeleteUsernameValidator(instance: String) extends RecursiveVa class PetValidator(instance: Pet) extends RecursiveValidator { override val validators = Seq( new PetNameValidator(instance.name), - new PetTagsValidator(instance.tags), new PetPhotoUrlsValidator(instance.photoUrls), - new OrderPetIdValidator(instance.id), - new OrderStatusValidator(instance.status), + new PetIdValidator(instance.id), + new PetStatusValidator(instance.status), + new PetTagsValidator(instance.tags), new PetCategoryValidator(instance.category) ) } class TagValidator(instance: Tag) extends RecursiveValidator { override val validators = Seq( - new OrderPetIdValidator(instance.id), - new OrderStatusValidator(instance.name) + new TagIdValidator(instance.id), + new TagNameValidator(instance.name) ) } class UserValidator(instance: User) extends RecursiveValidator { override val validators = Seq( - new OrderStatusValidator(instance.email), - new OrderStatusValidator(instance.username), - new OrderQuantityValidator(instance.userStatus), - new OrderStatusValidator(instance.lastName), - new OrderStatusValidator(instance.firstName), - new OrderPetIdValidator(instance.id), - new OrderStatusValidator(instance.phone), - new OrderStatusValidator(instance.password) + new UserEmailValidator(instance.email), + new UserUsernameValidator(instance.username), + new UserUserStatusValidator(instance.userStatus), + new UserLastNameValidator(instance.lastName), + new UserFirstNameValidator(instance.firstName), + new UserIdValidator(instance.id), + new UserPhoneValidator(instance.phone), + new UserPasswordValidator(instance.password) ) } class OrderValidator(instance: Order) extends RecursiveValidator { @@ -175,122 +273,164 @@ class OrderValidator(instance: Order) extends RecursiveValidator { new OrderShipDateValidator(instance.shipDate), new OrderQuantityValidator(instance.quantity), new OrderPetIdValidator(instance.petId), - new OrderPetIdValidator(instance.id), + new OrderIdValidator(instance.id), new OrderCompleteValidator(instance.complete), new OrderStatusValidator(instance.status) ) } // ----- option delegating validators ----- -class OrderStatusValidator(instance: OrderStatus) extends RecursiveValidator { - override val validators = instance.toSeq.map { new OrderStatusOptValidator(_) } +class UsersLoginGetUsernameValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new UsersLoginGetUsernameOptValidator(_) } } -class PetsPostBodyValidator(instance: PetsPostBody) extends RecursiveValidator { +class PetsPostBodyValidator(instance: Option[Pet]) extends RecursiveValidator { override val validators = instance.toSeq.map { new PetValidator(_) } } -class PetTagsValidator(instance: PetTags) extends RecursiveValidator { +class PetIdValidator(instance: Option[Long]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new PetIdOptValidator(_) } +} +class PetStatusValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new PetStatusOptValidator(_) } +} +class PetTagsValidator(instance: Option[Seq[Tag]]) extends RecursiveValidator { override val validators = instance.toSeq.map { new PetTagsOptValidator(_) } } -class OrderPetIdValidator(instance: OrderPetId) extends RecursiveValidator { - override val validators = instance.toSeq.map { new OrderPetIdOptValidator(_) } +class TagIdValidator(instance: Option[Long]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new TagIdOptValidator(_) } } -class PetCategoryValidator(instance: PetCategory) extends RecursiveValidator { +class TagNameValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new TagNameOptValidator(_) } +} +class PetCategoryValidator(instance: Option[Tag]) extends RecursiveValidator { override val validators = instance.toSeq.map { new TagValidator(_) } } -class UsersUsernamePutBodyValidator(instance: UsersUsernamePutBody) extends RecursiveValidator { +class UsersUsernamePutBodyValidator(instance: Option[User]) extends RecursiveValidator { override val validators = instance.toSeq.map { new UserValidator(_) } } -class OrderQuantityValidator(instance: OrderQuantity) extends RecursiveValidator { - override val validators = instance.toSeq.map { new OrderQuantityOptValidator(_) } +class UserEmailValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new UserEmailOptValidator(_) } +} +class UserUsernameValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new UserUsernameOptValidator(_) } +} +class UserUserStatusValidator(instance: Option[Int]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new UserUserStatusOptValidator(_) } +} +class UserLastNameValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new UserLastNameOptValidator(_) } +} +class UserFirstNameValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new UserFirstNameOptValidator(_) } +} +class UserIdValidator(instance: Option[Long]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new UserIdOptValidator(_) } } -class StoresOrderPostBodyValidator(instance: StoresOrderPostBody) extends RecursiveValidator { +class UserPhoneValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new UserPhoneOptValidator(_) } +} +class UserPasswordValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new UserPasswordOptValidator(_) } +} +class StoresOrderPostBodyValidator(instance: Option[Order]) extends RecursiveValidator { override val validators = instance.toSeq.map { new OrderValidator(_) } } -class OrderShipDateValidator(instance: OrderShipDate) extends RecursiveValidator { +class OrderShipDateValidator(instance: Option[ZonedDateTime]) extends RecursiveValidator { override val validators = instance.toSeq.map { new OrderShipDateOptValidator(_) } } -class OrderCompleteValidator(instance: OrderComplete) extends RecursiveValidator { +class OrderQuantityValidator(instance: Option[Int]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new OrderQuantityOptValidator(_) } +} +class OrderPetIdValidator(instance: Option[Long]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new OrderPetIdOptValidator(_) } +} +class OrderIdValidator(instance: Option[Long]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new OrderIdOptValidator(_) } +} +class OrderCompleteValidator(instance: Option[Boolean]) extends RecursiveValidator { override val validators = instance.toSeq.map { new OrderCompleteOptValidator(_) } } -class UsersCreateWithListPostBodyValidator(instance: UsersCreateWithListPostBody) extends RecursiveValidator { +class OrderStatusValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new OrderStatusOptValidator(_) } +} +class UsersCreateWithListPostBodyValidator(instance: Option[Seq[User]]) extends RecursiveValidator { override val validators = instance.toSeq.map { new UsersCreateWithListPostBodyOptValidator(_) } } -class PetsFindByStatusGetStatusValidator(instance: PetsFindByStatusGetStatus) extends RecursiveValidator { +class PetsFindByStatusGetStatusValidator(instance: Option[ArrayWrapper[String]]) extends RecursiveValidator { override val validators = instance.toSeq.map { new PetsFindByStatusGetStatusOptValidator(_) } } // ----- array delegating validators ----- -class PetTagsOptConstraints(override val instance: PetTagsOpt) extends ValidationBase[PetTagsOpt] { - override def constraints: Seq[Constraint[PetTagsOpt]] = +class PetPhotoUrlsConstraints(override val instance: Seq[String]) extends ValidationBase[Seq[String]] { + override def constraints: Seq[Constraint[Seq[String]]] = Seq() } -class PetTagsOptValidator(instance: PetTagsOpt) extends RecursiveValidator { - override val validators = new PetTagsOptConstraints(instance) +: instance.map { new TagValidator(_)} +class PetPhotoUrlsValidator(instance: Seq[String]) extends RecursiveValidator { + override val validators = new PetPhotoUrlsConstraints(instance) +: instance.map { new PetPhotoUrlsArrValidator(_)} } -class PetPhotoUrlsConstraints(override val instance: PetPhotoUrls) extends ValidationBase[PetPhotoUrls] { - override def constraints: Seq[Constraint[PetPhotoUrls]] = +class PetTagsOptConstraints(override val instance: Seq[Tag]) extends ValidationBase[Seq[Tag]] { + override def constraints: Seq[Constraint[Seq[Tag]]] = Seq() } -class PetPhotoUrlsValidator(instance: PetPhotoUrls) extends RecursiveValidator { - override val validators = new PetPhotoUrlsConstraints(instance) +: instance.map { new PetPhotoUrlsArrValidator(_)} +class PetTagsOptValidator(instance: Seq[Tag]) extends RecursiveValidator { + override val validators = new PetTagsOptConstraints(instance) +: instance.map { new TagValidator(_)} } -class UsersCreateWithListPostBodyOptConstraints(override val instance: UsersCreateWithListPostBodyOpt) extends ValidationBase[UsersCreateWithListPostBodyOpt] { - override def constraints: Seq[Constraint[UsersCreateWithListPostBodyOpt]] = +class UsersCreateWithListPostBodyOptConstraints(override val instance: Seq[User]) extends ValidationBase[Seq[User]] { + override def constraints: Seq[Constraint[Seq[User]]] = Seq() } -class UsersCreateWithListPostBodyOptValidator(instance: UsersCreateWithListPostBodyOpt) extends RecursiveValidator { +class UsersCreateWithListPostBodyOptValidator(instance: Seq[User]) extends RecursiveValidator { override val validators = new UsersCreateWithListPostBodyOptConstraints(instance) +: instance.map { new UserValidator(_)} } -class PetsFindByStatusGetStatusOptConstraints(override val instance: PetsFindByStatusGetStatusOpt) extends ValidationBase[PetsFindByStatusGetStatusOpt] { - override def constraints: Seq[Constraint[PetsFindByStatusGetStatusOpt]] = +class PetsFindByStatusGetStatusOptConstraints(override val instance: ArrayWrapper[String]) extends ValidationBase[ArrayWrapper[String]] { + override def constraints: Seq[Constraint[ArrayWrapper[String]]] = Seq() } -class PetsFindByStatusGetStatusOptValidator(instance: PetsFindByStatusGetStatusOpt) extends RecursiveValidator { +class PetsFindByStatusGetStatusOptValidator(instance: ArrayWrapper[String]) extends RecursiveValidator { override val validators = new PetsFindByStatusGetStatusOptConstraints(instance) +: instance.map { new PetsFindByStatusGetStatusOptArrValidator(_)} } // ----- catch all simple validators ----- // ----- composite validators ----- // ----- call validations ----- -class UsersPostValidator(body: UsersUsernamePutBody) extends RecursiveValidator { +class UsersPostValidator(body: Option[User]) extends RecursiveValidator { override val validators = Seq( new UsersUsernamePutBodyValidator(body) ) } -class PetsPostValidator(body: PetsPostBody) extends RecursiveValidator { +class PetsPostValidator(body: Option[Pet]) extends RecursiveValidator { override val validators = Seq( new PetsPostBodyValidator(body) ) } -class PetsPutValidator(body: PetsPostBody) extends RecursiveValidator { +class PetsPutValidator(body: Option[Pet]) extends RecursiveValidator { override val validators = Seq( new PetsPostBodyValidator(body) ) } -class PetsFindByStatusGetValidator(status: PetsFindByStatusGetStatus) extends RecursiveValidator { +class PetsFindByStatusGetValidator(status: Option[ArrayWrapper[String]]) extends RecursiveValidator { override val validators = Seq( new PetsFindByStatusGetStatusValidator(status) ) } -class StoresOrderPostValidator(body: StoresOrderPostBody) extends RecursiveValidator { +class StoresOrderPostValidator(body: Option[Order]) extends RecursiveValidator { override val validators = Seq( new StoresOrderPostBodyValidator(body) ) } -class UsersCreateWithArrayPostValidator(body: UsersCreateWithListPostBody) extends RecursiveValidator { +class UsersCreateWithArrayPostValidator(body: Option[Seq[User]]) extends RecursiveValidator { override val validators = Seq( new UsersCreateWithListPostBodyValidator(body) ) } -class UsersLoginGetValidator(username: OrderStatus, password: OrderStatus) extends RecursiveValidator { +class UsersLoginGetValidator(username: Option[String], password: Option[String]) extends RecursiveValidator { override val validators = Seq( - new OrderStatusValidator(username), + new UsersLoginGetUsernameValidator(username), - new OrderStatusValidator(password) + new UsersLoginGetUsernameValidator(password) ) } @@ -312,7 +452,7 @@ class UsersUsernameGetValidator(username: String) extends RecursiveValidator { ) } -class UsersCreateWithListPostValidator(body: UsersCreateWithListPostBody) extends RecursiveValidator { +class UsersCreateWithListPostValidator(body: Option[Seq[User]]) extends RecursiveValidator { override val validators = Seq( new UsersCreateWithListPostBodyValidator(body) @@ -348,13 +488,13 @@ class PetsPetIdDeleteValidator(api_key: String, petId: Long) extends RecursiveVa ) } -class PetsFindByTagsGetValidator(tags: PetsFindByStatusGetStatus) extends RecursiveValidator { +class PetsFindByTagsGetValidator(tags: Option[ArrayWrapper[String]]) extends RecursiveValidator { override val validators = Seq( new PetsFindByStatusGetStatusValidator(tags) ) } -class UsersUsernamePutValidator(username: String, body: UsersUsernamePutBody) extends RecursiveValidator { +class UsersUsernamePutValidator(username: String, body: Option[User]) extends RecursiveValidator { override val validators = Seq( new UsersUsernamePutUsernameValidator(username), diff --git a/play-scala-generator/src/test/resources/expected_results/validation/hackweek_yaml.scala b/play-scala-generator/src/test/resources/expected_results/validation/hackweek_yaml.scala index 31809ac0..a358db6e 100644 --- a/play-scala-generator/src/test/resources/expected_results/validation/hackweek_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/validation/hackweek_yaml.scala @@ -14,6 +14,13 @@ class ModelSchemaNameConstraints(override val instance: String) extends Validati class ModelSchemaNameValidator(instance: String) extends RecursiveValidator { override val validators = Seq(new ModelSchemaNameConstraints(instance)) } +class ModelSchemaDescriptionOptConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class ModelSchemaDescriptionOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new ModelSchemaDescriptionOptConstraints(instance)) +} class ModelSchemaSizeRegisterConstraints(override val instance: String) extends ValidationBase[String] { override def constraints: Seq[Constraint[String]] = Seq(maxLength(10), minLength(10), pattern("""/[1-9][A-Z0-9]*/""".r)) @@ -35,20 +42,6 @@ class ModelSchemaPartnerArticleModelIdConstraints(override val instance: BigInt) class ModelSchemaPartnerArticleModelIdValidator(instance: BigInt) extends RecursiveValidator { override val validators = Seq(new ModelSchemaPartnerArticleModelIdConstraints(instance)) } -class MetaCopyrightOptConstraints(override val instance: String) extends ValidationBase[String] { - override def constraints: Seq[Constraint[String]] = - Seq() -} -class MetaCopyrightOptValidator(instance: String) extends RecursiveValidator { - override val validators = Seq(new MetaCopyrightOptConstraints(instance)) -} -class ModelSchemaAgeGroupsArrResultEnumConstraints(override val instance: String) extends ValidationBase[String] { - override def constraints: Seq[Constraint[String]] = - Seq(enum("baby,kid,teen,adult")) -} -class ModelSchemaAgeGroupsArrResultEnumValidator(instance: String) extends RecursiveValidator { - override val validators = Seq(new ModelSchemaAgeGroupsArrResultEnumConstraints(instance)) -} class ModelSchemaKeywordsOptConstraints(override val instance: String) extends ValidationBase[String] { override def constraints: Seq[Constraint[String]] = Seq(pattern("""/([\w\s]{1,255}|([\w\s]{1,255}, )+[\w\s]{1,255})/""".r)) @@ -63,6 +56,20 @@ class ModelSchemaLengthRegisterOptConstraints(override val instance: String) ext class ModelSchemaLengthRegisterOptValidator(instance: String) extends RecursiveValidator { override val validators = Seq(new ModelSchemaLengthRegisterOptConstraints(instance)) } +class ModelSchemaSpecialDescriptionsOptArrConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class ModelSchemaSpecialDescriptionsOptArrValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new ModelSchemaSpecialDescriptionsOptArrConstraints(instance)) +} +class ModelSchemaArticleModelAttributesOptArrConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class ModelSchemaArticleModelAttributesOptArrValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new ModelSchemaArticleModelAttributesOptArrConstraints(instance)) +} class ModelSchemaSilhouetteIdEnumConstraints(override val instance: String) extends ValidationBase[String] { override def constraints: Seq[Constraint[String]] = Seq(enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")) @@ -70,12 +77,33 @@ class ModelSchemaSilhouetteIdEnumConstraints(override val instance: String) exte class ModelSchemaSilhouetteIdEnumValidator(instance: String) extends RecursiveValidator { override val validators = Seq(new ModelSchemaSilhouetteIdEnumConstraints(instance)) } -class ModelSchemaSpecialDescriptionsOptArrConstraints(override val instance: String) extends ValidationBase[String] { +class ModelSchemaAgeGroupsSeqEnumEnumConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq(enum("baby,kid,teen,adult")) +} +class ModelSchemaAgeGroupsSeqEnumEnumValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new ModelSchemaAgeGroupsSeqEnumEnumConstraints(instance)) +} +class MetaCopyrightOptConstraints(override val instance: String) extends ValidationBase[String] { override def constraints: Seq[Constraint[String]] = Seq() } -class ModelSchemaSpecialDescriptionsOptArrValidator(instance: String) extends RecursiveValidator { - override val validators = Seq(new ModelSchemaSpecialDescriptionsOptArrConstraints(instance)) +class MetaCopyrightOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new MetaCopyrightOptConstraints(instance)) +} +class LinksSelfOptConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class LinksSelfOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new LinksSelfOptConstraints(instance)) +} +class LinksRelatedOptConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class LinksRelatedOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new LinksRelatedOptConstraints(instance)) } // ----- complex type validators ----- class ModelSchemaRootValidator(instance: ModelSchemaRoot) extends RecursiveValidator { @@ -88,16 +116,16 @@ class ModelSchemaRootValidator(instance: ModelSchemaRoot) extends RecursiveValid class ModelSchemaValidator(instance: ModelSchema) extends RecursiveValidator { override val validators = Seq( new ModelSchemaNameValidator(instance.name), + new ModelSchemaDescriptionValidator(instance.description), new ModelSchemaSizeRegisterValidator(instance.sizeRegister), new ModelSchemaBrandValidator(instance.brand), new ModelSchemaPartnerArticleModelIdValidator(instance.partnerArticleModelId), - new MetaCopyrightValidator(instance.description), - new ModelSchemaAgeGroupsValidator(instance.ageGroups), new ModelSchemaKeywordsValidator(instance.keywords), new ModelSchemaLengthRegisterValidator(instance.lengthRegister), - new ModelSchemaSilhouetteIdValidator(instance.silhouetteId), new ModelSchemaSpecialDescriptionsValidator(instance.specialDescriptions), - new ModelSchemaSpecialDescriptionsValidator(instance.articleModelAttributes) + new ModelSchemaArticleModelAttributesValidator(instance.articleModelAttributes), + new ModelSchemaSilhouetteIdValidator(instance.silhouetteId), + new ModelSchemaAgeGroupsValidator(instance.ageGroups) ) } class MetaValidator(instance: Meta) extends RecursiveValidator { @@ -107,56 +135,75 @@ class MetaValidator(instance: Meta) extends RecursiveValidator { } class LinksValidator(instance: Links) extends RecursiveValidator { override val validators = Seq( - new MetaCopyrightValidator(instance.self), - new MetaCopyrightValidator(instance.related) + new LinksSelfValidator(instance.self), + new LinksRelatedValidator(instance.related) ) } // ----- enum delegating validators ----- -class ModelSchemaAgeGroupsArrResultValidator(instance: ModelSchemaAgeGroupsArrResult) extends RecursiveValidator { - override val validators = Seq(new ModelSchemaAgeGroupsArrResultEnumValidator(instance.value)) -} class ModelSchemaSilhouetteIdValidator(instance: ModelSchemaSilhouetteId) extends RecursiveValidator { override val validators = Seq(new ModelSchemaSilhouetteIdEnumValidator(instance.value)) } +class ModelSchemaAgeGroupsSeqEnumValidator(instance: ModelSchemaAgeGroupsSeqEnum) extends RecursiveValidator { + override val validators = Seq(new ModelSchemaAgeGroupsSeqEnumEnumValidator(instance.value)) +} // ----- option delegating validators ----- -class ModelSchemaRootDataValidator(instance: ModelSchemaRootData) extends RecursiveValidator { +class ModelSchemaRootDataValidator(instance: Option[ModelSchema]) extends RecursiveValidator { override val validators = instance.toSeq.map { new ModelSchemaValidator(_) } } -class MetaCopyrightValidator(instance: MetaCopyright) extends RecursiveValidator { - override val validators = instance.toSeq.map { new MetaCopyrightOptValidator(_) } +class ModelSchemaDescriptionValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new ModelSchemaDescriptionOptValidator(_) } } -class ModelSchemaKeywordsValidator(instance: ModelSchemaKeywords) extends RecursiveValidator { +class ModelSchemaKeywordsValidator(instance: Option[String]) extends RecursiveValidator { override val validators = instance.toSeq.map { new ModelSchemaKeywordsOptValidator(_) } } -class ModelSchemaLengthRegisterValidator(instance: ModelSchemaLengthRegister) extends RecursiveValidator { +class ModelSchemaLengthRegisterValidator(instance: Option[String]) extends RecursiveValidator { override val validators = instance.toSeq.map { new ModelSchemaLengthRegisterOptValidator(_) } } -class ModelSchemaSpecialDescriptionsValidator(instance: ModelSchemaSpecialDescriptions) extends RecursiveValidator { +class ModelSchemaSpecialDescriptionsValidator(instance: Option[Seq[String]]) extends RecursiveValidator { override val validators = instance.toSeq.map { new ModelSchemaSpecialDescriptionsOptValidator(_) } } -class ModelSchemaRootMetaValidator(instance: ModelSchemaRootMeta) extends RecursiveValidator { +class ModelSchemaArticleModelAttributesValidator(instance: Option[Seq[String]]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new ModelSchemaArticleModelAttributesOptValidator(_) } +} +class ModelSchemaRootMetaValidator(instance: Option[Meta]) extends RecursiveValidator { override val validators = instance.toSeq.map { new MetaValidator(_) } } -class ModelSchemaRootLinksValidator(instance: ModelSchemaRootLinks) extends RecursiveValidator { +class MetaCopyrightValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new MetaCopyrightOptValidator(_) } +} +class ModelSchemaRootLinksValidator(instance: Option[Links]) extends RecursiveValidator { override val validators = instance.toSeq.map { new LinksValidator(_) } } -// ----- array delegating validators ----- -class ModelSchemaAgeGroupsConstraints(override val instance: ModelSchemaAgeGroups) extends ValidationBase[ModelSchemaAgeGroups] { - override def constraints: Seq[Constraint[ModelSchemaAgeGroups]] = - Seq(maxItems(4)) +class LinksSelfValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new LinksSelfOptValidator(_) } } -class ModelSchemaAgeGroupsValidator(instance: ModelSchemaAgeGroups) extends RecursiveValidator { - override val validators = new ModelSchemaAgeGroupsConstraints(instance) +: instance.map { new ModelSchemaAgeGroupsArrResultValidator(_)} +class LinksRelatedValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new LinksRelatedOptValidator(_) } } -class ModelSchemaSpecialDescriptionsOptConstraints(override val instance: ModelSchemaSpecialDescriptionsOpt) extends ValidationBase[ModelSchemaSpecialDescriptionsOpt] { - override def constraints: Seq[Constraint[ModelSchemaSpecialDescriptionsOpt]] = +// ----- array delegating validators ----- +class ModelSchemaSpecialDescriptionsOptConstraints(override val instance: Seq[String]) extends ValidationBase[Seq[String]] { + override def constraints: Seq[Constraint[Seq[String]]] = Seq() } -class ModelSchemaSpecialDescriptionsOptValidator(instance: ModelSchemaSpecialDescriptionsOpt) extends RecursiveValidator { +class ModelSchemaSpecialDescriptionsOptValidator(instance: Seq[String]) extends RecursiveValidator { override val validators = new ModelSchemaSpecialDescriptionsOptConstraints(instance) +: instance.map { new ModelSchemaSpecialDescriptionsOptArrValidator(_)} } +class ModelSchemaArticleModelAttributesOptConstraints(override val instance: Seq[String]) extends ValidationBase[Seq[String]] { + override def constraints: Seq[Constraint[Seq[String]]] = + Seq(minItems(1)) +} +class ModelSchemaArticleModelAttributesOptValidator(instance: Seq[String]) extends RecursiveValidator { + override val validators = new ModelSchemaArticleModelAttributesOptConstraints(instance) +: instance.map { new ModelSchemaArticleModelAttributesOptArrValidator(_)} +} +class ModelSchemaAgeGroupsConstraints(override val instance: Seq[ModelSchemaAgeGroupsSeqEnum]) extends ValidationBase[Seq[ModelSchemaAgeGroupsSeqEnum]] { + override def constraints: Seq[Constraint[Seq[ModelSchemaAgeGroupsSeqEnum]]] = + Seq(maxItems(4)) +} +class ModelSchemaAgeGroupsValidator(instance: Seq[ModelSchemaAgeGroupsSeqEnum]) extends RecursiveValidator { + override val validators = new ModelSchemaAgeGroupsConstraints(instance) +: instance.map { new ModelSchemaAgeGroupsSeqEnumValidator(_)} +} // ----- catch all simple validators ----- // ----- composite validators ----- // ----- call validations ----- diff --git a/play-scala-generator/src/test/resources/expected_results/validation/heroku_petstore_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/validation/heroku_petstore_api_yaml.scala index 1a06b837..47e488a1 100644 --- a/play-scala-generator/src/test/resources/expected_results/validation/heroku_petstore_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/validation/heroku_petstore_api_yaml.scala @@ -44,20 +44,20 @@ class PetValidator(instance: Pet) extends RecursiveValidator { } // ----- option delegating validators ----- -class PetNameValidator(instance: PetName) extends RecursiveValidator { +class PetNameValidator(instance: Option[String]) extends RecursiveValidator { override val validators = instance.toSeq.map { new PetNameOptValidator(_) } } -class PetBirthdayValidator(instance: PetBirthday) extends RecursiveValidator { +class PetBirthdayValidator(instance: Option[Int]) extends RecursiveValidator { override val validators = instance.toSeq.map { new PetBirthdayOptValidator(_) } } -class PutPetValidator(instance: PutPet) extends RecursiveValidator { +class PutPetValidator(instance: Option[Pet]) extends RecursiveValidator { override val validators = instance.toSeq.map { new PetValidator(_) } } // ----- array delegating validators ----- // ----- catch all simple validators ----- // ----- composite validators ----- // ----- call validations ----- -class PutValidator(pet: PutPet) extends RecursiveValidator { +class PutValidator(pet: Option[Pet]) extends RecursiveValidator { override val validators = Seq( new PutPetValidator(pet) diff --git a/play-scala-generator/src/test/resources/expected_results/validation/instagram_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/validation/instagram_api_yaml.scala index 3be5276d..f9a138d2 100644 --- a/play-scala-generator/src/test/resources/expected_results/validation/instagram_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/validation/instagram_api_yaml.scala @@ -8,12 +8,12 @@ import PlayValidations._ import scala.math.BigInt import scala.math.BigDecimal // ----- constraints and wrapper validations ----- -class MediaIdOptConstraints(override val instance: BigInt) extends ValidationBase[BigInt] { +class UsersUser_idMediaRecentGetCountOptConstraints(override val instance: BigInt) extends ValidationBase[BigInt] { override def constraints: Seq[Constraint[BigInt]] = Seq() } -class MediaIdOptValidator(instance: BigInt) extends RecursiveValidator { - override val validators = Seq(new MediaIdOptConstraints(instance)) +class UsersUser_idMediaRecentGetCountOptValidator(instance: BigInt) extends RecursiveValidator { + override val validators = Seq(new UsersUser_idMediaRecentGetCountOptConstraints(instance)) } class UsersUser_idFollowsGetUser_idConstraints(override val instance: BigDecimal) extends ValidationBase[BigDecimal] { override def constraints: Seq[Constraint[BigDecimal]] = @@ -36,12 +36,12 @@ class LocationsLocation_idGetLocation_idConstraints(override val instance: BigIn class LocationsLocation_idGetLocation_idValidator(instance: BigInt) extends RecursiveValidator { override val validators = Seq(new LocationsLocation_idGetLocation_idConstraints(instance)) } -class LocationLatitudeOptConstraints(override val instance: BigDecimal) extends ValidationBase[BigDecimal] { +class LocationsSearchGetLngOptConstraints(override val instance: BigDecimal) extends ValidationBase[BigDecimal] { override def constraints: Seq[Constraint[BigDecimal]] = Seq() } -class LocationLatitudeOptValidator(instance: BigDecimal) extends RecursiveValidator { - override val validators = Seq(new LocationLatitudeOptConstraints(instance)) +class LocationsSearchGetLngOptValidator(instance: BigDecimal) extends RecursiveValidator { + override val validators = Seq(new LocationsSearchGetLngOptConstraints(instance)) } class MediaMedia_idCommentsDeleteMedia_idConstraints(override val instance: BigInt) extends ValidationBase[BigInt] { override def constraints: Seq[Constraint[BigInt]] = @@ -50,19 +50,19 @@ class MediaMedia_idCommentsDeleteMedia_idConstraints(override val instance: BigI class MediaMedia_idCommentsDeleteMedia_idValidator(instance: BigInt) extends RecursiveValidator { override val validators = Seq(new MediaMedia_idCommentsDeleteMedia_idConstraints(instance)) } -class MediaFilterOptConstraints(override val instance: String) extends ValidationBase[String] { +class UsersUser_idMediaRecentGetMax_idOptConstraints(override val instance: String) extends ValidationBase[String] { override def constraints: Seq[Constraint[String]] = Seq() } -class MediaFilterOptValidator(instance: String) extends RecursiveValidator { - override val validators = Seq(new MediaFilterOptConstraints(instance)) +class UsersUser_idMediaRecentGetMax_idOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new UsersUser_idMediaRecentGetMax_idOptConstraints(instance)) } -class UsersUser_idRelationshipPostActionOptEnumConstraints(override val instance: String) extends ValidationBase[String] { +class UsersUser_idRelationshipPostActionOptionEnumEnumConstraints(override val instance: String) extends ValidationBase[String] { override def constraints: Seq[Constraint[String]] = Seq(enum("approve,unblock,block,unfollow,follow")) } -class UsersUser_idRelationshipPostActionOptEnumValidator(instance: String) extends RecursiveValidator { - override val validators = Seq(new UsersUser_idRelationshipPostActionOptEnumConstraints(instance)) +class UsersUser_idRelationshipPostActionOptionEnumEnumValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new UsersUser_idRelationshipPostActionOptionEnumEnumConstraints(instance)) } class MediaMedia_idLikesGetMedia_idConstraints(override val instance: BigInt) extends ValidationBase[BigInt] { override def constraints: Seq[Constraint[BigInt]] = @@ -179,22 +179,22 @@ class UsersUser_idMediaRecentGetUser_idValidator(instance: BigDecimal) extends R // ----- complex type validators ----- // ----- enum delegating validators ----- -class UsersUser_idRelationshipPostActionOptValidator(instance: UsersUser_idRelationshipPostActionOpt) extends RecursiveValidator { - override val validators = Seq(new UsersUser_idRelationshipPostActionOptEnumValidator(instance.value)) +class UsersUser_idRelationshipPostActionOptionEnumValidator(instance: UsersUser_idRelationshipPostActionOptionEnum) extends RecursiveValidator { + override val validators = Seq(new UsersUser_idRelationshipPostActionOptionEnumEnumValidator(instance.value)) } // ----- option delegating validators ----- -class MediaIdValidator(instance: MediaId) extends RecursiveValidator { - override val validators = instance.toSeq.map { new MediaIdOptValidator(_) } +class UsersUser_idMediaRecentGetCountValidator(instance: Option[BigInt]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new UsersUser_idMediaRecentGetCountOptValidator(_) } } -class LocationLatitudeValidator(instance: LocationLatitude) extends RecursiveValidator { - override val validators = instance.toSeq.map { new LocationLatitudeOptValidator(_) } +class LocationsSearchGetLngValidator(instance: Option[BigDecimal]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new LocationsSearchGetLngOptValidator(_) } } -class MediaFilterValidator(instance: MediaFilter) extends RecursiveValidator { - override val validators = instance.toSeq.map { new MediaFilterOptValidator(_) } +class UsersUser_idMediaRecentGetMax_idValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new UsersUser_idMediaRecentGetMax_idOptValidator(_) } } -class UsersUser_idRelationshipPostActionValidator(instance: UsersUser_idRelationshipPostAction) extends RecursiveValidator { - override val validators = instance.toSeq.map { new UsersUser_idRelationshipPostActionOptValidator(_) } +class UsersUser_idRelationshipPostActionValidator(instance: Option[UsersUser_idRelationshipPostActionOptionEnum]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new UsersUser_idRelationshipPostActionOptionEnumValidator(_) } } // ----- array delegating validators ----- // ----- catch all simple validators ----- @@ -218,19 +218,19 @@ class MediaMedia_idLikesGetValidator(media_id: BigInt) extends RecursiveValidato ) } -class LocationsSearchGetValidator(foursquare_v2_id: MediaId, facebook_places_id: MediaId, distance: MediaId, lat: LocationLatitude, foursquare_id: MediaId, lng: LocationLatitude) extends RecursiveValidator { +class LocationsSearchGetValidator(foursquare_v2_id: Option[BigInt], facebook_places_id: Option[BigInt], distance: Option[BigInt], lat: Option[BigDecimal], foursquare_id: Option[BigInt], lng: Option[BigDecimal]) extends RecursiveValidator { override val validators = Seq( - new MediaIdValidator(foursquare_v2_id), + new UsersUser_idMediaRecentGetCountValidator(foursquare_v2_id), - new MediaIdValidator(facebook_places_id), + new UsersUser_idMediaRecentGetCountValidator(facebook_places_id), - new MediaIdValidator(distance), + new UsersUser_idMediaRecentGetCountValidator(distance), - new LocationLatitudeValidator(lat), + new LocationsSearchGetLngValidator(lat), - new MediaIdValidator(foursquare_id), + new UsersUser_idMediaRecentGetCountValidator(foursquare_id), - new LocationLatitudeValidator(lng) + new LocationsSearchGetLngValidator(lng) ) } @@ -240,17 +240,17 @@ class MediaMedia_idCommentsDeleteValidator(media_id: BigInt) extends RecursiveVa ) } -class UsersSelfMediaLikedGetValidator(count: MediaId, max_like_id: MediaId) extends RecursiveValidator { +class UsersSelfMediaLikedGetValidator(count: Option[BigInt], max_like_id: Option[BigInt]) extends RecursiveValidator { override val validators = Seq( - new MediaIdValidator(count), + new UsersUser_idMediaRecentGetCountValidator(count), - new MediaIdValidator(max_like_id) + new UsersUser_idMediaRecentGetCountValidator(max_like_id) ) } -class TagsSearchGetValidator(q: MediaFilter) extends RecursiveValidator { +class TagsSearchGetValidator(q: Option[String]) extends RecursiveValidator { override val validators = Seq( - new MediaFilterValidator(q) + new UsersUser_idMediaRecentGetMax_idValidator(q) ) } @@ -278,19 +278,19 @@ class MediaShortcodeGetValidator(shortcode: String) extends RecursiveValidator { ) } -class UsersSearchGetValidator(q: String, count: MediaFilter) extends RecursiveValidator { +class UsersSearchGetValidator(q: String, count: Option[String]) extends RecursiveValidator { override val validators = Seq( new UsersSearchGetQValidator(q), - new MediaFilterValidator(count) + new UsersUser_idMediaRecentGetMax_idValidator(count) ) } -class MediaMedia_idCommentsPostValidator(media_id: BigInt, tEXT: LocationLatitude) extends RecursiveValidator { +class MediaMedia_idCommentsPostValidator(media_id: BigInt, tEXT: Option[BigDecimal]) extends RecursiveValidator { override val validators = Seq( new MediaMedia_idCommentsPostMedia_idValidator(media_id), - new LocationLatitudeValidator(tEXT) + new LocationsSearchGetLngValidator(tEXT) ) } @@ -300,7 +300,7 @@ class MediaMedia_idLikesPostValidator(media_id: BigInt) extends RecursiveValidat ) } -class UsersUser_idRelationshipPostValidator(user_id: BigDecimal, action: UsersUser_idRelationshipPostAction) extends RecursiveValidator { +class UsersUser_idRelationshipPostValidator(user_id: BigDecimal, action: Option[UsersUser_idRelationshipPostActionOptionEnum]) extends RecursiveValidator { override val validators = Seq( new UsersUser_idRelationshipPostUser_idValidator(user_id), @@ -320,31 +320,31 @@ class LocationsLocation_idGetValidator(location_id: BigInt) extends RecursiveVal ) } -class LocationsLocation_idMediaRecentGetValidator(location_id: BigInt, max_timestamp: MediaId, min_timestamp: MediaId, min_id: MediaFilter, max_id: MediaFilter) extends RecursiveValidator { +class LocationsLocation_idMediaRecentGetValidator(location_id: BigInt, max_timestamp: Option[BigInt], min_timestamp: Option[BigInt], min_id: Option[String], max_id: Option[String]) extends RecursiveValidator { override val validators = Seq( new LocationsLocation_idMediaRecentGetLocation_idValidator(location_id), - new MediaIdValidator(max_timestamp), + new UsersUser_idMediaRecentGetCountValidator(max_timestamp), - new MediaIdValidator(min_timestamp), + new UsersUser_idMediaRecentGetCountValidator(min_timestamp), - new MediaFilterValidator(min_id), + new UsersUser_idMediaRecentGetMax_idValidator(min_id), - new MediaFilterValidator(max_id) + new UsersUser_idMediaRecentGetMax_idValidator(max_id) ) } -class MediaSearchGetValidator(mAX_TIMESTAMP: MediaId, dISTANCE: BigInt, lNG: LocationLatitude, mIN_TIMESTAMP: MediaId, lAT: LocationLatitude) extends RecursiveValidator { +class MediaSearchGetValidator(mAX_TIMESTAMP: Option[BigInt], dISTANCE: BigInt, lNG: Option[BigDecimal], mIN_TIMESTAMP: Option[BigInt], lAT: Option[BigDecimal]) extends RecursiveValidator { override val validators = Seq( - new MediaIdValidator(mAX_TIMESTAMP), + new UsersUser_idMediaRecentGetCountValidator(mAX_TIMESTAMP), new MediaSearchGetDISTANCEValidator(dISTANCE), - new LocationLatitudeValidator(lNG), + new LocationsSearchGetLngValidator(lNG), - new MediaIdValidator(mIN_TIMESTAMP), + new UsersUser_idMediaRecentGetCountValidator(mIN_TIMESTAMP), - new LocationLatitudeValidator(lAT) + new LocationsSearchGetLngValidator(lAT) ) } @@ -360,39 +360,39 @@ class UsersUser_idFollowsGetValidator(user_id: BigDecimal) extends RecursiveVali ) } -class UsersUser_idMediaRecentGetValidator(user_id: BigDecimal, max_timestamp: MediaId, min_id: MediaFilter, min_timestamp: MediaId, max_id: MediaFilter, count: MediaId) extends RecursiveValidator { +class UsersUser_idMediaRecentGetValidator(user_id: BigDecimal, max_timestamp: Option[BigInt], min_id: Option[String], min_timestamp: Option[BigInt], max_id: Option[String], count: Option[BigInt]) extends RecursiveValidator { override val validators = Seq( new UsersUser_idMediaRecentGetUser_idValidator(user_id), - new MediaIdValidator(max_timestamp), + new UsersUser_idMediaRecentGetCountValidator(max_timestamp), - new MediaFilterValidator(min_id), + new UsersUser_idMediaRecentGetMax_idValidator(min_id), - new MediaIdValidator(min_timestamp), + new UsersUser_idMediaRecentGetCountValidator(min_timestamp), - new MediaFilterValidator(max_id), + new UsersUser_idMediaRecentGetMax_idValidator(max_id), - new MediaIdValidator(count) + new UsersUser_idMediaRecentGetCountValidator(count) ) } -class UsersSelfFeedGetValidator(count: MediaId, max_id: MediaId, min_id: MediaId) extends RecursiveValidator { +class UsersSelfFeedGetValidator(count: Option[BigInt], max_id: Option[BigInt], min_id: Option[BigInt]) extends RecursiveValidator { override val validators = Seq( - new MediaIdValidator(count), + new UsersUser_idMediaRecentGetCountValidator(count), - new MediaIdValidator(max_id), + new UsersUser_idMediaRecentGetCountValidator(max_id), - new MediaIdValidator(min_id) + new UsersUser_idMediaRecentGetCountValidator(min_id) ) } -class GeographiesGeo_idMediaRecentGetValidator(geo_id: BigInt, count: MediaId, min_id: MediaId) extends RecursiveValidator { +class GeographiesGeo_idMediaRecentGetValidator(geo_id: BigInt, count: Option[BigInt], min_id: Option[BigInt]) extends RecursiveValidator { override val validators = Seq( new GeographiesGeo_idMediaRecentGetGeo_idValidator(geo_id), - new MediaIdValidator(count), + new UsersUser_idMediaRecentGetCountValidator(count), - new MediaIdValidator(min_id) + new UsersUser_idMediaRecentGetCountValidator(min_id) ) } diff --git a/play-scala-generator/src/test/resources/expected_results/validation/nakadi_yaml.scala b/play-scala-generator/src/test/resources/expected_results/validation/nakadi_yaml.scala index 3a4a5c14..1fceb9de 100644 --- a/play-scala-generator/src/test/resources/expected_results/validation/nakadi_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/validation/nakadi_yaml.scala @@ -49,6 +49,20 @@ class EventEvent_typeOptConstraints(override val instance: String) extends Valid class EventEvent_typeOptValidator(instance: String) extends RecursiveValidator { override val validators = Seq(new EventEvent_typeOptConstraints(instance)) } +class EventPartitioning_keyOptConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class EventPartitioning_keyOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new EventPartitioning_keyOptConstraints(instance)) +} +class EventMetaDataRoot_idOptConstraints(override val instance: UUID) extends ValidationBase[UUID] { + override def constraints: Seq[Constraint[UUID]] = + Seq() +} +class EventMetaDataRoot_idOptValidator(instance: UUID) extends RecursiveValidator { + override val validators = Seq(new EventMetaDataRoot_idOptConstraints(instance)) +} class EventMetaDataParent_idOptConstraints(override val instance: UUID) extends ValidationBase[UUID] { override def constraints: Seq[Constraint[UUID]] = Seq() @@ -63,6 +77,20 @@ class EventMetaDataScopesOptArrConstraints(override val instance: String) extend class EventMetaDataScopesOptArrValidator(instance: String) extends RecursiveValidator { override val validators = Seq(new EventMetaDataScopesOptArrConstraints(instance)) } +class EventMetaDataIdOptConstraints(override val instance: UUID) extends ValidationBase[UUID] { + override def constraints: Seq[Constraint[UUID]] = + Seq() +} +class EventMetaDataIdOptValidator(instance: UUID) extends RecursiveValidator { + override val validators = Seq(new EventMetaDataIdOptConstraints(instance)) +} +class EventMetaDataCreatedOptConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class EventMetaDataCreatedOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new EventMetaDataCreatedOptConstraints(instance)) +} class TopicsTopicPartitionsPartitionGetTopicConstraints(override val instance: String) extends ValidationBase[String] { override def constraints: Seq[Constraint[String]] = Seq() @@ -123,45 +151,57 @@ class TopicsTopicPartitionsPartitionEventsGetBatch_limitValidator(instance: Int) class EventValidator(instance: Event) extends RecursiveValidator { override val validators = Seq( new EventEvent_typeValidator(instance.event_type), - new EventEvent_typeValidator(instance.partitioning_key), + new EventPartitioning_keyValidator(instance.partitioning_key), new EventMetadataValidator(instance.metadata) ) } -class EventMetaDataValidator(instance: EventMetaDataNameClash) extends RecursiveValidator { +class EventMetaDataValidator(instance: EventMetaData) extends RecursiveValidator { override val validators = Seq( - new EventMetaDataParent_idValidator(instance.root_id), + new EventMetaDataRoot_idValidator(instance.root_id), new EventMetaDataParent_idValidator(instance.parent_id), new EventMetaDataScopesValidator(instance.scopes), - new EventMetaDataParent_idValidator(instance.id), - new EventEvent_typeValidator(instance.created) + new EventMetaDataIdValidator(instance.id), + new EventMetaDataCreatedValidator(instance.created) ) } // ----- option delegating validators ----- -class TopicsTopicEventsGetStream_timeoutValidator(instance: TopicsTopicEventsGetStream_timeout) extends RecursiveValidator { +class TopicsTopicEventsGetStream_timeoutValidator(instance: Option[Int]) extends RecursiveValidator { override val validators = instance.toSeq.map { new TopicsTopicEventsGetStream_timeoutOptValidator(_) } } -class TopicsTopicEventsBatchPostEventValidator(instance: TopicsTopicEventsBatchPostEvent) extends RecursiveValidator { +class TopicsTopicEventsBatchPostEventValidator(instance: Option[Event]) extends RecursiveValidator { override val validators = instance.toSeq.map { new EventValidator(_) } } -class EventEvent_typeValidator(instance: EventEvent_type) extends RecursiveValidator { +class EventEvent_typeValidator(instance: Option[String]) extends RecursiveValidator { override val validators = instance.toSeq.map { new EventEvent_typeOptValidator(_) } } -class EventMetadataValidator(instance: EventMetadata) extends RecursiveValidator { +class EventPartitioning_keyValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new EventPartitioning_keyOptValidator(_) } +} +class EventMetadataValidator(instance: Option[EventMetaData]) extends RecursiveValidator { override val validators = instance.toSeq.map { new EventMetaDataValidator(_) } } -class EventMetaDataParent_idValidator(instance: EventMetaDataParent_id) extends RecursiveValidator { +class EventMetaDataRoot_idValidator(instance: Option[UUID]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new EventMetaDataRoot_idOptValidator(_) } +} +class EventMetaDataParent_idValidator(instance: Option[UUID]) extends RecursiveValidator { override val validators = instance.toSeq.map { new EventMetaDataParent_idOptValidator(_) } } -class EventMetaDataScopesValidator(instance: EventMetaDataScopes) extends RecursiveValidator { +class EventMetaDataScopesValidator(instance: Option[Seq[String]]) extends RecursiveValidator { override val validators = instance.toSeq.map { new EventMetaDataScopesOptValidator(_) } } +class EventMetaDataIdValidator(instance: Option[UUID]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new EventMetaDataIdOptValidator(_) } +} +class EventMetaDataCreatedValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new EventMetaDataCreatedOptValidator(_) } +} // ----- array delegating validators ----- -class EventMetaDataScopesOptConstraints(override val instance: EventMetaDataScopesOpt) extends ValidationBase[EventMetaDataScopesOpt] { - override def constraints: Seq[Constraint[EventMetaDataScopesOpt]] = +class EventMetaDataScopesOptConstraints(override val instance: Seq[String]) extends ValidationBase[Seq[String]] { + override def constraints: Seq[Constraint[Seq[String]]] = Seq() } -class EventMetaDataScopesOptValidator(instance: EventMetaDataScopesOpt) extends RecursiveValidator { +class EventMetaDataScopesOptValidator(instance: Seq[String]) extends RecursiveValidator { override val validators = new EventMetaDataScopesOptConstraints(instance) +: instance.map { new EventMetaDataScopesOptArrValidator(_)} } // ----- catch all simple validators ----- @@ -175,7 +215,7 @@ class TopicsTopicPartitionsPartitionGetValidator(topic: String, partition: Strin ) } -class TopicsTopicEventsGetValidator(stream_timeout: TopicsTopicEventsGetStream_timeout, stream_limit: TopicsTopicEventsGetStream_timeout, batch_flush_timeout: TopicsTopicEventsGetStream_timeout, x_nakadi_cursors: String, batch_limit: Int, batch_keep_alive_limit: TopicsTopicEventsGetStream_timeout, topic: String) extends RecursiveValidator { +class TopicsTopicEventsGetValidator(stream_timeout: Option[Int], stream_limit: Option[Int], batch_flush_timeout: Option[Int], x_nakadi_cursors: String, batch_limit: Int, batch_keep_alive_limit: Option[Int], topic: String) extends RecursiveValidator { override val validators = Seq( new TopicsTopicEventsGetStream_timeoutValidator(stream_timeout), @@ -193,7 +233,7 @@ class TopicsTopicEventsGetValidator(stream_timeout: TopicsTopicEventsGetStream_t ) } -class TopicsTopicPartitionsPartitionEventsGetValidator(start_from: String, partition: String, stream_limit: TopicsTopicEventsGetStream_timeout, topic: String, batch_limit: Int, batch_flush_timeout: TopicsTopicEventsGetStream_timeout, stream_timeout: TopicsTopicEventsGetStream_timeout, batch_keep_alive_limit: TopicsTopicEventsGetStream_timeout) extends RecursiveValidator { +class TopicsTopicPartitionsPartitionEventsGetValidator(start_from: String, partition: String, stream_limit: Option[Int], topic: String, batch_limit: Int, batch_flush_timeout: Option[Int], stream_timeout: Option[Int], batch_keep_alive_limit: Option[Int]) extends RecursiveValidator { override val validators = Seq( new TopicsTopicPartitionsPartitionEventsGetStart_fromValidator(start_from), @@ -213,7 +253,7 @@ class TopicsTopicPartitionsPartitionEventsGetValidator(start_from: String, parti ) } -class TopicsTopicEventsPostValidator(topic: String, event: TopicsTopicEventsBatchPostEvent) extends RecursiveValidator { +class TopicsTopicEventsPostValidator(topic: String, event: Option[Event]) extends RecursiveValidator { override val validators = Seq( new TopicsTopicEventsPostTopicValidator(topic), @@ -227,7 +267,7 @@ class TopicsTopicPartitionsGetValidator(topic: String) extends RecursiveValidato ) } -class TopicsTopicEventsBatchPostValidator(topic: String, event: TopicsTopicEventsBatchPostEvent) extends RecursiveValidator { +class TopicsTopicEventsBatchPostValidator(topic: String, event: Option[Event]) extends RecursiveValidator { override val validators = Seq( new TopicsTopicEventsBatchPostTopicValidator(topic), diff --git a/play-scala-generator/src/test/resources/expected_results/validation/nested_arrays_validation_yaml.scala b/play-scala-generator/src/test/resources/expected_results/validation/nested_arrays_validation_yaml.scala index b672f2ca..64d6841e 100644 --- a/play-scala-generator/src/test/resources/expected_results/validation/nested_arrays_validation_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/validation/nested_arrays_validation_yaml.scala @@ -6,6 +6,13 @@ import PlayBodyParsing._ import PlayValidations._ // ----- constraints and wrapper validations ----- +class ExampleNestedArraysOptArrArrArrArrConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq(maxLength(6), minLength(5)) +} +class ExampleNestedArraysOptArrArrArrArrValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new ExampleNestedArraysOptArrArrArrArrConstraints(instance)) +} class ActivityActionsOptConstraints(override val instance: String) extends ValidationBase[String] { override def constraints: Seq[Constraint[String]] = Seq(pattern("""the pattern to validate""".r)) @@ -13,18 +20,11 @@ class ActivityActionsOptConstraints(override val instance: String) extends Valid class ActivityActionsOptValidator(instance: String) extends RecursiveValidator { override val validators = Seq(new ActivityActionsOptConstraints(instance)) } -class ExampleNestedArraysOptArrResultArrResultArrResultArrConstraints(override val instance: String) extends ValidationBase[String] { - override def constraints: Seq[Constraint[String]] = - Seq(maxLength(6), minLength(5)) -} -class ExampleNestedArraysOptArrResultArrResultArrResultArrValidator(instance: String) extends RecursiveValidator { - override val validators = Seq(new ExampleNestedArraysOptArrResultArrResultArrResultArrConstraints(instance)) -} // ----- complex type validators ----- class ExampleValidator(instance: Example) extends RecursiveValidator { override val validators = Seq( - new ExampleMessagesValidator(instance.messages), - new ExampleNestedArraysValidator(instance.nestedArrays) + new ExampleNestedArraysValidator(instance.nestedArrays), + new ExampleMessagesValidator(instance.messages) ) } class ActivityValidator(instance: Activity) extends RecursiveValidator { @@ -34,60 +34,60 @@ class ActivityValidator(instance: Activity) extends RecursiveValidator { } // ----- option delegating validators ----- -class AnotherPostExampleValidator(instance: AnotherPostExample) extends RecursiveValidator { +class AnotherPostExampleValidator(instance: Option[Example]) extends RecursiveValidator { override val validators = instance.toSeq.map { new ExampleValidator(_) } } -class ExampleMessagesValidator(instance: ExampleMessages) extends RecursiveValidator { +class ExampleNestedArraysValidator(instance: Option[Seq[Seq[Seq[Seq[String]]]]]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new ExampleNestedArraysOptValidator(_) } +} +class ExampleMessagesValidator(instance: Option[Seq[Seq[Activity]]]) extends RecursiveValidator { override val validators = instance.toSeq.map { new ExampleMessagesOptValidator(_) } } -class ActivityActionsValidator(instance: ActivityActions) extends RecursiveValidator { +class ActivityActionsValidator(instance: Option[String]) extends RecursiveValidator { override val validators = instance.toSeq.map { new ActivityActionsOptValidator(_) } } -class ExampleNestedArraysValidator(instance: ExampleNestedArrays) extends RecursiveValidator { - override val validators = instance.toSeq.map { new ExampleNestedArraysOptValidator(_) } -} // ----- array delegating validators ----- -class ExampleMessagesOptConstraints(override val instance: ExampleMessagesOpt) extends ValidationBase[ExampleMessagesOpt] { - override def constraints: Seq[Constraint[ExampleMessagesOpt]] = +class ExampleNestedArraysOptConstraints(override val instance: Seq[Seq[Seq[Seq[String]]]]) extends ValidationBase[Seq[Seq[Seq[Seq[String]]]]] { + override def constraints: Seq[Constraint[Seq[Seq[Seq[Seq[String]]]]]] = Seq(maxItems(6), minItems(5)) } -class ExampleMessagesOptValidator(instance: ExampleMessagesOpt) extends RecursiveValidator { - override val validators = new ExampleMessagesOptConstraints(instance) +: instance.map { new ExampleMessagesOptArrResultValidator(_)} +class ExampleNestedArraysOptValidator(instance: Seq[Seq[Seq[Seq[String]]]]) extends RecursiveValidator { + override val validators = new ExampleNestedArraysOptConstraints(instance) +: instance.map { new ExampleNestedArraysOptArrValidator(_)} } -class ExampleMessagesOptArrResultConstraints(override val instance: ExampleMessagesOptArrResult) extends ValidationBase[ExampleMessagesOptArrResult] { - override def constraints: Seq[Constraint[ExampleMessagesOptArrResult]] = - Seq(maxItems(6), minItems(5)) +class ExampleNestedArraysOptArrConstraints(override val instance: Seq[Seq[Seq[String]]]) extends ValidationBase[Seq[Seq[Seq[String]]]] { + override def constraints: Seq[Constraint[Seq[Seq[Seq[String]]]]] = + Seq(maxItems(16), minItems(15)) } -class ExampleMessagesOptArrResultValidator(instance: ExampleMessagesOptArrResult) extends RecursiveValidator { - override val validators = new ExampleMessagesOptArrResultConstraints(instance) +: instance.map { new ActivityValidator(_)} +class ExampleNestedArraysOptArrValidator(instance: Seq[Seq[Seq[String]]]) extends RecursiveValidator { + override val validators = new ExampleNestedArraysOptArrConstraints(instance) +: instance.map { new ExampleNestedArraysOptArrArrValidator(_)} } -class ExampleNestedArraysOptConstraints(override val instance: ExampleNestedArraysOpt) extends ValidationBase[ExampleNestedArraysOpt] { - override def constraints: Seq[Constraint[ExampleNestedArraysOpt]] = - Seq(maxItems(6), minItems(5)) +class ExampleNestedArraysOptArrArrConstraints(override val instance: Seq[Seq[String]]) extends ValidationBase[Seq[Seq[String]]] { + override def constraints: Seq[Constraint[Seq[Seq[String]]]] = + Seq(maxItems(26), minItems(25)) } -class ExampleNestedArraysOptValidator(instance: ExampleNestedArraysOpt) extends RecursiveValidator { - override val validators = new ExampleNestedArraysOptConstraints(instance) +: instance.map { new ExampleNestedArraysOptArrResultValidator(_)} +class ExampleNestedArraysOptArrArrValidator(instance: Seq[Seq[String]]) extends RecursiveValidator { + override val validators = new ExampleNestedArraysOptArrArrConstraints(instance) +: instance.map { new ExampleNestedArraysOptArrArrArrValidator(_)} } -class ExampleNestedArraysOptArrResultConstraints(override val instance: ExampleNestedArraysOptArrResult) extends ValidationBase[ExampleNestedArraysOptArrResult] { - override def constraints: Seq[Constraint[ExampleNestedArraysOptArrResult]] = - Seq(maxItems(16), minItems(15)) +class ExampleNestedArraysOptArrArrArrConstraints(override val instance: Seq[String]) extends ValidationBase[Seq[String]] { + override def constraints: Seq[Constraint[Seq[String]]] = + Seq(maxItems(36), minItems(35)) } -class ExampleNestedArraysOptArrResultValidator(instance: ExampleNestedArraysOptArrResult) extends RecursiveValidator { - override val validators = new ExampleNestedArraysOptArrResultConstraints(instance) +: instance.map { new ExampleNestedArraysOptArrResultArrResultValidator(_)} +class ExampleNestedArraysOptArrArrArrValidator(instance: Seq[String]) extends RecursiveValidator { + override val validators = new ExampleNestedArraysOptArrArrArrConstraints(instance) +: instance.map { new ExampleNestedArraysOptArrArrArrArrValidator(_)} } -class ExampleNestedArraysOptArrResultArrResultConstraints(override val instance: ExampleNestedArraysOptArrResultArrResult) extends ValidationBase[ExampleNestedArraysOptArrResultArrResult] { - override def constraints: Seq[Constraint[ExampleNestedArraysOptArrResultArrResult]] = - Seq(maxItems(26), minItems(25)) +class ExampleMessagesOptConstraints(override val instance: Seq[Seq[Activity]]) extends ValidationBase[Seq[Seq[Activity]]] { + override def constraints: Seq[Constraint[Seq[Seq[Activity]]]] = + Seq(maxItems(6), minItems(5)) } -class ExampleNestedArraysOptArrResultArrResultValidator(instance: ExampleNestedArraysOptArrResultArrResult) extends RecursiveValidator { - override val validators = new ExampleNestedArraysOptArrResultArrResultConstraints(instance) +: instance.map { new ExampleNestedArraysOptArrResultArrResultArrResultValidator(_)} +class ExampleMessagesOptValidator(instance: Seq[Seq[Activity]]) extends RecursiveValidator { + override val validators = new ExampleMessagesOptConstraints(instance) +: instance.map { new ExampleMessagesOptArrValidator(_)} } -class ExampleNestedArraysOptArrResultArrResultArrResultConstraints(override val instance: ExampleNestedArraysOptArrResultArrResultArrResult) extends ValidationBase[ExampleNestedArraysOptArrResultArrResultArrResult] { - override def constraints: Seq[Constraint[ExampleNestedArraysOptArrResultArrResultArrResult]] = - Seq(maxItems(36), minItems(35)) +class ExampleMessagesOptArrConstraints(override val instance: Seq[Activity]) extends ValidationBase[Seq[Activity]] { + override def constraints: Seq[Constraint[Seq[Activity]]] = + Seq(maxItems(6), minItems(5)) } -class ExampleNestedArraysOptArrResultArrResultArrResultValidator(instance: ExampleNestedArraysOptArrResultArrResultArrResult) extends RecursiveValidator { - override val validators = new ExampleNestedArraysOptArrResultArrResultArrResultConstraints(instance) +: instance.map { new ExampleNestedArraysOptArrResultArrResultArrResultArrValidator(_)} +class ExampleMessagesOptArrValidator(instance: Seq[Activity]) extends RecursiveValidator { + override val validators = new ExampleMessagesOptArrConstraints(instance) +: instance.map { new ActivityValidator(_)} } // ----- catch all simple validators ----- // ----- composite validators ----- @@ -98,7 +98,7 @@ class GetValidator(activity: Activity) extends RecursiveValidator { ) } -class AnotherPostValidator(example: AnotherPostExample) extends RecursiveValidator { +class AnotherPostValidator(example: Option[Example]) extends RecursiveValidator { override val validators = Seq( new AnotherPostExampleValidator(example) diff --git a/play-scala-generator/src/test/resources/expected_results/validation/nested_objects_validation_yaml.scala b/play-scala-generator/src/test/resources/expected_results/validation/nested_objects_validation_yaml.scala index 8058c84e..b6e12e5b 100644 --- a/play-scala-generator/src/test/resources/expected_results/validation/nested_objects_validation_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/validation/nested_objects_validation_yaml.scala @@ -27,12 +27,12 @@ class NestedObjectsValidator(instance: NestedObjects) extends RecursiveValidator new NestedObjectsNestedValidator(instance.nested) ) } -class NestedObjectsPlainOptValidator(instance: NestedObjectsPlainOpt) extends RecursiveValidator { +class NestedObjectsPlainOptionPlainValidator(instance: NestedObjectsPlainOptionPlain) extends RecursiveValidator { override val validators = Seq( new NestedObjectsPlainSimpleValidator(instance.simple) ) } -class NestedObjectsNestedOptValidator(instance: NestedObjectsNestedOpt) extends RecursiveValidator { +class NestedObjectsNestedOptionNestedValidator(instance: NestedObjectsNestedOptionNested) extends RecursiveValidator { override val validators = Seq( new NestedObjectsNestedNested2Validator(instance.nested2) ) @@ -42,23 +42,23 @@ class NestedObjectsNestedNested2Validator(instance: NestedObjectsNestedNested2) new NestedObjectsNestedNested2Nested3Validator(instance.nested3) ) } -class NestedObjectsNestedNested2Nested3OptValidator(instance: NestedObjectsNestedNested2Nested3Opt) extends RecursiveValidator { +class NestedObjectsNestedNested2Nested3OptionNested3Validator(instance: NestedObjectsNestedNested2Nested3OptionNested3) extends RecursiveValidator { override val validators = Seq( new NestedObjectsNestedNested2Nested3BottomValidator(instance.bottom) ) } // ----- option delegating validators ----- -class NestedObjectsPlainValidator(instance: NestedObjectsPlain) extends RecursiveValidator { - override val validators = instance.toSeq.map { new NestedObjectsPlainOptValidator(_) } +class NestedObjectsPlainValidator(instance: Option[NestedObjectsPlain]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new NestedObjectsPlainOptionPlainValidator(_) } } -class NestedObjectsNestedValidator(instance: NestedObjectsNested) extends RecursiveValidator { - override val validators = instance.toSeq.map { new NestedObjectsNestedOptValidator(_) } +class NestedObjectsNestedValidator(instance: Option[NestedObjectsNested]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new NestedObjectsNestedOptionNestedValidator(_) } } -class NestedObjectsNestedNested2Nested3Validator(instance: NestedObjectsNestedNested2Nested3) extends RecursiveValidator { - override val validators = instance.toSeq.map { new NestedObjectsNestedNested2Nested3OptValidator(_) } +class NestedObjectsNestedNested2Nested3Validator(instance: Option[NestedObjectsNestedNested2Nested3]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new NestedObjectsNestedNested2Nested3OptionNested3Validator(_) } } -class NestedObjectsNestedNested2Nested3BottomValidator(instance: NestedObjectsNestedNested2Nested3Bottom) extends RecursiveValidator { +class NestedObjectsNestedNested2Nested3BottomValidator(instance: Option[String]) extends RecursiveValidator { override val validators = instance.toSeq.map { new NestedObjectsNestedNested2Nested3BottomOptValidator(_) } } // ----- array delegating validators ----- diff --git a/play-scala-generator/src/test/resources/expected_results/validation/nested_options_validation_yaml.scala b/play-scala-generator/src/test/resources/expected_results/validation/nested_options_validation_yaml.scala index ff219a71..f2f1ff29 100644 --- a/play-scala-generator/src/test/resources/expected_results/validation/nested_options_validation_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/validation/nested_options_validation_yaml.scala @@ -19,17 +19,17 @@ class BasicValidator(instance: Basic) extends RecursiveValidator { new BasicOptionalValidator(instance.optional) ) } -class BasicOptionalOptValidator(instance: BasicOptionalOpt) extends RecursiveValidator { +class BasicOptionalOptionOptionalValidator(instance: BasicOptionalOptionOptional) extends RecursiveValidator { override val validators = Seq( new BasicOptionalNested_optionalValidator(instance.nested_optional) ) } // ----- option delegating validators ----- -class BasicOptionalValidator(instance: BasicOptional) extends RecursiveValidator { - override val validators = instance.toSeq.map { new BasicOptionalOptValidator(_) } +class BasicOptionalValidator(instance: Option[BasicOptional]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new BasicOptionalOptionOptionalValidator(_) } } -class BasicOptionalNested_optionalValidator(instance: BasicOptionalNested_optional) extends RecursiveValidator { +class BasicOptionalNested_optionalValidator(instance: Option[String]) extends RecursiveValidator { override val validators = instance.toSeq.map { new BasicOptionalNested_optionalOptValidator(_) } } // ----- array delegating validators ----- diff --git a/play-scala-generator/src/test/resources/expected_results/validation/numbers_validation_yaml.scala b/play-scala-generator/src/test/resources/expected_results/validation/numbers_validation_yaml.scala index d2f160e0..d53d28c0 100644 --- a/play-scala-generator/src/test/resources/expected_results/validation/numbers_validation_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/validation/numbers_validation_yaml.scala @@ -69,23 +69,23 @@ class GetLong_requiredValidator(instance: Long) extends RecursiveValidator { // ----- complex type validators ----- // ----- option delegating validators ----- -class GetDouble_optionalValidator(instance: GetDouble_optional) extends RecursiveValidator { +class GetDouble_optionalValidator(instance: Option[Double]) extends RecursiveValidator { override val validators = instance.toSeq.map { new GetDouble_optionalOptValidator(_) } } -class GetInteger_optionalValidator(instance: GetInteger_optional) extends RecursiveValidator { +class GetInteger_optionalValidator(instance: Option[Int]) extends RecursiveValidator { override val validators = instance.toSeq.map { new GetInteger_optionalOptValidator(_) } } -class GetLong_optionalValidator(instance: GetLong_optional) extends RecursiveValidator { +class GetLong_optionalValidator(instance: Option[Long]) extends RecursiveValidator { override val validators = instance.toSeq.map { new GetLong_optionalOptValidator(_) } } -class GetFloat_optionalValidator(instance: GetFloat_optional) extends RecursiveValidator { +class GetFloat_optionalValidator(instance: Option[Float]) extends RecursiveValidator { override val validators = instance.toSeq.map { new GetFloat_optionalOptValidator(_) } } // ----- array delegating validators ----- // ----- catch all simple validators ----- // ----- composite validators ----- // ----- call validations ----- -class GetValidator(float_required: Float, double_required: Double, integer_optional: GetInteger_optional, long_required: Long, integer_required: Int, float_optional: GetFloat_optional, double_optional: GetDouble_optional, long_optional: GetLong_optional) extends RecursiveValidator { +class GetValidator(float_required: Float, double_required: Double, integer_optional: Option[Int], long_required: Long, integer_required: Int, float_optional: Option[Float], double_optional: Option[Double], long_optional: Option[Long]) extends RecursiveValidator { override val validators = Seq( new GetFloat_requiredValidator(float_required), diff --git a/play-scala-generator/src/test/resources/expected_results/validation/security_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/validation/security_api_yaml.scala index 68a96480..083c2d9b 100644 --- a/play-scala-generator/src/test/resources/expected_results/validation/security_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/validation/security_api_yaml.scala @@ -18,17 +18,17 @@ class PetsIdGetIdArrValidator(instance: String) extends RecursiveValidator { // ----- option delegating validators ----- // ----- array delegating validators ----- -class PetsIdGetIdConstraints(override val instance: PetsIdGetId) extends ValidationBase[PetsIdGetId] { - override def constraints: Seq[Constraint[PetsIdGetId]] = +class PetsIdGetIdConstraints(override val instance: ArrayWrapper[String]) extends ValidationBase[ArrayWrapper[String]] { + override def constraints: Seq[Constraint[ArrayWrapper[String]]] = Seq() } -class PetsIdGetIdValidator(instance: PetsIdGetId) extends RecursiveValidator { +class PetsIdGetIdValidator(instance: ArrayWrapper[String]) extends RecursiveValidator { override val validators = new PetsIdGetIdConstraints(instance) +: instance.map { new PetsIdGetIdArrValidator(_)} } // ----- catch all simple validators ----- // ----- composite validators ----- // ----- call validations ----- -class PetsIdGetValidator(id: PetsIdGetId) extends RecursiveValidator { +class PetsIdGetValidator(id: ArrayWrapper[String]) extends RecursiveValidator { override val validators = Seq( new PetsIdGetIdValidator(id) diff --git a/play-scala-generator/src/test/resources/expected_results/validation/simple_petstore_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/validation/simple_petstore_api_yaml.scala index 858623a9..dc1561b1 100644 --- a/play-scala-generator/src/test/resources/expected_results/validation/simple_petstore_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/validation/simple_petstore_api_yaml.scala @@ -35,13 +35,6 @@ class PetsGetTagsOptArrConstraints(override val instance: String) extends Valida class PetsGetTagsOptArrValidator(instance: String) extends RecursiveValidator { override val validators = Seq(new PetsGetTagsOptArrConstraints(instance)) } -class NewPetNameConstraints(override val instance: String) extends ValidationBase[String] { - override def constraints: Seq[Constraint[String]] = - Seq() -} -class NewPetNameValidator(instance: String) extends RecursiveValidator { - override val validators = Seq(new NewPetNameConstraints(instance)) -} class NewPetIdOptConstraints(override val instance: Long) extends ValidationBase[Long] { override def constraints: Seq[Constraint[Long]] = Seq() @@ -49,6 +42,13 @@ class NewPetIdOptConstraints(override val instance: Long) extends ValidationBase class NewPetIdOptValidator(instance: Long) extends RecursiveValidator { override val validators = Seq(new NewPetIdOptConstraints(instance)) } +class NewPetNameConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class NewPetNameValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new NewPetNameConstraints(instance)) +} class NewPetTagOptConstraints(override val instance: String) extends ValidationBase[String] { override def constraints: Seq[Constraint[String]] = Seq() @@ -59,31 +59,31 @@ class NewPetTagOptValidator(instance: String) extends RecursiveValidator { // ----- complex type validators ----- class NewPetValidator(instance: NewPet) extends RecursiveValidator { override val validators = Seq( - new NewPetNameValidator(instance.name), new NewPetIdValidator(instance.id), + new NewPetNameValidator(instance.name), new NewPetTagValidator(instance.tag) ) } // ----- option delegating validators ----- -class PetsGetLimitValidator(instance: PetsGetLimit) extends RecursiveValidator { +class PetsGetLimitValidator(instance: Option[Int]) extends RecursiveValidator { override val validators = instance.toSeq.map { new PetsGetLimitOptValidator(_) } } -class PetsGetTagsValidator(instance: PetsGetTags) extends RecursiveValidator { +class PetsGetTagsValidator(instance: Option[ArrayWrapper[String]]) extends RecursiveValidator { override val validators = instance.toSeq.map { new PetsGetTagsOptValidator(_) } } -class NewPetIdValidator(instance: NewPetId) extends RecursiveValidator { +class NewPetIdValidator(instance: Option[Long]) extends RecursiveValidator { override val validators = instance.toSeq.map { new NewPetIdOptValidator(_) } } -class NewPetTagValidator(instance: NewPetTag) extends RecursiveValidator { +class NewPetTagValidator(instance: Option[String]) extends RecursiveValidator { override val validators = instance.toSeq.map { new NewPetTagOptValidator(_) } } // ----- array delegating validators ----- -class PetsGetTagsOptConstraints(override val instance: PetsGetTagsOpt) extends ValidationBase[PetsGetTagsOpt] { - override def constraints: Seq[Constraint[PetsGetTagsOpt]] = +class PetsGetTagsOptConstraints(override val instance: ArrayWrapper[String]) extends ValidationBase[ArrayWrapper[String]] { + override def constraints: Seq[Constraint[ArrayWrapper[String]]] = Seq() } -class PetsGetTagsOptValidator(instance: PetsGetTagsOpt) extends RecursiveValidator { +class PetsGetTagsOptValidator(instance: ArrayWrapper[String]) extends RecursiveValidator { override val validators = new PetsGetTagsOptConstraints(instance) +: instance.map { new PetsGetTagsOptArrValidator(_)} } // ----- catch all simple validators ----- @@ -95,7 +95,7 @@ class PetsPostValidator(pet: NewPet) extends RecursiveValidator { ) } -class PetsGetValidator(tags: PetsGetTags, limit: PetsGetLimit) extends RecursiveValidator { +class PetsGetValidator(tags: Option[ArrayWrapper[String]], limit: Option[Int]) extends RecursiveValidator { override val validators = Seq( new PetsGetTagsValidator(tags), diff --git a/play-scala-generator/src/test/resources/expected_results/validation/split_petstore_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/validation/split_petstore_api_yaml.scala index 2b10e43e..1458c5a9 100644 --- a/play-scala-generator/src/test/resources/expected_results/validation/split_petstore_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/validation/split_petstore_api_yaml.scala @@ -5,8 +5,8 @@ import de.zalando.play.controllers._ import PlayBodyParsing._ import PlayValidations._ -import de.zalando.play.controllers.ArrayWrapper import java.time.ZonedDateTime +import de.zalando.play.controllers.ArrayWrapper // ----- constraints and wrapper validations ----- class UsersUsernameGetUsernameConstraints(override val instance: String) extends ValidationBase[String] { override def constraints: Seq[Constraint[String]] = @@ -22,12 +22,12 @@ class PetsPetIdPostStatusConstraints(override val instance: String) extends Vali class PetsPetIdPostStatusValidator(instance: String) extends RecursiveValidator { override val validators = Seq(new PetsPetIdPostStatusConstraints(instance)) } -class OrderStatusOptConstraints(override val instance: String) extends ValidationBase[String] { +class UsersLoginGetUsernameOptConstraints(override val instance: String) extends ValidationBase[String] { override def constraints: Seq[Constraint[String]] = Seq() } -class OrderStatusOptValidator(instance: String) extends RecursiveValidator { - override val validators = Seq(new OrderStatusOptConstraints(instance)) +class UsersLoginGetUsernameOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new UsersLoginGetUsernameOptConstraints(instance)) } class PetNameConstraints(override val instance: String) extends ValidationBase[String] { override def constraints: Seq[Constraint[String]] = @@ -36,26 +36,96 @@ class PetNameConstraints(override val instance: String) extends ValidationBase[S class PetNameValidator(instance: String) extends RecursiveValidator { override val validators = Seq(new PetNameConstraints(instance)) } -class OrderPetIdOptConstraints(override val instance: Long) extends ValidationBase[Long] { +class PetPhotoUrlsArrConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class PetPhotoUrlsArrValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new PetPhotoUrlsArrConstraints(instance)) +} +class PetIdOptConstraints(override val instance: Long) extends ValidationBase[Long] { override def constraints: Seq[Constraint[Long]] = Seq() } -class OrderPetIdOptValidator(instance: Long) extends RecursiveValidator { - override val validators = Seq(new OrderPetIdOptConstraints(instance)) +class PetIdOptValidator(instance: Long) extends RecursiveValidator { + override val validators = Seq(new PetIdOptConstraints(instance)) } -class PetPhotoUrlsArrConstraints(override val instance: String) extends ValidationBase[String] { +class PetStatusOptConstraints(override val instance: String) extends ValidationBase[String] { override def constraints: Seq[Constraint[String]] = Seq() } -class PetPhotoUrlsArrValidator(instance: String) extends RecursiveValidator { - override val validators = Seq(new PetPhotoUrlsArrConstraints(instance)) +class PetStatusOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new PetStatusOptConstraints(instance)) } -class OrderQuantityOptConstraints(override val instance: Int) extends ValidationBase[Int] { +class CategoryIdOptConstraints(override val instance: Long) extends ValidationBase[Long] { + override def constraints: Seq[Constraint[Long]] = + Seq() +} +class CategoryIdOptValidator(instance: Long) extends RecursiveValidator { + override val validators = Seq(new CategoryIdOptConstraints(instance)) +} +class CategoryNameOptConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class CategoryNameOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new CategoryNameOptConstraints(instance)) +} +class UserEmailOptConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class UserEmailOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new UserEmailOptConstraints(instance)) +} +class UserUsernameOptConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class UserUsernameOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new UserUsernameOptConstraints(instance)) +} +class UserUserStatusOptConstraints(override val instance: Int) extends ValidationBase[Int] { override def constraints: Seq[Constraint[Int]] = Seq() } -class OrderQuantityOptValidator(instance: Int) extends RecursiveValidator { - override val validators = Seq(new OrderQuantityOptConstraints(instance)) +class UserUserStatusOptValidator(instance: Int) extends RecursiveValidator { + override val validators = Seq(new UserUserStatusOptConstraints(instance)) +} +class UserLastNameOptConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class UserLastNameOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new UserLastNameOptConstraints(instance)) +} +class UserFirstNameOptConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class UserFirstNameOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new UserFirstNameOptConstraints(instance)) +} +class UserIdOptConstraints(override val instance: Long) extends ValidationBase[Long] { + override def constraints: Seq[Constraint[Long]] = + Seq() +} +class UserIdOptValidator(instance: Long) extends RecursiveValidator { + override val validators = Seq(new UserIdOptConstraints(instance)) +} +class UserPhoneOptConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class UserPhoneOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new UserPhoneOptConstraints(instance)) +} +class UserPasswordOptConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class UserPasswordOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new UserPasswordOptConstraints(instance)) } class OrderShipDateOptConstraints(override val instance: ZonedDateTime) extends ValidationBase[ZonedDateTime] { override def constraints: Seq[Constraint[ZonedDateTime]] = @@ -64,6 +134,27 @@ class OrderShipDateOptConstraints(override val instance: ZonedDateTime) extends class OrderShipDateOptValidator(instance: ZonedDateTime) extends RecursiveValidator { override val validators = Seq(new OrderShipDateOptConstraints(instance)) } +class OrderQuantityOptConstraints(override val instance: Int) extends ValidationBase[Int] { + override def constraints: Seq[Constraint[Int]] = + Seq() +} +class OrderQuantityOptValidator(instance: Int) extends RecursiveValidator { + override val validators = Seq(new OrderQuantityOptConstraints(instance)) +} +class OrderPetIdOptConstraints(override val instance: Long) extends ValidationBase[Long] { + override def constraints: Seq[Constraint[Long]] = + Seq() +} +class OrderPetIdOptValidator(instance: Long) extends RecursiveValidator { + override val validators = Seq(new OrderPetIdOptConstraints(instance)) +} +class OrderIdOptConstraints(override val instance: Long) extends ValidationBase[Long] { + override def constraints: Seq[Constraint[Long]] = + Seq() +} +class OrderIdOptValidator(instance: Long) extends RecursiveValidator { + override val validators = Seq(new OrderIdOptConstraints(instance)) +} class OrderCompleteOptConstraints(override val instance: Boolean) extends ValidationBase[Boolean] { override def constraints: Seq[Constraint[Boolean]] = Seq() @@ -71,6 +162,13 @@ class OrderCompleteOptConstraints(override val instance: Boolean) extends Valida class OrderCompleteOptValidator(instance: Boolean) extends RecursiveValidator { override val validators = Seq(new OrderCompleteOptConstraints(instance)) } +class OrderStatusOptConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class OrderStatusOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new OrderStatusOptConstraints(instance)) +} class PetsPetIdPostPetIdConstraints(override val instance: String) extends ValidationBase[String] { override def constraints: Seq[Constraint[String]] = Seq() @@ -142,155 +240,197 @@ class UsersUsernameDeleteUsernameValidator(instance: String) extends RecursiveVa override val validators = Seq(new UsersUsernameDeleteUsernameConstraints(instance)) } // ----- complex type validators ----- -class PetsPostBodyOptValidator(instance: Pet) extends RecursiveValidator { +class PetsPostBodyOptionPetValidator(instance: Pet) extends RecursiveValidator { override val validators = Seq( new PetNameValidator(instance.name), - new PetTagsValidator(instance.tags), new PetPhotoUrlsValidator(instance.photoUrls), - new OrderPetIdValidator(instance.id), - new OrderStatusValidator(instance.status), + new PetIdValidator(instance.id), + new PetStatusValidator(instance.status), + new PetTagsValidator(instance.tags), new PetCategoryValidator(instance.category) ) } -class PetCategoryOptValidator(instance: PetCategoryOpt) extends RecursiveValidator { +class PetCategoryOptionCategoryValidator(instance: PetCategoryOptionCategory) extends RecursiveValidator { override val validators = Seq( - new OrderPetIdValidator(instance.id), - new OrderStatusValidator(instance.name) + new CategoryIdValidator(instance.id), + new CategoryNameValidator(instance.name) ) } -class UsersUsernamePutBodyOptValidator(instance: User) extends RecursiveValidator { +class UsersUsernamePutBodyOptionUserValidator(instance: User) extends RecursiveValidator { override val validators = Seq( - new OrderStatusValidator(instance.email), - new OrderStatusValidator(instance.username), - new OrderQuantityValidator(instance.userStatus), - new OrderStatusValidator(instance.lastName), - new OrderStatusValidator(instance.firstName), - new OrderPetIdValidator(instance.id), - new OrderStatusValidator(instance.phone), - new OrderStatusValidator(instance.password) + new UserEmailValidator(instance.email), + new UserUsernameValidator(instance.username), + new UserUserStatusValidator(instance.userStatus), + new UserLastNameValidator(instance.lastName), + new UserFirstNameValidator(instance.firstName), + new UserIdValidator(instance.id), + new UserPhoneValidator(instance.phone), + new UserPasswordValidator(instance.password) ) } -class StoresOrderPostBodyOptValidator(instance: Order) extends RecursiveValidator { +class StoresOrderPostBodyOptionOrderValidator(instance: Order) extends RecursiveValidator { override val validators = Seq( new OrderShipDateValidator(instance.shipDate), new OrderQuantityValidator(instance.quantity), new OrderPetIdValidator(instance.petId), - new OrderPetIdValidator(instance.id), + new OrderIdValidator(instance.id), new OrderCompleteValidator(instance.complete), new OrderStatusValidator(instance.status) ) } // ----- option delegating validators ----- -class OrderStatusValidator(instance: OrderStatus) extends RecursiveValidator { - override val validators = instance.toSeq.map { new OrderStatusOptValidator(_) } +class UsersLoginGetUsernameValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new UsersLoginGetUsernameOptValidator(_) } +} +class PetsPostBodyValidator(instance: Option[Pet]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new PetsPostBodyOptionPetValidator(_) } +} +class PetIdValidator(instance: Option[Long]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new PetIdOptValidator(_) } } -class PetsPostBodyValidator(instance: PetsPostBody) extends RecursiveValidator { - override val validators = instance.toSeq.map { new PetsPostBodyOptValidator(_) } +class PetStatusValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new PetStatusOptValidator(_) } } -class PetTagsValidator(instance: PetTags) extends RecursiveValidator { +class PetTagsValidator(instance: Option[Seq[Category]]) extends RecursiveValidator { override val validators = instance.toSeq.map { new PetTagsOptValidator(_) } } -class OrderPetIdValidator(instance: OrderPetId) extends RecursiveValidator { - override val validators = instance.toSeq.map { new OrderPetIdOptValidator(_) } +class CategoryIdValidator(instance: Option[Long]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new CategoryIdOptValidator(_) } } -class PetCategoryValidator(instance: PetCategory) extends RecursiveValidator { - override val validators = instance.toSeq.map { new PetCategoryOptValidator(_) } +class CategoryNameValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new CategoryNameOptValidator(_) } } -class UsersUsernamePutBodyValidator(instance: UsersUsernamePutBody) extends RecursiveValidator { - override val validators = instance.toSeq.map { new UsersUsernamePutBodyOptValidator(_) } +class PetCategoryValidator(instance: Option[Category]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new PetCategoryOptionCategoryValidator(_) } } -class OrderQuantityValidator(instance: OrderQuantity) extends RecursiveValidator { - override val validators = instance.toSeq.map { new OrderQuantityOptValidator(_) } +class UsersUsernamePutBodyValidator(instance: Option[User]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new UsersUsernamePutBodyOptionUserValidator(_) } +} +class UserEmailValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new UserEmailOptValidator(_) } +} +class UserUsernameValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new UserUsernameOptValidator(_) } +} +class UserUserStatusValidator(instance: Option[Int]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new UserUserStatusOptValidator(_) } +} +class UserLastNameValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new UserLastNameOptValidator(_) } } -class StoresOrderPostBodyValidator(instance: StoresOrderPostBody) extends RecursiveValidator { - override val validators = instance.toSeq.map { new StoresOrderPostBodyOptValidator(_) } +class UserFirstNameValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new UserFirstNameOptValidator(_) } } -class OrderShipDateValidator(instance: OrderShipDate) extends RecursiveValidator { +class UserIdValidator(instance: Option[Long]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new UserIdOptValidator(_) } +} +class UserPhoneValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new UserPhoneOptValidator(_) } +} +class UserPasswordValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new UserPasswordOptValidator(_) } +} +class StoresOrderPostBodyValidator(instance: Option[Order]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new StoresOrderPostBodyOptionOrderValidator(_) } +} +class OrderShipDateValidator(instance: Option[ZonedDateTime]) extends RecursiveValidator { override val validators = instance.toSeq.map { new OrderShipDateOptValidator(_) } } -class OrderCompleteValidator(instance: OrderComplete) extends RecursiveValidator { +class OrderQuantityValidator(instance: Option[Int]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new OrderQuantityOptValidator(_) } +} +class OrderPetIdValidator(instance: Option[Long]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new OrderPetIdOptValidator(_) } +} +class OrderIdValidator(instance: Option[Long]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new OrderIdOptValidator(_) } +} +class OrderCompleteValidator(instance: Option[Boolean]) extends RecursiveValidator { override val validators = instance.toSeq.map { new OrderCompleteOptValidator(_) } } -class UsersCreateWithListPostBodyValidator(instance: UsersCreateWithListPostBody) extends RecursiveValidator { +class OrderStatusValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new OrderStatusOptValidator(_) } +} +class UsersCreateWithListPostBodyValidator(instance: Option[Seq[User]]) extends RecursiveValidator { override val validators = instance.toSeq.map { new UsersCreateWithListPostBodyOptValidator(_) } } -class PetsFindByStatusGetStatusValidator(instance: PetsFindByStatusGetStatus) extends RecursiveValidator { +class PetsFindByStatusGetStatusValidator(instance: Option[ArrayWrapper[String]]) extends RecursiveValidator { override val validators = instance.toSeq.map { new PetsFindByStatusGetStatusOptValidator(_) } } // ----- array delegating validators ----- -class PetTagsOptConstraints(override val instance: PetTagsOpt) extends ValidationBase[PetTagsOpt] { - override def constraints: Seq[Constraint[PetTagsOpt]] = +class PetPhotoUrlsConstraints(override val instance: Seq[String]) extends ValidationBase[Seq[String]] { + override def constraints: Seq[Constraint[Seq[String]]] = Seq() } -class PetTagsOptValidator(instance: PetTagsOpt) extends RecursiveValidator { - override val validators = new PetTagsOptConstraints(instance) +: instance.map { new PetCategoryOptValidator(_)} +class PetPhotoUrlsValidator(instance: Seq[String]) extends RecursiveValidator { + override val validators = new PetPhotoUrlsConstraints(instance) +: instance.map { new PetPhotoUrlsArrValidator(_)} } -class PetPhotoUrlsConstraints(override val instance: PetPhotoUrls) extends ValidationBase[PetPhotoUrls] { - override def constraints: Seq[Constraint[PetPhotoUrls]] = +class PetTagsOptConstraints(override val instance: Seq[Category]) extends ValidationBase[Seq[Category]] { + override def constraints: Seq[Constraint[Seq[Category]]] = Seq() } -class PetPhotoUrlsValidator(instance: PetPhotoUrls) extends RecursiveValidator { - override val validators = new PetPhotoUrlsConstraints(instance) +: instance.map { new PetPhotoUrlsArrValidator(_)} +class PetTagsOptValidator(instance: Seq[Category]) extends RecursiveValidator { + override val validators = new PetTagsOptConstraints(instance) +: instance.map { new PetCategoryOptionCategoryValidator(_)} } -class UsersCreateWithListPostBodyOptConstraints(override val instance: UsersCreateWithListPostBodyOpt) extends ValidationBase[UsersCreateWithListPostBodyOpt] { - override def constraints: Seq[Constraint[UsersCreateWithListPostBodyOpt]] = +class UsersCreateWithListPostBodyOptConstraints(override val instance: Seq[User]) extends ValidationBase[Seq[User]] { + override def constraints: Seq[Constraint[Seq[User]]] = Seq() } -class UsersCreateWithListPostBodyOptValidator(instance: UsersCreateWithListPostBodyOpt) extends RecursiveValidator { - override val validators = new UsersCreateWithListPostBodyOptConstraints(instance) +: instance.map { new UsersUsernamePutBodyOptValidator(_)} +class UsersCreateWithListPostBodyOptValidator(instance: Seq[User]) extends RecursiveValidator { + override val validators = new UsersCreateWithListPostBodyOptConstraints(instance) +: instance.map { new UsersUsernamePutBodyOptionUserValidator(_)} } -class PetsFindByStatusGetStatusOptConstraints(override val instance: PetsFindByStatusGetStatusOpt) extends ValidationBase[PetsFindByStatusGetStatusOpt] { - override def constraints: Seq[Constraint[PetsFindByStatusGetStatusOpt]] = +class PetsFindByStatusGetStatusOptConstraints(override val instance: ArrayWrapper[String]) extends ValidationBase[ArrayWrapper[String]] { + override def constraints: Seq[Constraint[ArrayWrapper[String]]] = Seq() } -class PetsFindByStatusGetStatusOptValidator(instance: PetsFindByStatusGetStatusOpt) extends RecursiveValidator { +class PetsFindByStatusGetStatusOptValidator(instance: ArrayWrapper[String]) extends RecursiveValidator { override val validators = new PetsFindByStatusGetStatusOptConstraints(instance) +: instance.map { new PetsFindByStatusGetStatusOptArrValidator(_)} } // ----- catch all simple validators ----- // ----- composite validators ----- // ----- call validations ----- -class UsersPostValidator(body: UsersUsernamePutBody) extends RecursiveValidator { +class UsersPostValidator(body: Option[User]) extends RecursiveValidator { override val validators = Seq( new UsersUsernamePutBodyValidator(body) ) } -class PetsPostValidator(body: PetsPostBody) extends RecursiveValidator { +class PetsPostValidator(body: Option[Pet]) extends RecursiveValidator { override val validators = Seq( new PetsPostBodyValidator(body) ) } -class PetsPutValidator(body: PetsPostBody) extends RecursiveValidator { +class PetsPutValidator(body: Option[Pet]) extends RecursiveValidator { override val validators = Seq( new PetsPostBodyValidator(body) ) } -class PetsFindByStatusGetValidator(status: PetsFindByStatusGetStatus) extends RecursiveValidator { +class PetsFindByStatusGetValidator(status: Option[ArrayWrapper[String]]) extends RecursiveValidator { override val validators = Seq( new PetsFindByStatusGetStatusValidator(status) ) } -class StoresOrderPostValidator(body: StoresOrderPostBody) extends RecursiveValidator { +class StoresOrderPostValidator(body: Option[Order]) extends RecursiveValidator { override val validators = Seq( new StoresOrderPostBodyValidator(body) ) } -class UsersCreateWithArrayPostValidator(body: UsersCreateWithListPostBody) extends RecursiveValidator { +class UsersCreateWithArrayPostValidator(body: Option[Seq[User]]) extends RecursiveValidator { override val validators = Seq( new UsersCreateWithListPostBodyValidator(body) ) } -class UsersLoginGetValidator(username: OrderStatus, password: OrderStatus) extends RecursiveValidator { +class UsersLoginGetValidator(username: Option[String], password: Option[String]) extends RecursiveValidator { override val validators = Seq( - new OrderStatusValidator(username), + new UsersLoginGetUsernameValidator(username), - new OrderStatusValidator(password) + new UsersLoginGetUsernameValidator(password) ) } @@ -312,7 +452,7 @@ class UsersUsernameGetValidator(username: String) extends RecursiveValidator { ) } -class UsersCreateWithListPostValidator(body: UsersCreateWithListPostBody) extends RecursiveValidator { +class UsersCreateWithListPostValidator(body: Option[Seq[User]]) extends RecursiveValidator { override val validators = Seq( new UsersCreateWithListPostBodyValidator(body) @@ -348,13 +488,13 @@ class PetsPetIdDeleteValidator(api_key: String, petId: Long) extends RecursiveVa ) } -class PetsFindByTagsGetValidator(tags: PetsFindByStatusGetStatus) extends RecursiveValidator { +class PetsFindByTagsGetValidator(tags: Option[ArrayWrapper[String]]) extends RecursiveValidator { override val validators = Seq( new PetsFindByStatusGetStatusValidator(tags) ) } -class UsersUsernamePutValidator(username: String, body: UsersUsernamePutBody) extends RecursiveValidator { +class UsersUsernamePutValidator(username: String, body: Option[User]) extends RecursiveValidator { override val validators = Seq( new UsersUsernamePutUsernameValidator(username), diff --git a/play-scala-generator/src/test/resources/expected_results/validation/string_formats_validation_yaml.scala b/play-scala-generator/src/test/resources/expected_results/validation/string_formats_validation_yaml.scala index febb3daa..8afcc77e 100644 --- a/play-scala-generator/src/test/resources/expected_results/validation/string_formats_validation_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/validation/string_formats_validation_yaml.scala @@ -5,10 +5,10 @@ import de.zalando.play.controllers._ import PlayBodyParsing._ import PlayValidations._ +import java.time.ZonedDateTime import java.time.LocalDate import de.zalando.play.controllers.BinaryString import BinaryString._ -import java.time.ZonedDateTime import de.zalando.play.controllers.Base64String import Base64String._ // ----- constraints and wrapper validations ----- @@ -99,29 +99,29 @@ class StringPostBase64optionalOptValidator(instance: Base64String) extends Recur // ----- complex type validators ----- // ----- option delegating validators ----- -class StringPostString_optionalValidator(instance: StringPostString_optional) extends RecursiveValidator { +class StringPostString_optionalValidator(instance: Option[String]) extends RecursiveValidator { override val validators = instance.toSeq.map { new StringPostString_optionalOptValidator(_) } } -class StringPostPassword_optionalValidator(instance: StringPostPassword_optional) extends RecursiveValidator { +class StringPostPassword_optionalValidator(instance: Option[String]) extends RecursiveValidator { override val validators = instance.toSeq.map { new StringPostPassword_optionalOptValidator(_) } } -class StringPostDate_optionalValidator(instance: StringPostDate_optional) extends RecursiveValidator { +class StringPostDate_optionalValidator(instance: Option[LocalDate]) extends RecursiveValidator { override val validators = instance.toSeq.map { new StringPostDate_optionalOptValidator(_) } } -class StringPostBinary_optionalValidator(instance: StringPostBinary_optional) extends RecursiveValidator { +class StringPostBinary_optionalValidator(instance: Option[BinaryString]) extends RecursiveValidator { override val validators = instance.toSeq.map { new StringPostBinary_optionalOptValidator(_) } } -class StringPostDate_time_optionalValidator(instance: StringPostDate_time_optional) extends RecursiveValidator { +class StringPostDate_time_optionalValidator(instance: Option[ZonedDateTime]) extends RecursiveValidator { override val validators = instance.toSeq.map { new StringPostDate_time_optionalOptValidator(_) } } -class StringPostBase64optionalValidator(instance: StringPostBase64optional) extends RecursiveValidator { +class StringPostBase64optionalValidator(instance: Option[Base64String]) extends RecursiveValidator { override val validators = instance.toSeq.map { new StringPostBase64optionalOptValidator(_) } } // ----- array delegating validators ----- // ----- catch all simple validators ----- // ----- composite validators ----- // ----- call validations ----- -class StringPostValidator(string_required: String, password_optional: StringPostPassword_optional, date_required: LocalDate, binary_optional: StringPostBinary_optional, date_optional: StringPostDate_optional, base64required: Base64String, base64optional: StringPostBase64optional, string_optional: StringPostString_optional, date_time_required: ZonedDateTime, password_required: String, date_time_optional: StringPostDate_time_optional) extends RecursiveValidator { +class StringPostValidator(string_required: String, password_optional: Option[String], date_required: LocalDate, binary_optional: Option[BinaryString], date_optional: Option[LocalDate], base64required: Base64String, base64optional: Option[Base64String], string_optional: Option[String], date_time_required: ZonedDateTime, password_required: String, date_time_optional: Option[ZonedDateTime]) extends RecursiveValidator { override val validators = Seq( new StringPostString_requiredValidator(string_required), diff --git a/play-scala-generator/src/test/resources/expected_results/validation/string_formats_yaml.scala b/play-scala-generator/src/test/resources/expected_results/validation/string_formats_yaml.scala index c6e1e979..69006220 100644 --- a/play-scala-generator/src/test/resources/expected_results/validation/string_formats_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/validation/string_formats_yaml.scala @@ -7,11 +7,11 @@ import PlayValidations._ import de.zalando.play.controllers.Base64String import Base64String._ +import de.zalando.play.controllers.BinaryString +import BinaryString._ import java.time.ZonedDateTime import java.util.UUID import java.time.LocalDate -import de.zalando.play.controllers.BinaryString -import BinaryString._ // ----- constraints and wrapper validations ----- class GetBase64OptConstraints(override val instance: String) extends ValidationBase[String] { override def constraints: Seq[Constraint[String]] = @@ -51,23 +51,23 @@ class GetDateOptValidator(instance: LocalDate) extends RecursiveValidator { // ----- complex type validators ----- // ----- option delegating validators ----- -class GetBase64Validator(instance: GetBase64) extends RecursiveValidator { +class GetBase64Validator(instance: Option[Base64String]) extends RecursiveValidator { override val validators = instance.toSeq.map { new GetBase64OptValidator(_) } } -class GetDate_timeValidator(instance: GetDate_time) extends RecursiveValidator { +class GetDate_timeValidator(instance: Option[ZonedDateTime]) extends RecursiveValidator { override val validators = instance.toSeq.map { new GetDate_timeOptValidator(_) } } -class GetUuidValidator(instance: GetUuid) extends RecursiveValidator { +class GetUuidValidator(instance: Option[UUID]) extends RecursiveValidator { override val validators = instance.toSeq.map { new GetUuidOptValidator(_) } } -class GetDateValidator(instance: GetDate) extends RecursiveValidator { +class GetDateValidator(instance: Option[LocalDate]) extends RecursiveValidator { override val validators = instance.toSeq.map { new GetDateOptValidator(_) } } // ----- array delegating validators ----- // ----- catch all simple validators ----- // ----- composite validators ----- // ----- call validations ----- -class GetValidator(date_time: GetDate_time, date: GetDate, base64: GetBase64, uuid: GetUuid, petId: BinaryString) extends RecursiveValidator { +class GetValidator(date_time: Option[ZonedDateTime], date: Option[LocalDate], base64: Option[Base64String], uuid: Option[UUID], petId: BinaryString) extends RecursiveValidator { override val validators = Seq( new GetDate_timeValidator(date_time), diff --git a/play-scala-generator/src/test/resources/expected_results/validation/type_deduplication_yaml.scala b/play-scala-generator/src/test/resources/expected_results/validation/type_deduplication_yaml.scala index b2bc683f..769dddb3 100644 --- a/play-scala-generator/src/test/resources/expected_results/validation/type_deduplication_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/validation/type_deduplication_yaml.scala @@ -63,12 +63,26 @@ class PlantsGetLimitOptConstraints(override val instance: BigInt) extends Valida class PlantsGetLimitOptValidator(instance: BigInt) extends RecursiveValidator { override val validators = Seq(new PlantsGetLimitOptConstraints(instance)) } -class PlantPlant_idOptConstraints(override val instance: String) extends ValidationBase[String] { +class SigninDataUsernameOptConstraints(override val instance: String) extends ValidationBase[String] { override def constraints: Seq[Constraint[String]] = Seq() } -class PlantPlant_idOptValidator(instance: String) extends RecursiveValidator { - override val validators = Seq(new PlantPlant_idOptConstraints(instance)) +class SigninDataUsernameOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new SigninDataUsernameOptConstraints(instance)) +} +class SigninDataPasswordOptConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class SigninDataPasswordOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new SigninDataPasswordOptConstraints(instance)) +} +class SigninDataEmailOptConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class SigninDataEmailOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new SigninDataEmailOptConstraints(instance)) } class PlantsPlant_idPicturesPicture_idPutPlant_idConstraints(override val instance: String) extends ValidationBase[String] { override def constraints: Seq[Constraint[String]] = @@ -91,6 +105,20 @@ class PlantsPlant_idDeletePlant_idConstraints(override val instance: String) ext class PlantsPlant_idDeletePlant_idValidator(instance: String) extends RecursiveValidator { override val validators = Seq(new PlantsPlant_idDeletePlant_idConstraints(instance)) } +class WaterNeedsAmountOptConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class WaterNeedsAmountOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new WaterNeedsAmountOptConstraints(instance)) +} +class WaterNeedsPeriodOptConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class WaterNeedsPeriodOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new WaterNeedsPeriodOptConstraints(instance)) +} class PlantsPlant_idSunlight_needsGetPlant_idConstraints(override val instance: String) extends ValidationBase[String] { override def constraints: Seq[Constraint[String]] = Seq() @@ -98,6 +126,48 @@ class PlantsPlant_idSunlight_needsGetPlant_idConstraints(override val instance: class PlantsPlant_idSunlight_needsGetPlant_idValidator(instance: String) extends RecursiveValidator { override val validators = Seq(new PlantsPlant_idSunlight_needsGetPlant_idConstraints(instance)) } +class PlantSpeciesOptConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class PlantSpeciesOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new PlantSpeciesOptConstraints(instance)) +} +class PlantNameOptConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class PlantNameOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new PlantNameOptConstraints(instance)) +} +class PlantDescriptionOptConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class PlantDescriptionOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new PlantDescriptionOptConstraints(instance)) +} +class PlantOwner_idOptConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class PlantOwner_idOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new PlantOwner_idOptConstraints(instance)) +} +class PlantPlant_idOptConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class PlantPlant_idOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new PlantPlant_idOptConstraints(instance)) +} +class PlantGodparentOptConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class PlantGodparentOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new PlantGodparentOptConstraints(instance)) +} class PlantsPlant_idGetPlant_idConstraints(override val instance: String) extends ValidationBase[String] { override def constraints: Seq[Constraint[String]] = Seq() @@ -112,6 +182,27 @@ class UsersUser_idPutUser_idConstraints(override val instance: String) extends V class UsersUser_idPutUser_idValidator(instance: String) extends RecursiveValidator { override val validators = Seq(new UsersUser_idPutUser_idConstraints(instance)) } +class UserUser_idOptConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class UserUser_idOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new UserUser_idOptConstraints(instance)) +} +class UserNameOptConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class UserNameOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new UserNameOptConstraints(instance)) +} +class UserArea_idOptConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class UserArea_idOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new UserArea_idOptConstraints(instance)) +} class AreasArea_idGetArea_idConstraints(override val instance: String) extends ValidationBase[String] { override def constraints: Seq[Constraint[String]] = Seq() @@ -196,6 +287,20 @@ class UsersUser_idPicturePutUser_idConstraints(override val instance: String) ex class UsersUser_idPicturePutUser_idValidator(instance: String) extends RecursiveValidator { override val validators = Seq(new UsersUser_idPicturePutUser_idConstraints(instance)) } +class LocationArea_idOptConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class LocationArea_idOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new LocationArea_idOptConstraints(instance)) +} +class LocationDetailsOptConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class LocationDetailsOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new LocationDetailsOptConstraints(instance)) +} class PlantsPlant_idSunlight_needsPutPlant_idConstraints(override val instance: String) extends ValidationBase[String] { override def constraints: Seq[Constraint[String]] = Seq() @@ -238,6 +343,13 @@ class PlantsPlant_idPicturesPicture_idPutPicture_idConstraints(override val inst class PlantsPlant_idPicturesPicture_idPutPicture_idValidator(instance: String) extends RecursiveValidator { override val validators = Seq(new PlantsPlant_idPicturesPicture_idPutPicture_idConstraints(instance)) } +class SunlightNeedsAmountOptConstraints(override val instance: String) extends ValidationBase[String] { + override def constraints: Seq[Constraint[String]] = + Seq() +} +class SunlightNeedsAmountOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new SunlightNeedsAmountOptConstraints(instance)) +} class PlantsPlant_idWater_needsGetPlant_idConstraints(override val instance: String) extends ValidationBase[String] { override def constraints: Seq[Constraint[String]] = Seq() @@ -262,59 +374,107 @@ class UsersUser_idGetUser_idValidator(instance: String) extends RecursiveValidat // ----- complex type validators ----- class SigninDataValidator(instance: SigninData) extends RecursiveValidator { override val validators = Seq( - new PlantPlant_idValidator(instance.username), - new PlantPlant_idValidator(instance.password), - new PlantPlant_idValidator(instance.email) + new SigninDataUsernameValidator(instance.username), + new SigninDataPasswordValidator(instance.password), + new SigninDataEmailValidator(instance.email) ) } class WaterNeedsValidator(instance: WaterNeeds) extends RecursiveValidator { override val validators = Seq( - new PlantPlant_idValidator(instance.amount), - new PlantPlant_idValidator(instance.period) + new WaterNeedsAmountValidator(instance.amount), + new WaterNeedsPeriodValidator(instance.period) ) } class PlantValidator(instance: Plant) extends RecursiveValidator { override val validators = Seq( - new PlantPlant_idValidator(instance.species), - new PlantPlant_idValidator(instance.name), - new PlantPlant_idValidator(instance.description), - new PlantPlant_idValidator(instance.owner_id), + new PlantSpeciesValidator(instance.species), + new PlantNameValidator(instance.name), + new PlantDescriptionValidator(instance.description), + new PlantOwner_idValidator(instance.owner_id), new PlantPlant_idValidator(instance.plant_id), - new PlantPlant_idValidator(instance.godparent) + new PlantGodparentValidator(instance.godparent) ) } class UserValidator(instance: User) extends RecursiveValidator { override val validators = Seq( - new PlantPlant_idValidator(instance.user_id), - new PlantPlant_idValidator(instance.name), - new PlantPlant_idValidator(instance.area_id) + new UserUser_idValidator(instance.user_id), + new UserNameValidator(instance.name), + new UserArea_idValidator(instance.area_id) ) } class LocationValidator(instance: Location) extends RecursiveValidator { override val validators = Seq( - new PlantPlant_idValidator(instance.area_id), - new PlantPlant_idValidator(instance.details) + new LocationArea_idValidator(instance.area_id), + new LocationDetailsValidator(instance.details) ) } class SunlightNeedsValidator(instance: SunlightNeeds) extends RecursiveValidator { override val validators = Seq( - new PlantPlant_idValidator(instance.amount) + new SunlightNeedsAmountValidator(instance.amount) ) } // ----- option delegating validators ----- -class UsersGetLimitValidator(instance: UsersGetLimit) extends RecursiveValidator { +class UsersGetLimitValidator(instance: Option[BigInt]) extends RecursiveValidator { override val validators = instance.toSeq.map { new UsersGetLimitOptValidator(_) } } -class PlantsGetLimitValidator(instance: PlantsGetLimit) extends RecursiveValidator { +class PlantsGetLimitValidator(instance: Option[BigInt]) extends RecursiveValidator { override val validators = instance.toSeq.map { new PlantsGetLimitOptValidator(_) } } -class PlantPlant_idValidator(instance: PlantPlant_id) extends RecursiveValidator { +class SigninDataUsernameValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new SigninDataUsernameOptValidator(_) } +} +class SigninDataPasswordValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new SigninDataPasswordOptValidator(_) } +} +class SigninDataEmailValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new SigninDataEmailOptValidator(_) } +} +class WaterNeedsAmountValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new WaterNeedsAmountOptValidator(_) } +} +class WaterNeedsPeriodValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new WaterNeedsPeriodOptValidator(_) } +} +class PlantSpeciesValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new PlantSpeciesOptValidator(_) } +} +class PlantNameValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new PlantNameOptValidator(_) } +} +class PlantDescriptionValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new PlantDescriptionOptValidator(_) } +} +class PlantOwner_idValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new PlantOwner_idOptValidator(_) } +} +class PlantPlant_idValidator(instance: Option[String]) extends RecursiveValidator { override val validators = instance.toSeq.map { new PlantPlant_idOptValidator(_) } } -class PlantsGetOffsetValidator(instance: PlantsGetOffset) extends RecursiveValidator { +class PlantGodparentValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new PlantGodparentOptValidator(_) } +} +class UserUser_idValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new UserUser_idOptValidator(_) } +} +class UserNameValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new UserNameOptValidator(_) } +} +class UserArea_idValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new UserArea_idOptValidator(_) } +} +class PlantsGetOffsetValidator(instance: Option[BigInt]) extends RecursiveValidator { override val validators = instance.toSeq.map { new PlantsGetOffsetOptValidator(_) } } +class LocationArea_idValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new LocationArea_idOptValidator(_) } +} +class LocationDetailsValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new LocationDetailsOptValidator(_) } +} +class SunlightNeedsAmountValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new SunlightNeedsAmountOptValidator(_) } +} // ----- array delegating validators ----- // ----- catch all simple validators ----- // ----- composite validators ----- @@ -375,7 +535,7 @@ class PlantsPlant_idLocationGetValidator(plant_id: String) extends RecursiveVali ) } -class UserUser_idPlantsGetValidator(user_id: String, limit: UsersGetLimit, offset: UsersGetLimit) extends RecursiveValidator { +class UserUser_idPlantsGetValidator(user_id: String, limit: Option[BigInt], offset: Option[BigInt]) extends RecursiveValidator { override val validators = Seq( new UserUser_idPlantsGetUser_idValidator(user_id), @@ -399,7 +559,7 @@ class PlantsPlant_idLocationPutValidator(plant_id: String, location: Location) e ) } -class PlantsPlant_idWateringsGetValidator(plant_id: String, limit: UsersGetLimit, offset: UsersGetLimit) extends RecursiveValidator { +class PlantsPlant_idWateringsGetValidator(plant_id: String, limit: Option[BigInt], offset: Option[BigInt]) extends RecursiveValidator { override val validators = Seq( new PlantsPlant_idWateringsGetPlant_idValidator(plant_id), @@ -417,7 +577,7 @@ class PlantsPlant_idWateringsWatering_idPutValidator(plant_id: String, watering_ ) } -class UsersGetValidator(limit: UsersGetLimit, offset: UsersGetLimit) extends RecursiveValidator { +class UsersGetValidator(limit: Option[BigInt], offset: Option[BigInt]) extends RecursiveValidator { override val validators = Seq( new UsersGetLimitValidator(limit), @@ -453,7 +613,7 @@ class AreasArea_idPutValidator(area_id: String) extends RecursiveValidator { ) } -class PlantsGetValidator(limit: PlantsGetLimit, offset: PlantsGetOffset) extends RecursiveValidator { +class PlantsGetValidator(limit: Option[BigInt], offset: Option[BigInt]) extends RecursiveValidator { override val validators = Seq( new PlantsGetLimitValidator(limit), @@ -487,7 +647,7 @@ class PlantsPlant_idPutValidator(plant_id: String, plant: Plant) extends Recursi ) } -class AreasGetValidator(limit: UsersGetLimit, offset: UsersGetLimit) extends RecursiveValidator { +class AreasGetValidator(limit: Option[BigInt], offset: Option[BigInt]) extends RecursiveValidator { override val validators = Seq( new UsersGetLimitValidator(limit), @@ -535,7 +695,7 @@ class AreasArea_idGetValidator(area_id: String) extends RecursiveValidator { ) } -class PlantsPlant_idPicturesGetValidator(plant_id: String, limit: UsersGetLimit, offset: UsersGetLimit) extends RecursiveValidator { +class PlantsPlant_idPicturesGetValidator(plant_id: String, limit: Option[BigInt], offset: Option[BigInt]) extends RecursiveValidator { override val validators = Seq( new PlantsPlant_idPicturesGetPlant_idValidator(plant_id), diff --git a/play-scala-generator/src/test/resources/expected_results/validation/uber_api_yaml.scala b/play-scala-generator/src/test/resources/expected_results/validation/uber_api_yaml.scala index 21e43161..829f6ffc 100644 --- a/play-scala-generator/src/test/resources/expected_results/validation/uber_api_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/validation/uber_api_yaml.scala @@ -5,8 +5,8 @@ import de.zalando.play.controllers._ import PlayBodyParsing._ import PlayValidations._ -import java.util.UUID import scala.math.BigDecimal +import java.util.UUID // ----- constraints and wrapper validations ----- class EstimatesPriceGetEnd_latitudeConstraints(override val instance: Double) extends ValidationBase[Double] { override def constraints: Seq[Constraint[Double]] = @@ -36,12 +36,12 @@ class EstimatesTimeGetStart_longitudeConstraints(override val instance: Double) class EstimatesTimeGetStart_longitudeValidator(instance: Double) extends RecursiveValidator { override val validators = Seq(new EstimatesTimeGetStart_longitudeConstraints(instance)) } -class ErrorCodeOptConstraints(override val instance: Int) extends ValidationBase[Int] { +class HistoryGetLimitOptConstraints(override val instance: Int) extends ValidationBase[Int] { override def constraints: Seq[Constraint[Int]] = Seq() } -class ErrorCodeOptValidator(instance: Int) extends RecursiveValidator { - override val validators = Seq(new ErrorCodeOptConstraints(instance)) +class HistoryGetLimitOptValidator(instance: Int) extends RecursiveValidator { + override val validators = Seq(new HistoryGetLimitOptConstraints(instance)) } class EstimatesTimeGetCustomer_uuidOptConstraints(override val instance: UUID) extends ValidationBase[UUID] { override def constraints: Seq[Constraint[UUID]] = @@ -50,12 +50,12 @@ class EstimatesTimeGetCustomer_uuidOptConstraints(override val instance: UUID) e class EstimatesTimeGetCustomer_uuidOptValidator(instance: UUID) extends RecursiveValidator { override val validators = Seq(new EstimatesTimeGetCustomer_uuidOptConstraints(instance)) } -class ProfilePictureOptConstraints(override val instance: String) extends ValidationBase[String] { +class EstimatesTimeGetProduct_idOptConstraints(override val instance: String) extends ValidationBase[String] { override def constraints: Seq[Constraint[String]] = Seq() } -class ProfilePictureOptValidator(instance: String) extends RecursiveValidator { - override val validators = Seq(new ProfilePictureOptConstraints(instance)) +class EstimatesTimeGetProduct_idOptValidator(instance: String) extends RecursiveValidator { + override val validators = Seq(new EstimatesTimeGetProduct_idOptConstraints(instance)) } class ProductsGetLatitudeConstraints(override val instance: Double) extends ValidationBase[Double] { override def constraints: Seq[Constraint[Double]] = @@ -88,28 +88,28 @@ class EstimatesPriceGetStart_longitudeValidator(instance: Double) extends Recurs // ----- complex type validators ----- // ----- option delegating validators ----- -class ErrorCodeValidator(instance: ErrorCode) extends RecursiveValidator { - override val validators = instance.toSeq.map { new ErrorCodeOptValidator(_) } +class HistoryGetLimitValidator(instance: Option[Int]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new HistoryGetLimitOptValidator(_) } } -class EstimatesTimeGetCustomer_uuidValidator(instance: EstimatesTimeGetCustomer_uuid) extends RecursiveValidator { +class EstimatesTimeGetCustomer_uuidValidator(instance: Option[UUID]) extends RecursiveValidator { override val validators = instance.toSeq.map { new EstimatesTimeGetCustomer_uuidOptValidator(_) } } -class ProfilePictureValidator(instance: ProfilePicture) extends RecursiveValidator { - override val validators = instance.toSeq.map { new ProfilePictureOptValidator(_) } +class EstimatesTimeGetProduct_idValidator(instance: Option[String]) extends RecursiveValidator { + override val validators = instance.toSeq.map { new EstimatesTimeGetProduct_idOptValidator(_) } } // ----- array delegating validators ----- // ----- catch all simple validators ----- // ----- composite validators ----- // ----- call validations ----- -class HistoryGetValidator(offset: ErrorCode, limit: ErrorCode) extends RecursiveValidator { +class HistoryGetValidator(offset: Option[Int], limit: Option[Int]) extends RecursiveValidator { override val validators = Seq( - new ErrorCodeValidator(offset), + new HistoryGetLimitValidator(offset), - new ErrorCodeValidator(limit) + new HistoryGetLimitValidator(limit) ) } -class EstimatesTimeGetValidator(start_latitude: Double, start_longitude: Double, customer_uuid: EstimatesTimeGetCustomer_uuid, product_id: ProfilePicture) extends RecursiveValidator { +class EstimatesTimeGetValidator(start_latitude: Double, start_longitude: Double, customer_uuid: Option[UUID], product_id: Option[String]) extends RecursiveValidator { override val validators = Seq( new EstimatesTimeGetStart_latitudeValidator(start_latitude), @@ -117,7 +117,7 @@ class EstimatesTimeGetValidator(start_latitude: Double, start_longitude: Double, new EstimatesTimeGetCustomer_uuidValidator(customer_uuid), - new ProfilePictureValidator(product_id) + new EstimatesTimeGetProduct_idValidator(product_id) ) } diff --git a/play-scala-generator/src/test/resources/expected_results/validation/wrong_field_name_yaml.scala b/play-scala-generator/src/test/resources/expected_results/validation/wrong_field_name_yaml.scala index 0f5e7626..f123bb64 100644 --- a/play-scala-generator/src/test/resources/expected_results/validation/wrong_field_name_yaml.scala +++ b/play-scala-generator/src/test/resources/expected_results/validation/wrong_field_name_yaml.scala @@ -31,14 +31,14 @@ class GetOptCodesOptValidator(instance: GetOptCodesOpt) extends RecursiveValidat } // ----- option delegating validators ----- -class GetOptCodesValidator(instance: GetOptCodes) extends RecursiveValidator { +class GetOptCodesValidator(instance: Option[GetOptCodesOpt]) extends RecursiveValidator { override val validators = instance.toSeq.map { new GetOptCodesOptValidator(_) } } // ----- array delegating validators ----- // ----- catch all simple validators ----- // ----- composite validators ----- // ----- call validations ----- -class GetValidator(optCodes: GetOptCodes, codes: GetCodes) extends RecursiveValidator { +class GetValidator(optCodes: Option[GetOptCodesOpt], codes: GetCodes) extends RecursiveValidator { override val validators = Seq( new GetOptCodesValidator(optCodes), diff --git a/play-scala-generator/src/test/scala/de/zalando/ExpectedResults.scala b/play-scala-generator/src/test/scala/de/zalando/ExpectedResults.scala index 0709764d..6db6dd22 100644 --- a/play-scala-generator/src/test/scala/de/zalando/ExpectedResults.scala +++ b/play-scala-generator/src/test/scala/de/zalando/ExpectedResults.scala @@ -18,6 +18,7 @@ trait ExpectedResults { nested_arrays_yaml, nested_options_yaml, basic_extension_yaml, + enum_yaml, expanded_polymorphism_yaml, nested_objects_yaml, options_yaml, @@ -30,6 +31,7 @@ trait ExpectedResults { cross_spec_references_yaml, echo_api_yaml, error_in_array_yaml, + foodpanda_yaml, form_data_yaml, full_petstore_api_yaml, hackweek_yaml, diff --git a/play-scala-generator/src/test/scala/de/zalando/apifirst/generators/ScalaGeneratorsTest.scala b/play-scala-generator/src/test/scala/de/zalando/apifirst/generators/ScalaGeneratorsTest.scala index 52f9231e..56a9c11e 100644 --- a/play-scala-generator/src/test/scala/de/zalando/apifirst/generators/ScalaGeneratorsTest.scala +++ b/play-scala-generator/src/test/scala/de/zalando/apifirst/generators/ScalaGeneratorsTest.scala @@ -31,16 +31,18 @@ class ScalaGeneratorsTest extends FunSpec with MustMatchers { val result = new ScalaGenerator(model).generateGenerators("test.yaml", "test.yaml") result mustBeAs """package test.yaml + | |import org.scalacheck.Gen |import org.scalacheck.Arbitrary |import play.api.libs.json.scalacheck.JsValueGenerators |import Arbitrary._ + | |object Generators extends JsValueGenerators { - | def createOptiGenerator = _generate(OptiGenerator) - | def createStriGenerator = _generate(StriGenerator) - | def OptiGenerator = Gen.option(arbitrary[Long]) - | def StriGenerator = Gen.option(arbitrary[String]) - | def _generate[T](gen: Gen[T]) = (count: Int) => for (i <- 1 to count) yield gen.sample + | def createOptionLongGenerator = _generate(OptionLongGenerator) + | def createOptionStringGenerator = _generate(OptionStringGenerator) + | def OptionLongGenerator = Gen.option(arbitrary[Long]) + | def OptionStringGenerator = Gen.option(arbitrary[String]) + | def _generate[T](gen: Gen[T]) = (count: Int) => for (i <- 1 to count) yield gen.sample |}""" } @@ -49,18 +51,21 @@ class ScalaGeneratorsTest extends FunSpec with MustMatchers { "definitions" / "Option" -> Opt(Lng(None), None), "definitions" / "String" -> Opt(Str(None, None), None) ) - new ScalaGenerator(model).generateGenerators("overloaded.yaml", "overloaded.yaml") mustBeAs + val result = new ScalaGenerator(model).generateGenerators("overloaded.yaml", "overloaded.yaml") + result mustBeAs """package overloaded.yaml + | |import org.scalacheck.Gen |import org.scalacheck.Arbitrary |import play.api.libs.json.scalacheck.JsValueGenerators |import Arbitrary._ + | |object Generators extends JsValueGenerators { - | def createOptionGenerator = _generate(OptionGenerator) - | def createStringGenerator = _generate(StringGenerator) - | def OptionGenerator = Gen.option(arbitrary[Long]) - | def StringGenerator = Gen.option(arbitrary[String]) - | def _generate[T](gen: Gen[T]) = (count: Int) => for (i <- 1 to count) yield gen.sample + | def createOptionLongGenerator = _generate(OptionLongGenerator) + | def createOptionStringGenerator = _generate(OptionStringGenerator) + | def OptionLongGenerator = Gen.option(arbitrary[Long]) + | def OptionStringGenerator = Gen.option(arbitrary[String]) + | def _generate[T](gen: Gen[T]) = (count: Int) => for (i <- 1 to count) yield gen.sample |}""" } @@ -70,21 +75,24 @@ class ScalaGeneratorsTest extends FunSpec with MustMatchers { "definitions" / "Dbl" -> Arr(Dbl(None), None, "tsv"), "definitions" / "Flt" -> Arr(Flt(None), None, "ssv") ) - new ScalaGenerator(model).generateGenerators("test.yaml", "test.yaml") mustBeAs + val result = new ScalaGenerator(model).generateGenerators("test.yaml", "test.yaml") + result mustBeAs """package test.yaml + | |import org.scalacheck.Gen |import org.scalacheck.Arbitrary |import play.api.libs.json.scalacheck.JsValueGenerators |import Arbitrary._ |import de.zalando.play.controllers.ArrayWrapper + | |object Generators extends JsValueGenerators { - | def createIntGenerator = _generate(IntGenerator) - | def createDblGenerator = _generate(DblGenerator) - | def createFltGenerator = _generate(FltGenerator) - | def IntGenerator = _genList(arbitrary[Int], "csv") - | def DblGenerator = _genList(arbitrary[Double], "tsv") - | def FltGenerator = _genList(arbitrary[Float], "ssv") - | def _generate[T](gen: Gen[T]) = (count: Int) => for (i <- 1 to count) yield gen.sample + | def createArrayWrapperIntGenerator = _generate(ArrayWrapperIntGenerator) + | def createArrayWrapperDoubleGenerator = _generate(ArrayWrapperDoubleGenerator) + | def createArrayWrapperFloatGenerator = _generate(ArrayWrapperFloatGenerator) + | def ArrayWrapperIntGenerator = _genList(arbitrary[Int], "csv") + | def ArrayWrapperDoubleGenerator = _genList(arbitrary[Double], "tsv") + | def ArrayWrapperFloatGenerator = _genList(arbitrary[Float], "ssv") + | def _generate[T](gen: Gen[T]) = (count: Int) => for (i <- 1 to count) yield gen.sample | def _genList[T](gen: Gen[T], format: String): Gen[ArrayWrapper[T]] = for { | items <- Gen.containerOf[List,T](gen) | } yield ArrayWrapper(format)(items) @@ -95,7 +103,8 @@ class ScalaGeneratorsTest extends FunSpec with MustMatchers { val model = Map( "parameters" / "all" -> CatchAll(Bool(None), None) ) - new ScalaGenerator(model).generateGenerators("test.yaml", "test.yaml") mustBeAs + val result = new ScalaGenerator(model).generateGenerators("test.yaml", "test.yaml") + result mustBeAs """package test.yaml |import org.scalacheck.Gen |import org.scalacheck.Arbitrary @@ -166,20 +175,21 @@ class ScalaGeneratorsTest extends FunSpec with MustMatchers { "definitions" / "Passwords" -> Arr(Password(None), None, "pipes") ) val result = new ScalaGenerator(model).generateGenerators("test.yaml", "test.yaml") - result mustBeAs """package test.yaml + | |import org.scalacheck.Gen |import org.scalacheck.Arbitrary |import play.api.libs.json.scalacheck.JsValueGenerators |import Arbitrary._ |import de.zalando.play.controllers.ArrayWrapper + | |object Generators extends JsValueGenerators { - | def createOptionalDataGenerator = _generate(OptionalDataGenerator) - | def createPasswordsGenerator = _generate(PasswordsGenerator) - | def OptionalDataGenerator = Gen.option(PasswordsGenerator) - | def PasswordsGenerator = _genList(arbitrary[String], "pipes") - | def _generate[T](gen: Gen[T]) = (count: Int) => for (i <- 1 to count) yield gen.sample + | def createOptionArrayWrapperStringGenerator = _generate(OptionArrayWrapperStringGenerator) + | def createArrayWrapperStringGenerator = _generate(ArrayWrapperStringGenerator) + | def OptionArrayWrapperStringGenerator = Gen.option(ArrayWrapperStringGenerator) + | def ArrayWrapperStringGenerator = _genList(arbitrary[String], "pipes") + | def _generate[T](gen: Gen[T]) = (count: Int) => for (i <- 1 to count) yield gen.sample | def _genList[T](gen: Gen[T], format: String): Gen[ArrayWrapper[T]] = for { | items <- Gen.containerOf[List,T](gen) | } yield ArrayWrapper(format)(items) diff --git a/play-scala-generator/src/test/scala/de/zalando/apifirst/generators/ScalaModelGeneratorTest.scala b/play-scala-generator/src/test/scala/de/zalando/apifirst/generators/ScalaModelGeneratorTest.scala index 6af91613..c638171e 100644 --- a/play-scala-generator/src/test/scala/de/zalando/apifirst/generators/ScalaModelGeneratorTest.scala +++ b/play-scala-generator/src/test/scala/de/zalando/apifirst/generators/ScalaModelGeneratorTest.scala @@ -37,8 +37,6 @@ class ScalaModelGeneratorTest extends FunSpec with MustMatchers { |// should be defined after the package because of the https://issues.scala-lang.org/browse/SI-9922 |//noinspection ScalaStyle |package object scala { - | type Opti = Option[Long] - | type Stri = Option[String] |}""" } @@ -56,8 +54,6 @@ class ScalaModelGeneratorTest extends FunSpec with MustMatchers { |// should be defined after the package because of the https://issues.scala-lang.org/browse/SI-9922 |//noinspection ScalaStyle |package object txt { - | type Option = Option[Long] - | type String = Option[String] |}""" } @@ -77,9 +73,6 @@ class ScalaModelGeneratorTest extends FunSpec with MustMatchers { |// should be defined after the package because of the https://issues.scala-lang.org/browse/SI-9922 |//noinspection ScalaStyle |package object scala { - | type Int = ArrayWrapper[Int] - | type Dbl = ArrayWrapper[Double] - | type Flt = ArrayWrapper[Float] |}""" } @@ -145,8 +138,6 @@ class ScalaModelGeneratorTest extends FunSpec with MustMatchers { |// should be defined after the package because of the https://issues.scala-lang.org/browse/SI-9922 |//noinspection ScalaStyle |package object scala { - | type OptionalData = Option[Passwords] - | type Passwords = ArrayWrapper[String] |}""" } @@ -254,6 +245,24 @@ class ScalaModelGeneratorTest extends FunSpec with MustMatchers { |}""" } + it("should generate recursive containers") { + val model = Map( + "definitions" / "Opti" -> Opt(Opt(Lng(None), None), None), + "definitions" / "ArrStri" -> ArrResult(Opt(Arr(Str(None, None), None, "format here"), None), None) + ) + val result = new ScalaGenerator(model).generateModel("test-file.scala", "`test-file`.scala") + result mustBeAs + """package `test-file` + | import de.zalando.play.controllers.ArrayWrapper + |//noinspection ScalaStyle + |package scala { + |} + |// should be defined after the package because of the https://issues.scala-lang.org/browse/SI-9922 + |//noinspection ScalaStyle + |package object scala { + |}""" + } + } implicit def any2Comparator(any: Any): StringComparator = new StringComparator(any.toString) diff --git a/play-scala-generator/src/test/scala/de/zalando/apifirst/generators/ScalaPlayTestsGeneratorIntegrationTest.scala b/play-scala-generator/src/test/scala/de/zalando/apifirst/generators/ScalaPlayTestsGeneratorIntegrationTest.scala index bbe9a9b4..8cd1d69f 100644 --- a/play-scala-generator/src/test/scala/de/zalando/apifirst/generators/ScalaPlayTestsGeneratorIntegrationTest.scala +++ b/play-scala-generator/src/test/scala/de/zalando/apifirst/generators/ScalaPlayTestsGeneratorIntegrationTest.scala @@ -20,8 +20,8 @@ class ScalaPlayTestsGeneratorIntegrationTest extends FunSpec with MustMatchers w val model = ast.model val scalaModel = new ScalaGenerator(model).playScalaTests(name, ast.model.packageName.getOrElse(name)) val expected = asInFile(name, "scala") - if (expected.isEmpty) - dump(scalaModel, name, "scala") + // if (expected.isEmpty) + dump(scalaModel, name, "scala") clean(scalaModel) mustBe clean(expected) } } diff --git a/play-scala-generator/src/test/scala/de/zalando/apifirst/generators/ScalaTestDataGeneratorIntegrationTest.scala b/play-scala-generator/src/test/scala/de/zalando/apifirst/generators/ScalaTestDataGeneratorIntegrationTest.scala index 42286668..948dd577 100644 --- a/play-scala-generator/src/test/scala/de/zalando/apifirst/generators/ScalaTestDataGeneratorIntegrationTest.scala +++ b/play-scala-generator/src/test/scala/de/zalando/apifirst/generators/ScalaTestDataGeneratorIntegrationTest.scala @@ -23,8 +23,8 @@ class ScalaTestDataGeneratorIntegrationTest extends FunSpec with MustMatchers wi val model = ast.model val scalaModel = new ScalaGenerator(model).generateGenerators(name, ast.model.packageName.getOrElse(name)) val expected = asInFile(name, "scala") - if (expected.isEmpty) - dump(scalaModel, name, "scala") + // if (expected.isEmpty) + dump(scalaModel, name, "scala") clean(scalaModel) mustBe clean(expected) } } diff --git a/play-scala-generator/src/test/scala/model/resources.additional_properties_yaml.scala b/play-scala-generator/src/test/scala/model/resources.additional_properties_yaml.scala index b91299e3..212d9329 100644 --- a/play-scala-generator/src/test/scala/model/resources.additional_properties_yaml.scala +++ b/play-scala-generator/src/test/scala/model/resources.additional_properties_yaml.scala @@ -18,9 +18,7 @@ object additional_properties_yaml extends WithModel { Field(Reference("⌿definitions⌿KeyedArrays⌿additionalProperties"), TypeRef(Reference("⌿definitions⌿KeyedArrays⌿additionalProperties"))) ), TypeMeta(Some("Named types: 1"), List())), Reference("⌿definitions⌿KeyedArrays⌿additionalProperties") → - CatchAll(TypeRef(Reference("⌿definitions⌿KeyedArrays⌿additionalProperties⌿CatchAll")), TypeMeta(None, List())), - Reference("⌿definitions⌿KeyedArrays⌿additionalProperties⌿CatchAll") → - ArrResult(BInt(TypeMeta(None, List())), TypeMeta(None, List())) + CatchAll(ArrResult(BInt(TypeMeta(None, List())), TypeMeta(None, List())), TypeMeta(None, List())) ) def parameters = Map[ParameterRef, Parameter]( diff --git a/play-scala-generator/src/test/scala/model/resources.basic_polymorphism_yaml.scala b/play-scala-generator/src/test/scala/model/resources.basic_polymorphism_yaml.scala index f2bb920d..fa1ad892 100644 --- a/play-scala-generator/src/test/scala/model/resources.basic_polymorphism_yaml.scala +++ b/play-scala-generator/src/test/scala/model/resources.basic_polymorphism_yaml.scala @@ -15,7 +15,7 @@ object basic_polymorphism_yaml extends WithModel { Reference("⌿definitions⌿Zoo") → TypeDef(Reference("⌿definitions⌿Zoo"), Seq( - Field(Reference("⌿definitions⌿Zoo⌿tiers"), TypeRef(Reference("⌿definitions⌿Zoo⌿tiers"))) + Field(Reference("⌿definitions⌿Zoo⌿tiers"), Opt(ArrResult(TypeRef(Reference("⌿definitions⌿Pet")), TypeMeta(None, List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 1"), List())), Reference("⌿definitions⌿Cat") → AllOf(Reference("⌿definitions⌿Cat⌿Cat"), TypeMeta(Some("Schemas: 2"), List()), Seq( @@ -49,8 +49,6 @@ object basic_polymorphism_yaml extends WithModel { Seq( Field(Reference("⌿definitions⌿Dog⌿packSize"), Intgr(TypeMeta(Some("the size of the pack the dog is from"), List("min(0.toInt, false)")))) ), TypeMeta(Some("Named types: 1"), List())), - Reference("⌿definitions⌿Zoo⌿tiers") → - Opt(TypeRef(Reference("⌿definitions⌿Zoo⌿tiers⌿Opt")), TypeMeta(None, List())), Reference("⌿definitions⌿Labrador⌿AllOf0") → AllOf(Reference("⌿definitions⌿Labrador⌿Labrador"), TypeMeta(Some("Schemas: 2"), List()), Seq( TypeRef(Reference("⌿definitions⌿Pet")), @@ -93,8 +91,6 @@ object basic_polymorphism_yaml extends WithModel { Seq( Field(Reference("⌿definitions⌿Labrador⌿packSize"), Intgr(TypeMeta(Some("the size of the pack the dog is from"), List("min(0.toInt, false)")))) ), TypeMeta(Some("Named types: 1"), List())), - Reference("⌿definitions⌿Zoo⌿tiers⌿Opt") → - ArrResult(TypeRef(Reference("⌿definitions⌿Pet")), TypeMeta(None, List())), Reference("⌿definitions⌿Cat⌿huntingSkill⌿adventurous") → EnumObject(Str(None, TypeMeta(Some("The measured skill for hunting"), List("""enum("clueless,lazy,adventurous,aggressive")"""))), "adventurous", TypeMeta(Some("adventurous"), List())), Reference("⌿definitions⌿CatNDog⌿AllOf1⌿AllOf1") → diff --git a/play-scala-generator/src/test/scala/model/resources.cross_spec_references_yaml.scala b/play-scala-generator/src/test/scala/model/resources.cross_spec_references_yaml.scala index cb3722ea..b30aaeba 100644 --- a/play-scala-generator/src/test/scala/model/resources.cross_spec_references_yaml.scala +++ b/play-scala-generator/src/test/scala/model/resources.cross_spec_references_yaml.scala @@ -12,20 +12,6 @@ import Security._ object cross_spec_references_yaml extends WithModel { def types = Map[Reference, Type]( - Reference("⌿definitions⌿Meta⌿copyright") → - Opt(Str(None, TypeMeta(Some("Zalando SE Copyright notice"), List())), TypeMeta(None, List())), - Reference("⌿definitions⌿ModelSchema⌿keywords") → - Opt(Str(None, TypeMeta(Some("Product Keywords. Comma-Space (', ') separated Keyword List. A keyword may contain letters both upper and lowercase as well as numbers and spaces. Each keyword has a maximum length of 255 characters. "), List("""pattern("""+"""""""""+"""/([\w\s]{1,255}|([\w\s]{1,255}, )+[\w\s]{1,255})/"""+"""""""""+""".r)"""))), TypeMeta(None, List())), - Reference("⌿definitions⌿ModelSchema⌿specialDescriptions") → - Opt(TypeRef(Reference("⌿definitions⌿Pet⌿photoUrls")), TypeMeta(None, List())), - Reference("⌿definitions⌿ModelSchemaRoot⌿data") → - Opt(TypeRef(Reference("⌿definitions⌿ModelSchemaRoot⌿data⌿Opt")), TypeMeta(None, List())), - Reference("⌿definitions⌿Pet⌿id") → - Opt(Lng(TypeMeta(Some("int64"), List())), TypeMeta(None, List())), - Reference("⌿definitions⌿ModelSchemaRoot⌿links") → - Opt(TypeRef(Reference("⌿definitions⌿ModelSchemaRoot⌿links⌿Opt")), TypeMeta(None, List())), - Reference("⌿definitions⌿Pet⌿tags") → - Opt(TypeRef(Reference("⌿definitions⌿Pet⌿tags⌿Opt")), TypeMeta(None, List())), Reference("⌿definitions⌿ModelSchema⌿silhouetteId") → EnumTrait(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")""")), Set( @@ -124,16 +110,6 @@ object cross_spec_references_yaml extends WithModel { EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "etui", TypeMeta(Some("etui"), List())) )), - Reference("⌿definitions⌿Pet⌿photoUrls") → - ArrResult(Str(None, TypeMeta(None, List())), TypeMeta(None, List())), - Reference("⌿definitions⌿ModelSchema⌿lengthRegister") → - Opt(Str(None, TypeMeta(Some("Zalando Product Length Grid"), List("maxLength(10)", "minLength(10)", """pattern("""+"""""""""+"""/[1-9][A-Z0-9]*/"""+"""""""""+""".r)"""))), TypeMeta(None, List())), - Reference("⌿definitions⌿ModelSchema⌿ageGroups") → - ArrResult(TypeRef(Reference("⌿definitions⌿ModelSchema⌿ageGroups⌿ArrResult")), TypeMeta(None, List("maxItems(4)"))), - Reference("⌿definitions⌿Pet⌿category") → - Opt(TypeRef(Reference("⌿definitions⌿Pet⌿category⌿Opt")), TypeMeta(None, List())), - Reference("⌿definitions⌿ModelSchemaRoot⌿meta") → - Opt(TypeRef(Reference("⌿definitions⌿ModelSchemaRoot⌿meta⌿Opt")), TypeMeta(None, List())), Reference("⌿definitions⌿ModelSchema⌿silhouetteId⌿jacket") → EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "jacket", TypeMeta(Some("jacket"), List())), Reference("⌿definitions⌿ModelSchema⌿silhouetteId⌿nightwear_combination") → @@ -146,12 +122,6 @@ object cross_spec_references_yaml extends WithModel { EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "nail", TypeMeta(Some("nail"), List())), Reference("⌿definitions⌿ModelSchema⌿silhouetteId⌿boots") → EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "boots", TypeMeta(Some("boots"), List())), - Reference("⌿definitions⌿Pet⌿category⌿Opt") → - TypeDef(Reference("⌿definitions⌿Category"), - Seq( - Field(Reference("⌿definitions⌿Category⌿id"), TypeRef(Reference("⌿definitions⌿Pet⌿id"))), - Field(Reference("⌿definitions⌿Category⌿name"), TypeRef(Reference("⌿definitions⌿Meta⌿copyright"))) - ), TypeMeta(Some("Named types: 2"), List())), Reference("⌿definitions⌿ModelSchema⌿silhouetteId⌿peeling") → EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "peeling", TypeMeta(Some("peeling"), List())), Reference("⌿definitions⌿ModelSchema⌿silhouetteId⌿headphones") → @@ -176,21 +146,6 @@ object cross_spec_references_yaml extends WithModel { EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "scarf", TypeMeta(Some("scarf"), List())), Reference("⌿definitions⌿ModelSchema⌿silhouetteId⌿keychain") → EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "keychain", TypeMeta(Some("keychain"), List())), - Reference("⌿definitions⌿ModelSchemaRoot⌿data⌿Opt") → - TypeDef(Reference("⌿definitions⌿ModelSchema"), - Seq( - Field(Reference("⌿definitions⌿ModelSchema⌿name"), Str(None, TypeMeta(Some("Product name"), List()))), - Field(Reference("⌿definitions⌿ModelSchema⌿sizeRegister"), Str(None, TypeMeta(None, List("maxLength(10)", "minLength(10)", """pattern("""+"""""""""+"""/[1-9][A-Z0-9]*/"""+"""""""""+""".r)""")))), - Field(Reference("⌿definitions⌿ModelSchema⌿brand"), Str(None, TypeMeta(Some("Zalando brand code"), List("maxLength(3)", "minLength(3)", """pattern("""+"""""""""+"""/[A-Z0-9]{3,3}/"""+"""""""""+""".r)""")))), - Field(Reference("⌿definitions⌿ModelSchema⌿partnerArticleModelId"), BInt(TypeMeta(Some("???"), List()))), - Field(Reference("⌿definitions⌿ModelSchema⌿description"), TypeRef(Reference("⌿definitions⌿Meta⌿copyright"))), - Field(Reference("⌿definitions⌿ModelSchema⌿ageGroups"), TypeRef(Reference("⌿definitions⌿ModelSchema⌿ageGroups"))), - Field(Reference("⌿definitions⌿ModelSchema⌿keywords"), TypeRef(Reference("⌿definitions⌿ModelSchema⌿keywords"))), - Field(Reference("⌿definitions⌿ModelSchema⌿lengthRegister"), TypeRef(Reference("⌿definitions⌿ModelSchema⌿lengthRegister"))), - Field(Reference("⌿definitions⌿ModelSchema⌿silhouetteId"), TypeRef(Reference("⌿definitions⌿ModelSchema⌿silhouetteId"))), - Field(Reference("⌿definitions⌿ModelSchema⌿specialDescriptions"), TypeRef(Reference("⌿definitions⌿ModelSchema⌿specialDescriptions"))), - Field(Reference("⌿definitions⌿ModelSchema⌿articleModelAttributes"), TypeRef(Reference("⌿definitions⌿ModelSchema⌿specialDescriptions"))) - ), TypeMeta(Some("Named types: 11"), List())), Reference("⌿definitions⌿ModelSchema⌿silhouetteId⌿hair") → EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "hair", TypeMeta(Some("hair"), List())), Reference("⌿definitions⌿ModelSchema⌿silhouetteId⌿fitness") → @@ -223,11 +178,6 @@ object cross_spec_references_yaml extends WithModel { EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "ankle_boots", TypeMeta(Some("ankle_boots"), List())), Reference("⌿definitions⌿ModelSchema⌿silhouetteId⌿shave") → EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "shave", TypeMeta(Some("shave"), List())), - Reference("⌿definitions⌿ModelSchemaRoot⌿meta⌿Opt") → - TypeDef(Reference("⌿definitions⌿Meta"), - Seq( - Field(Reference("⌿definitions⌿Meta⌿copyright"), TypeRef(Reference("⌿definitions⌿Meta⌿copyright"))) - ), TypeMeta(Some("Named types: 1"), List())), Reference("⌿definitions⌿ModelSchema⌿silhouetteId⌿other_equipment") → EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "other_equipment", TypeMeta(Some("other_equipment"), List())), Reference("⌿definitions⌿ModelSchema⌿silhouetteId⌿gloves") → @@ -239,9 +189,9 @@ object cross_spec_references_yaml extends WithModel { Reference("⌿paths⌿/⌿post⌿root") → TypeDef(Reference("⌿definitions⌿ModelSchemaRoot"), Seq( - Field(Reference("⌿definitions⌿ModelSchemaRoot⌿data"), TypeRef(Reference("⌿definitions⌿ModelSchemaRoot⌿data"))), - Field(Reference("⌿definitions⌿ModelSchemaRoot⌿meta"), TypeRef(Reference("⌿definitions⌿ModelSchemaRoot⌿meta"))), - Field(Reference("⌿definitions⌿ModelSchemaRoot⌿links"), TypeRef(Reference("⌿definitions⌿ModelSchemaRoot⌿links"))) + Field(Reference("⌿definitions⌿ModelSchemaRoot⌿data"), Opt(TypeRef(Reference("⌿definitions⌿ModelSchemaRoot⌿data⌿Option⌿ModelSchema")), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿ModelSchemaRoot⌿meta"), Opt(TypeRef(Reference("⌿definitions⌿ModelSchemaRoot⌿meta⌿Option⌿Meta")), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿ModelSchemaRoot⌿links"), Opt(TypeRef(Reference("⌿definitions⌿ModelSchemaRoot⌿links⌿Option⌿Links")), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 3"), List())), Reference("⌿definitions⌿ModelSchema⌿silhouetteId⌿shirt") → EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "shirt", TypeMeta(Some("shirt"), List())), @@ -309,12 +259,6 @@ object cross_spec_references_yaml extends WithModel { EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "lounge", TypeMeta(Some("lounge"), List())), Reference("⌿definitions⌿ModelSchema⌿silhouetteId⌿skirt") → EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "skirt", TypeMeta(Some("skirt"), List())), - Reference("⌿definitions⌿ModelSchemaRoot⌿links⌿Opt") → - TypeDef(Reference("⌿definitions⌿Links"), - Seq( - Field(Reference("⌿definitions⌿Links⌿self"), TypeRef(Reference("⌿definitions⌿Meta⌿copyright"))), - Field(Reference("⌿definitions⌿Links⌿related"), TypeRef(Reference("⌿definitions⌿Meta⌿copyright"))) - ), TypeMeta(Some("Named types: 2"), List())), Reference("⌿definitions⌿ModelSchema⌿silhouetteId⌿one_piece_nightwear") → EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "one_piece_nightwear", TypeMeta(Some("one_piece_nightwear"), List())), Reference("⌿definitions⌿ModelSchema⌿silhouetteId⌿dress") → @@ -329,15 +273,6 @@ object cross_spec_references_yaml extends WithModel { EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "tights", TypeMeta(Some("tights"), List())), Reference("⌿definitions⌿ModelSchema⌿silhouetteId⌿trouser") → EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "trouser", TypeMeta(Some("trouser"), List())), - Reference("⌿definitions⌿ModelSchema⌿ageGroups⌿ArrResult") → - EnumTrait(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), TypeMeta(None, List("""enum("baby,kid,teen,adult")""")), - Set( - EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "baby", TypeMeta(Some("baby"), List())), - EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "kid", TypeMeta(Some("kid"), List())), - EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "teen", TypeMeta(Some("teen"), List())), - EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "adult", TypeMeta(Some("adult"), List())) - - )), Reference("⌿definitions⌿ModelSchema⌿silhouetteId⌿backpack") → EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "backpack", TypeMeta(Some("backpack"), List())), Reference("⌿definitions⌿ModelSchema⌿silhouetteId⌿shoe_accessoires") → @@ -356,8 +291,6 @@ object cross_spec_references_yaml extends WithModel { EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "bathrobe", TypeMeta(Some("bathrobe"), List())), Reference("⌿definitions⌿ModelSchema⌿silhouetteId⌿corsage") → EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "corsage", TypeMeta(Some("corsage"), List())), - Reference("⌿definitions⌿Pet⌿tags⌿Opt") → - ArrResult(TypeRef(Reference("⌿definitions⌿Pet⌿category⌿Opt")), TypeMeta(None, List())), Reference("⌿definitions⌿ModelSchema⌿silhouetteId⌿backless_slipper") → EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "backless_slipper", TypeMeta(Some("backless_slipper"), List())), Reference("⌿definitions⌿ModelSchema⌿silhouetteId⌿ski") → @@ -370,24 +303,65 @@ object cross_spec_references_yaml extends WithModel { EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "ball", TypeMeta(Some("ball"), List())), Reference("⌿definitions⌿ModelSchema⌿silhouetteId⌿belt") → EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "belt", TypeMeta(Some("belt"), List())), - Reference("⌿definitions⌿ModelSchema⌿ageGroups⌿ArrResult⌿adult") → - EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "adult", TypeMeta(Some("adult"), List())), + Reference("⌿definitions⌿ModelSchemaRoot⌿meta⌿Option⌿Meta") → + TypeDef(Reference("⌿definitions⌿Meta"), + Seq( + Field(Reference("⌿definitions⌿Meta⌿copyright"), Opt(Str(None, TypeMeta(Some("Zalando SE Copyright notice"), List())), TypeMeta(None, List()))) + ), TypeMeta(Some("Named types: 1"), List())), + Reference("⌿definitions⌿Pet⌿category⌿Option⌿Category") → + TypeDef(Reference("⌿definitions⌿Category"), + Seq( + Field(Reference("⌿definitions⌿Category⌿id"), Opt(Lng(TypeMeta(Some("int64"), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Category⌿name"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))) + ), TypeMeta(Some("Named types: 2"), List())), + Reference("⌿definitions⌿ModelSchemaRoot⌿links⌿Option⌿Links") → + TypeDef(Reference("⌿definitions⌿Links"), + Seq( + Field(Reference("⌿definitions⌿Links⌿self"), Opt(Str(None, TypeMeta(Some("The link that generated the current response document"), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Links⌿related"), Opt(Str(None, TypeMeta(Some("A related resource link when the primary data represents a resource relationship"), List())), TypeMeta(None, List()))) + ), TypeMeta(Some("Named types: 2"), List())), Reference("⌿paths⌿/⌿post⌿responses⌿200") → TypeDef(Reference("⌿definitions⌿Pet"), Seq( Field(Reference("⌿definitions⌿Pet⌿name"), Str(None, TypeMeta(None, List()))), - Field(Reference("⌿definitions⌿Pet⌿tags"), TypeRef(Reference("⌿definitions⌿Pet⌿tags"))), - Field(Reference("⌿definitions⌿Pet⌿photoUrls"), TypeRef(Reference("⌿definitions⌿Pet⌿photoUrls"))), - Field(Reference("⌿definitions⌿Pet⌿id"), TypeRef(Reference("⌿definitions⌿Pet⌿id"))), - Field(Reference("⌿definitions⌿Pet⌿status"), TypeRef(Reference("⌿definitions⌿Meta⌿copyright"))), - Field(Reference("⌿definitions⌿Pet⌿category"), TypeRef(Reference("⌿definitions⌿Pet⌿category"))) + Field(Reference("⌿definitions⌿Pet⌿photoUrls"), ArrResult(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Pet⌿id"), Opt(Lng(TypeMeta(Some("int64"), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Pet⌿status"), Opt(Str(None, TypeMeta(Some("pet status in the store"), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Pet⌿tags"), Opt(ArrResult(TypeRef(Reference("⌿definitions⌿Pet⌿category⌿Option⌿Category")), TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Pet⌿category"), Opt(TypeRef(Reference("⌿definitions⌿Pet⌿category⌿Option⌿Category")), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 6"), List())), - Reference("⌿definitions⌿ModelSchema⌿ageGroups⌿ArrResult⌿baby") → + Reference("⌿definitions⌿ModelSchemaRoot⌿data⌿Option⌿ModelSchema") → + TypeDef(Reference("⌿definitions⌿ModelSchema"), + Seq( + Field(Reference("⌿definitions⌿ModelSchema⌿name"), Str(None, TypeMeta(Some("Product name"), List()))), + Field(Reference("⌿definitions⌿ModelSchema⌿description"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿ModelSchema⌿sizeRegister"), Str(None, TypeMeta(None, List("maxLength(10)", "minLength(10)", """pattern("""+"""""""""+"""/[1-9][A-Z0-9]*/"""+"""""""""+""".r)""")))), + Field(Reference("⌿definitions⌿ModelSchema⌿brand"), Str(None, TypeMeta(Some("Zalando brand code"), List("maxLength(3)", "minLength(3)", """pattern("""+"""""""""+"""/[A-Z0-9]{3,3}/"""+"""""""""+""".r)""")))), + Field(Reference("⌿definitions⌿ModelSchema⌿partnerArticleModelId"), BInt(TypeMeta(Some("???"), List()))), + Field(Reference("⌿definitions⌿ModelSchema⌿keywords"), Opt(Str(None, TypeMeta(Some("Product Keywords. Comma-Space (', ') separated Keyword List. A keyword may contain letters both upper and lowercase as well as numbers and spaces. Each keyword has a maximum length of 255 characters. "), List("""pattern("""+"""""""""+"""/([\w\s]{1,255}|([\w\s]{1,255}, )+[\w\s]{1,255})/"""+"""""""""+""".r)"""))), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿ModelSchema⌿lengthRegister"), Opt(Str(None, TypeMeta(Some("Zalando Product Length Grid"), List("maxLength(10)", "minLength(10)", """pattern("""+"""""""""+"""/[1-9][A-Z0-9]*/"""+"""""""""+""".r)"""))), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿ModelSchema⌿specialDescriptions"), Opt(ArrResult(Str(None, TypeMeta(Some("Each occurance of the 'specialDescription' node will be transformed into a single line in the Zalando Shop Frontend "), List())), TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿ModelSchema⌿articleModelAttributes"), Opt(ArrResult(Str(None, TypeMeta(None, List())), TypeMeta(Some("Optional collection of product attributes - if present at least one attribute is required "), List("minItems(1)"))), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿ModelSchema⌿silhouetteId"), TypeRef(Reference("⌿definitions⌿ModelSchema⌿silhouetteId"))), + Field(Reference("⌿definitions⌿ModelSchema⌿ageGroups"), ArrResult(TypeRef(Reference("⌿definitions⌿ModelSchema⌿ageGroups⌿Seq⌿Enum")), TypeMeta(None, List("maxItems(4)")))) + ), TypeMeta(Some("Named types: 11"), List())), + Reference("⌿definitions⌿ModelSchema⌿ageGroups⌿Seq⌿Enum") → + EnumTrait(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), TypeMeta(None, List("""enum("baby,kid,teen,adult")""")), + Set( EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "baby", TypeMeta(Some("baby"), List())), - Reference("⌿definitions⌿ModelSchema⌿ageGroups⌿ArrResult⌿teen") → + EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "kid", TypeMeta(Some("kid"), List())), EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "teen", TypeMeta(Some("teen"), List())), - Reference("⌿definitions⌿ModelSchema⌿ageGroups⌿ArrResult⌿kid") → - EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "kid", TypeMeta(Some("kid"), List())) + EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "adult", TypeMeta(Some("adult"), List())) + + )), + Reference("⌿definitions⌿ModelSchema⌿ageGroups⌿Seq⌿Enum⌿adult") → + EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "adult", TypeMeta(Some("adult"), List())), + Reference("⌿definitions⌿ModelSchema⌿ageGroups⌿Seq⌿Enum⌿baby") → + EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "baby", TypeMeta(Some("baby"), List())), + Reference("⌿definitions⌿ModelSchema⌿ageGroups⌿Seq⌿Enum⌿kid") → + EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "kid", TypeMeta(Some("kid"), List())), + Reference("⌿definitions⌿ModelSchema⌿ageGroups⌿Seq⌿Enum⌿teen") → + EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "teen", TypeMeta(Some("teen"), List())) ) def parameters = Map[ParameterRef, Parameter]( diff --git a/play-scala-generator/src/test/scala/model/resources.echo_api_yaml.scala b/play-scala-generator/src/test/scala/model/resources.echo_api_yaml.scala index 05d89c7d..08901813 100644 --- a/play-scala-generator/src/test/scala/model/resources.echo_api_yaml.scala +++ b/play-scala-generator/src/test/scala/model/resources.echo_api_yaml.scala @@ -21,8 +21,8 @@ object echo_api_yaml extends WithModel { Reference("⌿paths⌿/⌿post⌿responses⌿200") → TypeDef(Reference("⌿paths⌿/⌿post⌿responses⌿200"), Seq( - Field(Reference("⌿paths⌿/⌿post⌿responses⌿200⌿name"), TypeRef(Reference("⌿paths⌿/⌿post⌿name"))), - Field(Reference("⌿paths⌿/⌿post⌿responses⌿200⌿year"), TypeRef(Reference("⌿paths⌿/⌿post⌿name"))) + Field(Reference("⌿paths⌿/⌿post⌿responses⌿200⌿name"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿paths⌿/⌿post⌿responses⌿200⌿year"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 2"), List())) ) diff --git a/play-scala-generator/src/test/scala/model/resources.enum_yaml.scala b/play-scala-generator/src/test/scala/model/resources.enum_yaml.scala new file mode 100644 index 00000000..12834a91 --- /dev/null +++ b/play-scala-generator/src/test/scala/model/resources.enum_yaml.scala @@ -0,0 +1,70 @@ +package de.zalando.model +import de.zalando.apifirst.Application._ +import de.zalando.apifirst.Domain._ +import de.zalando.apifirst.ParameterPlace +import de.zalando.apifirst.naming._ +import de.zalando.apifirst.Hypermedia._ +import de.zalando.apifirst.Http._ +import de.zalando.apifirst.Security +import java.net.URL +import Security._ +//noinspection ScalaStyle +object enum_yaml extends WithModel { + + def types = Map[Reference, Type]( + Reference("⌿paths⌿/test⌿get⌿includes") → + Opt(TypeRef(Reference("⌿paths⌿/test⌿get⌿includes⌿Option⌿Enum")), TypeMeta(None, List())), + Reference("⌿paths⌿/test⌿get⌿responses⌿200") → + Str(None, TypeMeta(None, List())), + Reference("⌿paths⌿/test⌿get⌿includes⌿Option⌿Enum") → + EnumTrait(Str(None, TypeMeta(None, List("""enum("option_one,option_two")"""))), TypeMeta(None, List("""enum("option_one,option_two")""")), + Set( + EnumObject(Str(None, TypeMeta(None, List("""enum("option_one,option_two")"""))), "option_one", TypeMeta(Some("option_one"), List())), + EnumObject(Str(None, TypeMeta(None, List("""enum("option_one,option_two")"""))), "option_two", TypeMeta(Some("option_two"), List())) + + )), + Reference("⌿paths⌿/test⌿get⌿includes⌿Option⌿Enum⌿option_one") → + EnumObject(Str(None, TypeMeta(None, List("""enum("option_one,option_two")"""))), "option_one", TypeMeta(Some("option_one"), List())), + Reference("⌿paths⌿/test⌿get⌿includes⌿Option⌿Enum⌿option_two") → + EnumObject(Str(None, TypeMeta(None, List("""enum("option_one,option_two")"""))), "option_two", TypeMeta(Some("option_two"), List())) +) + + def parameters = Map[ParameterRef, Parameter]( + ParameterRef( Reference("⌿paths⌿/test⌿get⌿includes")) → Parameter("includes", TypeRef(Reference("⌿paths⌿/test⌿get⌿includes")), None, None, ".+", encode = true, ParameterPlace.withName("query")) +) + def basePath: String =null + def discriminators: DiscriminatorLookupTable = Map[Reference, Reference]( + ) + def securityDefinitions: SecurityDefinitionsTable = Map[String, Security.Definition]( + +) +def stateTransitions: StateTransitionsTable = Map[State, Map[State, TransitionProperties]]() +def calls: Seq[ApiCall] = Seq( + ApiCall(GET, Path(Reference("⌿test")), + HandlerCall( + "enum.yaml", + "EnumYaml", + instantiate = false, + "gettest",parameters = + Seq( + ParameterRef(Reference("⌿paths⌿/test⌿get⌿includes")) + ) + ), + Set.empty[MimeType], + Set.empty[MimeType], + Map.empty[String, Seq[Class[Exception]]], + TypesResponseInfo( + Map[Int, ParameterRef]( + 200 -> ParameterRef(Reference("⌿paths⌿/test⌿get⌿responses⌿200")) + ), None), + StateResponseInfo( + Map[Int, State]( + 200 -> Self + ), None), + Set.empty[Security.Constraint])) + +def packageName: Option[String] = Some("enum.yaml") + +def model = new StrictModel(calls, types, parameters, discriminators, basePath, packageName, stateTransitions, securityDefinitions) + +} \ No newline at end of file diff --git a/play-scala-generator/src/test/scala/model/resources.error_in_array_yaml.scala b/play-scala-generator/src/test/scala/model/resources.error_in_array_yaml.scala index d972f6c2..dcce610b 100644 --- a/play-scala-generator/src/test/scala/model/resources.error_in_array_yaml.scala +++ b/play-scala-generator/src/test/scala/model/resources.error_in_array_yaml.scala @@ -15,68 +15,56 @@ object error_in_array_yaml extends WithModel { Reference("⌿definitions⌿ModelSchemaRoot") → TypeDef(Reference("⌿definitions⌿ModelSchemaRoot"), Seq( - Field(Reference("⌿definitions⌿ModelSchemaRoot⌿data"), TypeRef(Reference("⌿definitions⌿ModelSchemaRoot⌿data"))), - Field(Reference("⌿definitions⌿ModelSchemaRoot⌿meta"), TypeRef(Reference("⌿definitions⌿ModelSchemaRoot⌿meta"))), - Field(Reference("⌿definitions⌿ModelSchemaRoot⌿links"), TypeRef(Reference("⌿definitions⌿ModelSchemaRoot⌿links"))) + Field(Reference("⌿definitions⌿ModelSchemaRoot⌿data"), Opt(TypeRef(Reference("⌿definitions⌿ModelSchema")), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿ModelSchemaRoot⌿meta"), Opt(TypeRef(Reference("⌿definitions⌿Meta")), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿ModelSchemaRoot⌿links"), Opt(TypeRef(Reference("⌿definitions⌿Links")), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 3"), List())), Reference("⌿definitions⌿Errors") → TypeDef(Reference("⌿definitions⌿Errors"), Seq( - Field(Reference("⌿definitions⌿Errors⌿errors"), TypeRef(Reference("⌿definitions⌿Errors⌿errors"))) + Field(Reference("⌿definitions⌿Errors⌿errors"), Opt(ArrResult(TypeRef(Reference("⌿definitions⌿Error")), TypeMeta(Some("All errors"), List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 1"), List())), Reference("⌿definitions⌿ErrorSource") → TypeDef(Reference("⌿definitions⌿ErrorSource"), Seq( - Field(Reference("⌿definitions⌿ErrorSource⌿pointer"), TypeRef(Reference("⌿definitions⌿Meta⌿copyright"))), - Field(Reference("⌿definitions⌿ErrorSource⌿parameter"), TypeRef(Reference("⌿definitions⌿Meta⌿copyright"))) + Field(Reference("⌿definitions⌿ErrorSource⌿pointer"), Opt(Str(None, TypeMeta(Some("""A JSON Pointer [RFC6901] to the associated entity in the request document [e.g. "/data" for a primary data object, or "/data/attributes/title" for a specific attribute]."""), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿ErrorSource⌿parameter"), Opt(Str(None, TypeMeta(Some("A string indicating which URI query parameter caused the error."), List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 2"), List())), Reference("⌿definitions⌿Meta") → TypeDef(Reference("⌿definitions⌿Meta"), Seq( - Field(Reference("⌿definitions⌿Meta⌿copyright"), TypeRef(Reference("⌿definitions⌿Meta⌿copyright"))) + Field(Reference("⌿definitions⌿Meta⌿copyright"), Opt(Str(None, TypeMeta(Some("Zalando SE Copyright notice"), List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 1"), List())), Reference("⌿definitions⌿ModelSchema") → TypeDef(Reference("⌿definitions⌿ModelSchema"), Seq( Field(Reference("⌿definitions⌿ModelSchema⌿name"), Str(None, TypeMeta(Some("Product name"), List()))), + Field(Reference("⌿definitions⌿ModelSchema⌿description"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), Field(Reference("⌿definitions⌿ModelSchema⌿sizeRegister"), Str(None, TypeMeta(None, List("maxLength(10)", "minLength(10)", """pattern("""+"""""""""+"""/[1-9][A-Z0-9]*/"""+"""""""""+""".r)""")))), Field(Reference("⌿definitions⌿ModelSchema⌿brand"), Str(None, TypeMeta(Some("Zalando brand code"), List("maxLength(3)", "minLength(3)", """pattern("""+"""""""""+"""/[A-Z0-9]{3,3}/"""+"""""""""+""".r)""")))), Field(Reference("⌿definitions⌿ModelSchema⌿partnerArticleModelId"), BInt(TypeMeta(Some("???"), List()))), - Field(Reference("⌿definitions⌿ModelSchema⌿description"), TypeRef(Reference("⌿definitions⌿Meta⌿copyright"))), - Field(Reference("⌿definitions⌿ModelSchema⌿ageGroups"), TypeRef(Reference("⌿definitions⌿ModelSchema⌿ageGroups"))), - Field(Reference("⌿definitions⌿ModelSchema⌿keywords"), TypeRef(Reference("⌿definitions⌿ModelSchema⌿keywords"))), - Field(Reference("⌿definitions⌿ModelSchema⌿lengthRegister"), TypeRef(Reference("⌿definitions⌿ModelSchema⌿lengthRegister"))), + Field(Reference("⌿definitions⌿ModelSchema⌿keywords"), Opt(Str(None, TypeMeta(Some("Product Keywords. Comma-Space (', ') separated Keyword List. A keyword may contain letters both upper and lowercase as well as numbers and spaces. Each keyword has a maximum length of 255 characters. "), List("""pattern("""+"""""""""+"""/([\w\s]{1,255}|([\w\s]{1,255}, )+[\w\s]{1,255})/"""+"""""""""+""".r)"""))), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿ModelSchema⌿lengthRegister"), Opt(Str(None, TypeMeta(Some("Zalando Product Length Grid"), List("maxLength(10)", "minLength(10)", """pattern("""+"""""""""+"""/[1-9][A-Z0-9]*/"""+"""""""""+""".r)"""))), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿ModelSchema⌿specialDescriptions"), Opt(ArrResult(Str(None, TypeMeta(Some("Each occurance of the 'specialDescription' node will be transformed into a single line in the Zalando Shop Frontend "), List())), TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿ModelSchema⌿articleModelAttributes"), Opt(ArrResult(Str(None, TypeMeta(None, List())), TypeMeta(Some("Optional collection of product attributes - if present at least one attribute is required "), List("minItems(1)"))), TypeMeta(None, List()))), Field(Reference("⌿definitions⌿ModelSchema⌿silhouetteId"), TypeRef(Reference("⌿definitions⌿ModelSchema⌿silhouetteId"))), - Field(Reference("⌿definitions⌿ModelSchema⌿specialDescriptions"), TypeRef(Reference("⌿definitions⌿ModelSchema⌿specialDescriptions"))), - Field(Reference("⌿definitions⌿ModelSchema⌿articleModelAttributes"), TypeRef(Reference("⌿definitions⌿ModelSchema⌿specialDescriptions"))) + Field(Reference("⌿definitions⌿ModelSchema⌿ageGroups"), ArrResult(TypeRef(Reference("⌿definitions⌿ModelSchema⌿ageGroups⌿Seq⌿Enum")), TypeMeta(None, List("maxItems(4)")))) ), TypeMeta(Some("Named types: 11"), List())), Reference("⌿definitions⌿Error") → TypeDef(Reference("⌿definitions⌿Error"), Seq( - Field(Reference("⌿definitions⌿Error⌿source"), TypeRef(Reference("⌿definitions⌿Error⌿source"))), - Field(Reference("⌿definitions⌿Error⌿code"), TypeRef(Reference("⌿definitions⌿Meta⌿copyright"))), - Field(Reference("⌿definitions⌿Error⌿status"), TypeRef(Reference("⌿definitions⌿Meta⌿copyright"))), - Field(Reference("⌿definitions⌿Error⌿detail"), TypeRef(Reference("⌿definitions⌿Meta⌿copyright"))), - Field(Reference("⌿definitions⌿Error⌿title"), TypeRef(Reference("⌿definitions⌿Meta⌿copyright"))) + Field(Reference("⌿definitions⌿Error⌿code"), Opt(Str(None, TypeMeta(Some("An application-specific error code, expressed as a string value."), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Error⌿status"), Opt(Str(None, TypeMeta(Some("The HTTP status code applicable to this p roblem, expressed as a string value."), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Error⌿detail"), Opt(Str(None, TypeMeta(Some("A human-readable explanation specific to this occurrence of the problem."), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Error⌿title"), Opt(Str(None, TypeMeta(Some("A short, human-readable summary of the problem that SHOULD NOT change from occurrence to occurrenc of the problem, except for purposes of localization."), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Error⌿source"), Opt(TypeRef(Reference("⌿definitions⌿ErrorSource")), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 5"), List())), Reference("⌿definitions⌿Links") → TypeDef(Reference("⌿definitions⌿Links"), Seq( - Field(Reference("⌿definitions⌿Links⌿self"), TypeRef(Reference("⌿definitions⌿Meta⌿copyright"))), - Field(Reference("⌿definitions⌿Links⌿related"), TypeRef(Reference("⌿definitions⌿Meta⌿copyright"))) + Field(Reference("⌿definitions⌿Links⌿self"), Opt(Str(None, TypeMeta(Some("The link that generated the current response document"), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Links⌿related"), Opt(Str(None, TypeMeta(Some("A related resource link when the primary data represents a resource relationship"), List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 2"), List())), - Reference("⌿definitions⌿Meta⌿copyright") → - Opt(Str(None, TypeMeta(Some("Zalando SE Copyright notice"), List())), TypeMeta(None, List())), - Reference("⌿definitions⌿ModelSchema⌿keywords") → - Opt(Str(None, TypeMeta(Some("Product Keywords. Comma-Space (', ') separated Keyword List. A keyword may contain letters both upper and lowercase as well as numbers and spaces. Each keyword has a maximum length of 255 characters. "), List("""pattern("""+"""""""""+"""/([\w\s]{1,255}|([\w\s]{1,255}, )+[\w\s]{1,255})/"""+"""""""""+""".r)"""))), TypeMeta(None, List())), - Reference("⌿definitions⌿ModelSchema⌿specialDescriptions") → - Opt(TypeRef(Reference("⌿definitions⌿ModelSchema⌿specialDescriptions⌿Opt")), TypeMeta(None, List())), - Reference("⌿definitions⌿ModelSchemaRoot⌿data") → - Opt(TypeRef(Reference("⌿definitions⌿ModelSchema")), TypeMeta(None, List())), - Reference("⌿definitions⌿Error⌿source") → - Opt(TypeRef(Reference("⌿definitions⌿ErrorSource")), TypeMeta(None, List())), - Reference("⌿definitions⌿ModelSchemaRoot⌿links") → - Opt(TypeRef(Reference("⌿definitions⌿Links")), TypeMeta(None, List())), Reference("⌿definitions⌿ModelSchema⌿silhouetteId") → EnumTrait(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")""")), Set( @@ -175,22 +163,12 @@ object error_in_array_yaml extends WithModel { EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "etui", TypeMeta(Some("etui"), List())) )), - Reference("⌿definitions⌿ModelSchema⌿lengthRegister") → - Opt(Str(None, TypeMeta(Some("Zalando Product Length Grid"), List("maxLength(10)", "minLength(10)", """pattern("""+"""""""""+"""/[1-9][A-Z0-9]*/"""+"""""""""+""".r)"""))), TypeMeta(None, List())), - Reference("⌿definitions⌿Errors⌿errors") → - Opt(TypeRef(Reference("⌿definitions⌿Errors⌿errors⌿Opt")), TypeMeta(None, List())), - Reference("⌿definitions⌿ModelSchema⌿ageGroups") → - ArrResult(TypeRef(Reference("⌿definitions⌿ModelSchema⌿ageGroups⌿ArrResult")), TypeMeta(None, List("maxItems(4)"))), - Reference("⌿definitions⌿ModelSchemaRoot⌿meta") → - Opt(TypeRef(Reference("⌿definitions⌿Meta")), TypeMeta(None, List())), Reference("⌿definitions⌿ModelSchema⌿silhouetteId⌿jacket") → EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "jacket", TypeMeta(Some("jacket"), List())), Reference("⌿definitions⌿ModelSchema⌿silhouetteId⌿nightwear_combination") → EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "nightwear_combination", TypeMeta(Some("nightwear_combination"), List())), Reference("⌿definitions⌿ModelSchema⌿silhouetteId⌿sun") → EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "sun", TypeMeta(Some("sun"), List())), - Reference("⌿definitions⌿ModelSchema⌿specialDescriptions⌿Opt") → - ArrResult(Str(None, TypeMeta(Some("Each occurance of the 'specialDescription' node will be transformed into a single line in the Zalando Shop Frontend "), List())), TypeMeta(None, List())), Reference("⌿definitions⌿ModelSchema⌿silhouetteId⌿voucher") → EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "voucher", TypeMeta(Some("voucher"), List())), Reference("⌿definitions⌿ModelSchema⌿silhouetteId⌿nail") → @@ -219,8 +197,6 @@ object error_in_array_yaml extends WithModel { EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "system", TypeMeta(Some("system"), List())), Reference("⌿definitions⌿ModelSchema⌿silhouetteId⌿scarf") → EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "scarf", TypeMeta(Some("scarf"), List())), - Reference("⌿definitions⌿Errors⌿errors⌿Opt") → - ArrResult(TypeRef(Reference("⌿definitions⌿Error")), TypeMeta(Some("All errors"), List())), Reference("⌿definitions⌿ModelSchema⌿silhouetteId⌿keychain") → EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "keychain", TypeMeta(Some("keychain"), List())), Reference("⌿definitions⌿ModelSchema⌿silhouetteId⌿hair") → @@ -343,15 +319,6 @@ object error_in_array_yaml extends WithModel { EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "tights", TypeMeta(Some("tights"), List())), Reference("⌿definitions⌿ModelSchema⌿silhouetteId⌿trouser") → EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "trouser", TypeMeta(Some("trouser"), List())), - Reference("⌿definitions⌿ModelSchema⌿ageGroups⌿ArrResult") → - EnumTrait(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), TypeMeta(None, List("""enum("baby,kid,teen,adult")""")), - Set( - EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "baby", TypeMeta(Some("baby"), List())), - EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "kid", TypeMeta(Some("kid"), List())), - EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "teen", TypeMeta(Some("teen"), List())), - EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "adult", TypeMeta(Some("adult"), List())) - - )), Reference("⌿definitions⌿ModelSchema⌿silhouetteId⌿backpack") → EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "backpack", TypeMeta(Some("backpack"), List())), Reference("⌿definitions⌿ModelSchema⌿silhouetteId⌿shoe_accessoires") → @@ -382,14 +349,23 @@ object error_in_array_yaml extends WithModel { EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "ball", TypeMeta(Some("ball"), List())), Reference("⌿definitions⌿ModelSchema⌿silhouetteId⌿belt") → EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "belt", TypeMeta(Some("belt"), List())), - Reference("⌿definitions⌿ModelSchema⌿ageGroups⌿ArrResult⌿adult") → - EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "adult", TypeMeta(Some("adult"), List())), - Reference("⌿definitions⌿ModelSchema⌿ageGroups⌿ArrResult⌿baby") → + Reference("⌿definitions⌿ModelSchema⌿ageGroups⌿Seq⌿Enum") → + EnumTrait(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), TypeMeta(None, List("""enum("baby,kid,teen,adult")""")), + Set( EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "baby", TypeMeta(Some("baby"), List())), - Reference("⌿definitions⌿ModelSchema⌿ageGroups⌿ArrResult⌿teen") → + EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "kid", TypeMeta(Some("kid"), List())), EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "teen", TypeMeta(Some("teen"), List())), - Reference("⌿definitions⌿ModelSchema⌿ageGroups⌿ArrResult⌿kid") → - EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "kid", TypeMeta(Some("kid"), List())) + EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "adult", TypeMeta(Some("adult"), List())) + + )), + Reference("⌿definitions⌿ModelSchema⌿ageGroups⌿Seq⌿Enum⌿adult") → + EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "adult", TypeMeta(Some("adult"), List())), + Reference("⌿definitions⌿ModelSchema⌿ageGroups⌿Seq⌿Enum⌿baby") → + EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "baby", TypeMeta(Some("baby"), List())), + Reference("⌿definitions⌿ModelSchema⌿ageGroups⌿Seq⌿Enum⌿kid") → + EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "kid", TypeMeta(Some("kid"), List())), + Reference("⌿definitions⌿ModelSchema⌿ageGroups⌿Seq⌿Enum⌿teen") → + EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "teen", TypeMeta(Some("teen"), List())) ) def parameters = Map[ParameterRef, Parameter]( diff --git a/play-scala-generator/src/test/scala/model/resources.expanded_polymorphism_yaml.scala b/play-scala-generator/src/test/scala/model/resources.expanded_polymorphism_yaml.scala index 0098e4fa..6fae08cf 100644 --- a/play-scala-generator/src/test/scala/model/resources.expanded_polymorphism_yaml.scala +++ b/play-scala-generator/src/test/scala/model/resources.expanded_polymorphism_yaml.scala @@ -16,7 +16,7 @@ object expanded_polymorphism_yaml extends WithModel { TypeDef(Reference("⌿definitions⌿NewPet"), Seq( Field(Reference("⌿definitions⌿NewPet⌿name"), Str(None, TypeMeta(None, List()))), - Field(Reference("⌿definitions⌿NewPet⌿tag"), TypeRef(Reference("⌿definitions⌿NewPet⌿tag"))) + Field(Reference("⌿definitions⌿NewPet⌿tag"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 2"), List())), Reference("⌿definitions⌿Pet") → AllOf(Reference("⌿definitions⌿Pet⌿Pet"), TypeMeta(Some("Schemas: 2"), List()), Seq( @@ -33,18 +33,14 @@ object expanded_polymorphism_yaml extends WithModel { Seq( Field(Reference("⌿definitions⌿Pet⌿id"), Lng(TypeMeta(Some("int64"), List()))) ), TypeMeta(Some("Named types: 1"), List())), - Reference("⌿definitions⌿NewPet⌿tag") → - Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List())), Reference("⌿paths⌿/pets/{id}⌿delete⌿id") → Lng(TypeMeta(Some("int64"), List())), Reference("⌿paths⌿/pets⌿get⌿limit") → Opt(Intgr(TypeMeta(Some("int32"), List("max(10.toInt, false)", "min(1.toInt, false)"))), TypeMeta(None, List())), Reference("⌿paths⌿/pets⌿get⌿tags") → - Opt(TypeRef(Reference("⌿paths⌿/pets⌿get⌿tags⌿Opt")), TypeMeta(None, List())), + Opt(Arr(Str(None, TypeMeta(None, List())), TypeMeta(None, List()), "csv"), TypeMeta(None, List())), Reference("⌿paths⌿/pets/{id}⌿delete⌿responses⌿204") → Null(TypeMeta(None, List())), - Reference("⌿paths⌿/pets⌿get⌿tags⌿Opt") → - Arr(Str(None, TypeMeta(None, List())), TypeMeta(None, List()), "csv"), Reference("⌿paths⌿/pets⌿get⌿responses⌿200") → ArrResult(TypeRef(Reference("⌿definitions⌿Pet")), TypeMeta(None, List())) ) diff --git a/play-scala-generator/src/test/scala/model/resources.foodpanda_yaml.scala b/play-scala-generator/src/test/scala/model/resources.foodpanda_yaml.scala new file mode 100644 index 00000000..0b981545 --- /dev/null +++ b/play-scala-generator/src/test/scala/model/resources.foodpanda_yaml.scala @@ -0,0 +1,92 @@ +package de.zalando.model +import de.zalando.apifirst.Application._ +import de.zalando.apifirst.Domain._ +import de.zalando.apifirst.ParameterPlace +import de.zalando.apifirst.naming._ +import de.zalando.apifirst.Hypermedia._ +import de.zalando.apifirst.Http._ +import de.zalando.apifirst.Security +import java.net.URL +import Security._ +//noinspection ScalaStyle +object foodpanda_yaml extends WithModel { + + def types = Map[Reference, Type]( + Reference("⌿definitions⌿VendorsResponse") → + TypeDef(Reference("⌿definitions⌿VendorsResponse"), + Seq( + Field(Reference("⌿definitions⌿VendorsResponse⌿total_hits"), Intgr(TypeMeta(Some("int32"), List("min(0.toInt, false)")))), + Field(Reference("⌿definitions⌿VendorsResponse⌿vendors"), Opt(ArrResult(TypeRef(Reference("⌿definitions⌿Vendor")), TypeMeta(None, List())), TypeMeta(None, List()))) + ), TypeMeta(Some("Named types: 2"), List())), + Reference("⌿definitions⌿Location") → + TypeDef(Reference("⌿definitions⌿Location"), + Seq( + Field(Reference("⌿definitions⌿Location⌿latitude"), Flt(TypeMeta(Some("float"), List("max(90.toFloat, false)", "min(-90.toFloat, false)")))), + Field(Reference("⌿definitions⌿Location⌿longitude"), Flt(TypeMeta(Some("float"), List("max(180.toFloat, false)", "min(-180.toFloat, false)")))) + ), TypeMeta(Some("Named types: 2"), List())), + Reference("⌿definitions⌿Vendor") → + TypeDef(Reference("⌿definitions⌿Vendor"), + Seq( + Field(Reference("⌿definitions⌿Vendor⌿id"), Lng(TypeMeta(Some("int64"), List("min(1.toLong, false)")))), + Field(Reference("⌿definitions⌿Vendor⌿location"), Opt(TypeRef(Reference("⌿definitions⌿Location")), TypeMeta(None, List()))) + ), TypeMeta(Some("Named types: 2"), List())), + Reference("⌿definitions⌿VendorQuery") → + TypeDef(Reference("⌿definitions⌿VendorQuery"), + Seq( + Field(Reference("⌿definitions⌿VendorQuery⌿vendor_codes"), Opt(ArrResult(Str(None, TypeMeta(None, List())), TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿VendorQuery⌿includes"), Opt(TypeRef(Reference("⌿definitions⌿VendorQuery⌿includes⌿Option⌿Enum")), TypeMeta(None, List()))) + ), TypeMeta(Some("Named types: 2"), List())), + Reference("⌿definitions⌿VendorQuery⌿includes⌿Option⌿Enum") → + EnumTrait(Str(None, TypeMeta(None, List("""enum("menus,payments")"""))), TypeMeta(None, List("""enum("menus,payments")""")), + Set( + EnumObject(Str(None, TypeMeta(None, List("""enum("menus,payments")"""))), "menus", TypeMeta(Some("menus"), List())), + EnumObject(Str(None, TypeMeta(None, List("""enum("menus,payments")"""))), "payments", TypeMeta(Some("payments"), List())) + + )), + Reference("⌿paths⌿/vendors⌿get⌿responses⌿200") → + Intgr(TypeMeta(Some("int32"), List())), + Reference("⌿definitions⌿VendorQuery⌿includes⌿Option⌿Enum⌿menus") → + EnumObject(Str(None, TypeMeta(None, List("""enum("menus,payments")"""))), "menus", TypeMeta(Some("menus"), List())), + Reference("⌿definitions⌿VendorQuery⌿includes⌿Option⌿Enum⌿payments") → + EnumObject(Str(None, TypeMeta(None, List("""enum("menus,payments")"""))), "payments", TypeMeta(Some("payments"), List())) +) + + def parameters = Map[ParameterRef, Parameter]( + ParameterRef( Reference("⌿paths⌿/vendors⌿get⌿query")) → Parameter("query", TypeRef(Reference("⌿definitions⌿VendorQuery")), None, None, ".+", encode = false, ParameterPlace.withName("body")) +) + def basePath: String = "/api" + def discriminators: DiscriminatorLookupTable = Map[Reference, Reference]( + ) + def securityDefinitions: SecurityDefinitionsTable = Map[String, Security.Definition]( + +) +def stateTransitions: StateTransitionsTable = Map[State, Map[State, TransitionProperties]]() +def calls: Seq[ApiCall] = Seq( + ApiCall(GET, Path(Reference("⌿vendors")), + HandlerCall( + "com.foodpanda.popsey.api", + "FoodpandaYaml", + instantiate = false, + "searchVendors",parameters = + Seq( + ParameterRef(Reference("⌿paths⌿/vendors⌿get⌿query")) + ) + ), + Set.empty[MimeType], + Set(MimeType("application/json")), + Map.empty[String, Seq[Class[Exception]]], + TypesResponseInfo( + Map[Int, ParameterRef]( + 200 -> ParameterRef(Reference("⌿paths⌿/vendors⌿get⌿responses⌿200")) + ), None), + StateResponseInfo( + Map[Int, State]( + 200 -> Self + ), None), + Set.empty[Security.Constraint])) + +def packageName: Option[String] = Some("com.foodpanda.popsey.api") + +def model = new StrictModel(calls, types, parameters, discriminators, basePath, packageName, stateTransitions, securityDefinitions) + +} \ No newline at end of file diff --git a/play-scala-generator/src/test/scala/model/resources.form_data_yaml.scala b/play-scala-generator/src/test/scala/model/resources.form_data_yaml.scala index 489a4750..6badf810 100644 --- a/play-scala-generator/src/test/scala/model/resources.form_data_yaml.scala +++ b/play-scala-generator/src/test/scala/model/resources.form_data_yaml.scala @@ -23,21 +23,19 @@ object form_data_yaml extends WithModel { Reference("⌿paths⌿/multipart⌿post⌿responses⌿200") → TypeDef(Reference("⌿paths⌿/multipart⌿post⌿responses⌿200"), Seq( - Field(Reference("⌿paths⌿/multipart⌿post⌿responses⌿200⌿name"), TypeRef(Reference("⌿paths⌿/both⌿post⌿responses⌿200⌿name"))), - Field(Reference("⌿paths⌿/multipart⌿post⌿responses⌿200⌿year"), TypeRef(Reference("⌿paths⌿/both⌿post⌿year"))), - Field(Reference("⌿paths⌿/multipart⌿post⌿responses⌿200⌿fileSize"), TypeRef(Reference("⌿paths⌿/both⌿post⌿year"))), - Field(Reference("⌿paths⌿/multipart⌿post⌿responses⌿200⌿fileName"), TypeRef(Reference("⌿paths⌿/both⌿post⌿responses⌿200⌿name"))) + Field(Reference("⌿paths⌿/multipart⌿post⌿responses⌿200⌿name"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿paths⌿/multipart⌿post⌿responses⌿200⌿year"), Opt(BInt(TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿paths⌿/multipart⌿post⌿responses⌿200⌿fileSize"), Opt(BInt(TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿paths⌿/multipart⌿post⌿responses⌿200⌿fileName"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 4"), List())), Reference("⌿paths⌿/both⌿post⌿responses⌿200") → TypeDef(Reference("⌿paths⌿/both⌿post⌿responses⌿200"), Seq( - Field(Reference("⌿paths⌿/both⌿post⌿responses⌿200⌿name"), TypeRef(Reference("⌿paths⌿/both⌿post⌿responses⌿200⌿name"))), - Field(Reference("⌿paths⌿/both⌿post⌿responses⌿200⌿year"), TypeRef(Reference("⌿paths⌿/both⌿post⌿year"))), - Field(Reference("⌿paths⌿/both⌿post⌿responses⌿200⌿avatarSize"), TypeRef(Reference("⌿paths⌿/both⌿post⌿year"))), - Field(Reference("⌿paths⌿/both⌿post⌿responses⌿200⌿ringtoneSize"), TypeRef(Reference("⌿paths⌿/both⌿post⌿year"))) - ), TypeMeta(Some("Named types: 4"), List())), - Reference("⌿paths⌿/both⌿post⌿responses⌿200⌿name") → - Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List())) + Field(Reference("⌿paths⌿/both⌿post⌿responses⌿200⌿name"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿paths⌿/both⌿post⌿responses⌿200⌿year"), Opt(BInt(TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿paths⌿/both⌿post⌿responses⌿200⌿avatarSize"), Opt(BInt(TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿paths⌿/both⌿post⌿responses⌿200⌿ringtoneSize"), Opt(BInt(TypeMeta(None, List())), TypeMeta(None, List()))) + ), TypeMeta(Some("Named types: 4"), List())) ) def parameters = Map[ParameterRef, Parameter]( diff --git a/play-scala-generator/src/test/scala/model/resources.full_petstore_api_yaml.scala b/play-scala-generator/src/test/scala/model/resources.full_petstore_api_yaml.scala index 0676f5ef..288c0d5b 100644 --- a/play-scala-generator/src/test/scala/model/resources.full_petstore_api_yaml.scala +++ b/play-scala-generator/src/test/scala/model/resources.full_petstore_api_yaml.scala @@ -15,59 +15,45 @@ object full_petstore_api_yaml extends WithModel { Reference("⌿definitions⌿User") → TypeDef(Reference("⌿definitions⌿User"), Seq( - Field(Reference("⌿definitions⌿User⌿email"), TypeRef(Reference("⌿definitions⌿Order⌿status"))), - Field(Reference("⌿definitions⌿User⌿username"), TypeRef(Reference("⌿definitions⌿Order⌿status"))), - Field(Reference("⌿definitions⌿User⌿userStatus"), TypeRef(Reference("⌿definitions⌿Order⌿quantity"))), - Field(Reference("⌿definitions⌿User⌿lastName"), TypeRef(Reference("⌿definitions⌿Order⌿status"))), - Field(Reference("⌿definitions⌿User⌿firstName"), TypeRef(Reference("⌿definitions⌿Order⌿status"))), - Field(Reference("⌿definitions⌿User⌿id"), TypeRef(Reference("⌿definitions⌿Order⌿petId"))), - Field(Reference("⌿definitions⌿User⌿phone"), TypeRef(Reference("⌿definitions⌿Order⌿status"))), - Field(Reference("⌿definitions⌿User⌿password"), TypeRef(Reference("⌿definitions⌿Order⌿status"))) + Field(Reference("⌿definitions⌿User⌿email"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿User⌿username"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿User⌿userStatus"), Opt(Intgr(TypeMeta(Some("User Status"), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿User⌿lastName"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿User⌿firstName"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿User⌿id"), Opt(Lng(TypeMeta(Some("int64"), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿User⌿phone"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿User⌿password"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 8"), List())), Reference("⌿definitions⌿Order") → TypeDef(Reference("⌿definitions⌿Order"), Seq( - Field(Reference("⌿definitions⌿Order⌿shipDate"), TypeRef(Reference("⌿definitions⌿Order⌿shipDate"))), - Field(Reference("⌿definitions⌿Order⌿quantity"), TypeRef(Reference("⌿definitions⌿Order⌿quantity"))), - Field(Reference("⌿definitions⌿Order⌿petId"), TypeRef(Reference("⌿definitions⌿Order⌿petId"))), - Field(Reference("⌿definitions⌿Order⌿id"), TypeRef(Reference("⌿definitions⌿Order⌿petId"))), - Field(Reference("⌿definitions⌿Order⌿complete"), TypeRef(Reference("⌿definitions⌿Order⌿complete"))), - Field(Reference("⌿definitions⌿Order⌿status"), TypeRef(Reference("⌿definitions⌿Order⌿status"))) + Field(Reference("⌿definitions⌿Order⌿shipDate"), Opt(DateTime(TypeMeta(Some("date-time"), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Order⌿quantity"), Opt(Intgr(TypeMeta(Some("int32"), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Order⌿petId"), Opt(Lng(TypeMeta(Some("int64"), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Order⌿id"), Opt(Lng(TypeMeta(Some("int64"), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Order⌿complete"), Opt(Bool(TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Order⌿status"), Opt(Str(None, TypeMeta(Some("Order Status"), List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 6"), List())), Reference("⌿definitions⌿Tag") → TypeDef(Reference("⌿definitions⌿Tag"), Seq( - Field(Reference("⌿definitions⌿Tag⌿id"), TypeRef(Reference("⌿definitions⌿Order⌿petId"))), - Field(Reference("⌿definitions⌿Tag⌿name"), TypeRef(Reference("⌿definitions⌿Order⌿status"))) + Field(Reference("⌿definitions⌿Tag⌿id"), Opt(Lng(TypeMeta(Some("int64"), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Tag⌿name"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 2"), List())), Reference("⌿definitions⌿Pet") → TypeDef(Reference("⌿definitions⌿Pet"), Seq( Field(Reference("⌿definitions⌿Pet⌿name"), Str(None, TypeMeta(None, List()))), - Field(Reference("⌿definitions⌿Pet⌿tags"), TypeRef(Reference("⌿definitions⌿Pet⌿tags"))), - Field(Reference("⌿definitions⌿Pet⌿photoUrls"), TypeRef(Reference("⌿definitions⌿Pet⌿photoUrls"))), - Field(Reference("⌿definitions⌿Pet⌿id"), TypeRef(Reference("⌿definitions⌿Order⌿petId"))), - Field(Reference("⌿definitions⌿Pet⌿status"), TypeRef(Reference("⌿definitions⌿Order⌿status"))), - Field(Reference("⌿definitions⌿Pet⌿category"), TypeRef(Reference("⌿definitions⌿Pet⌿category"))) + Field(Reference("⌿definitions⌿Pet⌿photoUrls"), ArrResult(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Pet⌿id"), Opt(Lng(TypeMeta(Some("int64"), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Pet⌿status"), Opt(Str(None, TypeMeta(Some("pet status in the store"), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Pet⌿tags"), Opt(ArrResult(TypeRef(Reference("⌿definitions⌿Tag")), TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Pet⌿category"), Opt(TypeRef(Reference("⌿definitions⌿Tag")), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 6"), List())), - Reference("⌿definitions⌿Order⌿status") → - Opt(Str(None, TypeMeta(Some("Order Status"), List())), TypeMeta(None, List())), - Reference("⌿definitions⌿Order⌿petId") → - Opt(Lng(TypeMeta(Some("int64"), List())), TypeMeta(None, List())), - Reference("⌿definitions⌿Order⌿shipDate") → - Opt(DateTime(TypeMeta(Some("date-time"), List())), TypeMeta(None, List())), - Reference("⌿definitions⌿Order⌿complete") → - Opt(Bool(TypeMeta(None, List())), TypeMeta(None, List())), - Reference("⌿definitions⌿Pet⌿tags") → - Opt(TypeRef(Reference("⌿definitions⌿Pet⌿tags⌿Opt")), TypeMeta(None, List())), - Reference("⌿definitions⌿Order⌿quantity") → - Opt(Intgr(TypeMeta(Some("int32"), List())), TypeMeta(None, List())), - Reference("⌿definitions⌿Pet⌿photoUrls") → - ArrResult(Str(None, TypeMeta(None, List())), TypeMeta(None, List())), - Reference("⌿definitions⌿Pet⌿category") → - Opt(TypeRef(Reference("⌿definitions⌿Tag")), TypeMeta(None, List())), Reference("⌿paths⌿/users/{username}⌿get⌿username") → Str(None, TypeMeta(None, List())), + Reference("⌿paths⌿/users/login⌿get⌿username") → + Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List())), Reference("⌿paths⌿/pets⌿post⌿body") → Opt(TypeRef(Reference("⌿definitions⌿Pet")), TypeMeta(None, List())), Reference("⌿paths⌿/users/{username}⌿put⌿body") → @@ -77,17 +63,11 @@ object full_petstore_api_yaml extends WithModel { Reference("⌿paths⌿/pets/{petId}⌿delete⌿petId") → Lng(TypeMeta(Some("int64"), List())), Reference("⌿paths⌿/users/createWithList⌿post⌿body") → - Opt(TypeRef(Reference("⌿paths⌿/users/createWithList⌿post⌿body⌿Opt")), TypeMeta(None, List())), + Opt(ArrResult(TypeRef(Reference("⌿definitions⌿User")), TypeMeta(None, List())), TypeMeta(None, List())), Reference("⌿paths⌿/pets/findByStatus⌿get⌿status") → - Opt(TypeRef(Reference("⌿paths⌿/pets/findByStatus⌿get⌿status⌿Opt")), TypeMeta(None, List())), - Reference("⌿definitions⌿Pet⌿tags⌿Opt") → - ArrResult(TypeRef(Reference("⌿definitions⌿Tag")), TypeMeta(None, List())), + Opt(Arr(Str(None, TypeMeta(None, List())), TypeMeta(None, List()), "multi"), TypeMeta(None, List())), Reference("⌿paths⌿/users/createWithList⌿post⌿responses⌿default") → Null(TypeMeta(None, List())), - Reference("⌿paths⌿/pets/findByStatus⌿get⌿status⌿Opt") → - Arr(Str(None, TypeMeta(None, List())), TypeMeta(None, List()), "multi"), - Reference("⌿paths⌿/users/createWithList⌿post⌿body⌿Opt") → - ArrResult(TypeRef(Reference("⌿definitions⌿User")), TypeMeta(None, List())), Reference("⌿paths⌿/pets/findByStatus⌿get⌿responses⌿200") → ArrResult(TypeRef(Reference("⌿definitions⌿Pet")), TypeMeta(None, List())) ) @@ -106,12 +86,12 @@ object full_petstore_api_yaml extends WithModel { ParameterRef( Reference("⌿paths⌿/users/createWithList⌿post⌿body")) → Parameter("body", TypeRef(Reference("⌿paths⌿/users/createWithList⌿post⌿body")), None, None, ".+", encode = false, ParameterPlace.withName("body")), ParameterRef( Reference("⌿paths⌿/users/{username}⌿get⌿username")) → Parameter("username", Str(None, TypeMeta(None, List())), None, None, "[^/]+", encode = true, ParameterPlace.withName("path")), ParameterRef( Reference("⌿paths⌿/users/{username}⌿delete⌿username")) → Parameter("username", Str(None, TypeMeta(None, List())), None, None, "[^/]+", encode = true, ParameterPlace.withName("path")), - ParameterRef( Reference("⌿paths⌿/users/login⌿get⌿password")) → Parameter("password", TypeRef(Reference("⌿definitions⌿Order⌿status")), None, None, ".+", encode = true, ParameterPlace.withName("query")), + ParameterRef( Reference("⌿paths⌿/users/login⌿get⌿password")) → Parameter("password", TypeRef(Reference("⌿paths⌿/users/login⌿get⌿username")), None, None, ".+", encode = true, ParameterPlace.withName("query")), ParameterRef( Reference("⌿paths⌿/stores/order⌿post⌿body")) → Parameter("body", TypeRef(Reference("⌿paths⌿/stores/order⌿post⌿body")), None, None, ".+", encode = false, ParameterPlace.withName("body")), ParameterRef( Reference("⌿paths⌿/users/createWithArray⌿post⌿body")) → Parameter("body", TypeRef(Reference("⌿paths⌿/users/createWithList⌿post⌿body")), None, None, ".+", encode = false, ParameterPlace.withName("body")), ParameterRef( Reference("⌿paths⌿/users⌿post⌿body")) → Parameter("body", TypeRef(Reference("⌿paths⌿/users/{username}⌿put⌿body")), None, None, ".+", encode = false, ParameterPlace.withName("body")), ParameterRef( Reference("⌿paths⌿/pets/findByStatus⌿get⌿status")) → Parameter("status", TypeRef(Reference("⌿paths⌿/pets/findByStatus⌿get⌿status")), None, None, ".+", encode = true, ParameterPlace.withName("query")), - ParameterRef( Reference("⌿paths⌿/users/login⌿get⌿username")) → Parameter("username", TypeRef(Reference("⌿definitions⌿Order⌿status")), None, None, ".+", encode = true, ParameterPlace.withName("query")), + ParameterRef( Reference("⌿paths⌿/users/login⌿get⌿username")) → Parameter("username", TypeRef(Reference("⌿paths⌿/users/login⌿get⌿username")), None, None, ".+", encode = true, ParameterPlace.withName("query")), ParameterRef( Reference("⌿paths⌿/pets/{petId}⌿post⌿status")) → Parameter("status", Str(None, TypeMeta(None, List())), None, None, ".+", encode = true, ParameterPlace.withName("formData")), ParameterRef( Reference("⌿paths⌿/pets/findByTags⌿get⌿tags")) → Parameter("tags", TypeRef(Reference("⌿paths⌿/pets/findByStatus⌿get⌿status")), None, None, ".+", encode = true, ParameterPlace.withName("query")), ParameterRef( Reference("⌿paths⌿/stores/order/{orderId}⌿get⌿orderId")) → Parameter("orderId", Str(None, TypeMeta(None, List())), None, None, "[^/]+", encode = true, ParameterPlace.withName("path")) diff --git a/play-scala-generator/src/test/scala/model/resources.hackweek_yaml.scala b/play-scala-generator/src/test/scala/model/resources.hackweek_yaml.scala index 43c7bc75..7c228f05 100644 --- a/play-scala-generator/src/test/scala/model/resources.hackweek_yaml.scala +++ b/play-scala-generator/src/test/scala/model/resources.hackweek_yaml.scala @@ -15,68 +15,56 @@ object hackweek_yaml extends WithModel { Reference("⌿definitions⌿ModelSchemaRoot") → TypeDef(Reference("⌿definitions⌿ModelSchemaRoot"), Seq( - Field(Reference("⌿definitions⌿ModelSchemaRoot⌿data"), TypeRef(Reference("⌿definitions⌿ModelSchemaRoot⌿data"))), - Field(Reference("⌿definitions⌿ModelSchemaRoot⌿meta"), TypeRef(Reference("⌿definitions⌿ModelSchemaRoot⌿meta"))), - Field(Reference("⌿definitions⌿ModelSchemaRoot⌿links"), TypeRef(Reference("⌿definitions⌿ModelSchemaRoot⌿links"))) + Field(Reference("⌿definitions⌿ModelSchemaRoot⌿data"), Opt(TypeRef(Reference("⌿definitions⌿ModelSchema")), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿ModelSchemaRoot⌿meta"), Opt(TypeRef(Reference("⌿definitions⌿Meta")), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿ModelSchemaRoot⌿links"), Opt(TypeRef(Reference("⌿definitions⌿Links")), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 3"), List())), Reference("⌿definitions⌿Errors") → TypeDef(Reference("⌿definitions⌿Errors"), Seq( - Field(Reference("⌿definitions⌿Errors⌿errors"), TypeRef(Reference("⌿definitions⌿Errors⌿errors"))) + Field(Reference("⌿definitions⌿Errors⌿errors"), Opt(ArrResult(TypeRef(Reference("⌿definitions⌿Error")), TypeMeta(Some("All errors"), List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 1"), List())), Reference("⌿definitions⌿ErrorSource") → TypeDef(Reference("⌿definitions⌿ErrorSource"), Seq( - Field(Reference("⌿definitions⌿ErrorSource⌿pointer"), TypeRef(Reference("⌿definitions⌿Meta⌿copyright"))), - Field(Reference("⌿definitions⌿ErrorSource⌿parameter"), TypeRef(Reference("⌿definitions⌿Meta⌿copyright"))) + Field(Reference("⌿definitions⌿ErrorSource⌿pointer"), Opt(Str(None, TypeMeta(Some("""A JSON Pointer [RFC6901] to the associated entity in the request document [e.g. "/data" for a primary data object, or "/data/attributes/title" for a specific attribute]."""), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿ErrorSource⌿parameter"), Opt(Str(None, TypeMeta(Some("A string indicating which URI query parameter caused the error."), List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 2"), List())), Reference("⌿definitions⌿Meta") → TypeDef(Reference("⌿definitions⌿Meta"), Seq( - Field(Reference("⌿definitions⌿Meta⌿copyright"), TypeRef(Reference("⌿definitions⌿Meta⌿copyright"))) + Field(Reference("⌿definitions⌿Meta⌿copyright"), Opt(Str(None, TypeMeta(Some("Zalando SE Copyright notice"), List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 1"), List())), Reference("⌿definitions⌿ModelSchema") → TypeDef(Reference("⌿definitions⌿ModelSchema"), Seq( Field(Reference("⌿definitions⌿ModelSchema⌿name"), Str(None, TypeMeta(Some("Product name"), List()))), + Field(Reference("⌿definitions⌿ModelSchema⌿description"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), Field(Reference("⌿definitions⌿ModelSchema⌿sizeRegister"), Str(None, TypeMeta(None, List("maxLength(10)", "minLength(10)", """pattern("""+"""""""""+"""/[1-9][A-Z0-9]*/"""+"""""""""+""".r)""")))), Field(Reference("⌿definitions⌿ModelSchema⌿brand"), Str(None, TypeMeta(Some("Zalando brand code"), List("maxLength(3)", "minLength(3)", """pattern("""+"""""""""+"""/[A-Z0-9]{3,3}/"""+"""""""""+""".r)""")))), Field(Reference("⌿definitions⌿ModelSchema⌿partnerArticleModelId"), BInt(TypeMeta(Some("???"), List()))), - Field(Reference("⌿definitions⌿ModelSchema⌿description"), TypeRef(Reference("⌿definitions⌿Meta⌿copyright"))), - Field(Reference("⌿definitions⌿ModelSchema⌿ageGroups"), TypeRef(Reference("⌿definitions⌿ModelSchema⌿ageGroups"))), - Field(Reference("⌿definitions⌿ModelSchema⌿keywords"), TypeRef(Reference("⌿definitions⌿ModelSchema⌿keywords"))), - Field(Reference("⌿definitions⌿ModelSchema⌿lengthRegister"), TypeRef(Reference("⌿definitions⌿ModelSchema⌿lengthRegister"))), + Field(Reference("⌿definitions⌿ModelSchema⌿keywords"), Opt(Str(None, TypeMeta(Some("Product Keywords. Comma-Space (', ') separated Keyword List. A keyword may contain letters both upper and lowercase as well as numbers and spaces. Each keyword has a maximum length of 255 characters. "), List("""pattern("""+"""""""""+"""/([\w\s]{1,255}|([\w\s]{1,255}, )+[\w\s]{1,255})/"""+"""""""""+""".r)"""))), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿ModelSchema⌿lengthRegister"), Opt(Str(None, TypeMeta(Some("Zalando Product Length Grid"), List("maxLength(10)", "minLength(10)", """pattern("""+"""""""""+"""/[1-9][A-Z0-9]*/"""+"""""""""+""".r)"""))), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿ModelSchema⌿specialDescriptions"), Opt(ArrResult(Str(None, TypeMeta(Some("Each occurance of the 'specialDescription' node will be transformed into a single line in the Zalando Shop Frontend "), List())), TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿ModelSchema⌿articleModelAttributes"), Opt(ArrResult(Str(None, TypeMeta(None, List())), TypeMeta(Some("Optional collection of product attributes - if present at least one attribute is required "), List("minItems(1)"))), TypeMeta(None, List()))), Field(Reference("⌿definitions⌿ModelSchema⌿silhouetteId"), TypeRef(Reference("⌿definitions⌿ModelSchema⌿silhouetteId"))), - Field(Reference("⌿definitions⌿ModelSchema⌿specialDescriptions"), TypeRef(Reference("⌿definitions⌿ModelSchema⌿specialDescriptions"))), - Field(Reference("⌿definitions⌿ModelSchema⌿articleModelAttributes"), TypeRef(Reference("⌿definitions⌿ModelSchema⌿specialDescriptions"))) + Field(Reference("⌿definitions⌿ModelSchema⌿ageGroups"), ArrResult(TypeRef(Reference("⌿definitions⌿ModelSchema⌿ageGroups⌿Seq⌿Enum")), TypeMeta(None, List("maxItems(4)")))) ), TypeMeta(Some("Named types: 11"), List())), Reference("⌿definitions⌿Error") → TypeDef(Reference("⌿definitions⌿Error"), Seq( - Field(Reference("⌿definitions⌿Error⌿source"), TypeRef(Reference("⌿definitions⌿Error⌿source"))), - Field(Reference("⌿definitions⌿Error⌿code"), TypeRef(Reference("⌿definitions⌿Meta⌿copyright"))), - Field(Reference("⌿definitions⌿Error⌿status"), TypeRef(Reference("⌿definitions⌿Meta⌿copyright"))), - Field(Reference("⌿definitions⌿Error⌿detail"), TypeRef(Reference("⌿definitions⌿Meta⌿copyright"))), - Field(Reference("⌿definitions⌿Error⌿title"), TypeRef(Reference("⌿definitions⌿Meta⌿copyright"))) + Field(Reference("⌿definitions⌿Error⌿code"), Opt(Str(None, TypeMeta(Some("An application-specific error code, expressed as a string value."), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Error⌿status"), Opt(Str(None, TypeMeta(Some("The HTTP status code applicable to this p roblem, expressed as a string value."), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Error⌿detail"), Opt(Str(None, TypeMeta(Some("A human-readable explanation specific to this occurrence of the problem."), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Error⌿title"), Opt(Str(None, TypeMeta(Some("A short, human-readable summary of the problem that SHOULD NOT change from occurrence to occurrenc of the problem, except for purposes of localization."), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Error⌿source"), Opt(TypeRef(Reference("⌿definitions⌿ErrorSource")), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 5"), List())), Reference("⌿definitions⌿Links") → TypeDef(Reference("⌿definitions⌿Links"), Seq( - Field(Reference("⌿definitions⌿Links⌿self"), TypeRef(Reference("⌿definitions⌿Meta⌿copyright"))), - Field(Reference("⌿definitions⌿Links⌿related"), TypeRef(Reference("⌿definitions⌿Meta⌿copyright"))) + Field(Reference("⌿definitions⌿Links⌿self"), Opt(Str(None, TypeMeta(Some("The link that generated the current response document"), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Links⌿related"), Opt(Str(None, TypeMeta(Some("A related resource link when the primary data represents a resource relationship"), List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 2"), List())), - Reference("⌿definitions⌿Meta⌿copyright") → - Opt(Str(None, TypeMeta(Some("Zalando SE Copyright notice"), List())), TypeMeta(None, List())), - Reference("⌿definitions⌿ModelSchema⌿keywords") → - Opt(Str(None, TypeMeta(Some("Product Keywords. Comma-Space (', ') separated Keyword List. A keyword may contain letters both upper and lowercase as well as numbers and spaces. Each keyword has a maximum length of 255 characters. "), List("""pattern("""+"""""""""+"""/([\w\s]{1,255}|([\w\s]{1,255}, )+[\w\s]{1,255})/"""+"""""""""+""".r)"""))), TypeMeta(None, List())), - Reference("⌿definitions⌿ModelSchema⌿specialDescriptions") → - Opt(TypeRef(Reference("⌿definitions⌿ModelSchema⌿specialDescriptions⌿Opt")), TypeMeta(None, List())), - Reference("⌿definitions⌿ModelSchemaRoot⌿data") → - Opt(TypeRef(Reference("⌿definitions⌿ModelSchema")), TypeMeta(None, List())), - Reference("⌿definitions⌿Error⌿source") → - Opt(TypeRef(Reference("⌿definitions⌿ErrorSource")), TypeMeta(None, List())), - Reference("⌿definitions⌿ModelSchemaRoot⌿links") → - Opt(TypeRef(Reference("⌿definitions⌿Links")), TypeMeta(None, List())), Reference("⌿definitions⌿ModelSchema⌿silhouetteId") → EnumTrait(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")""")), Set( @@ -175,22 +163,12 @@ object hackweek_yaml extends WithModel { EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "etui", TypeMeta(Some("etui"), List())) )), - Reference("⌿definitions⌿ModelSchema⌿lengthRegister") → - Opt(Str(None, TypeMeta(Some("Zalando Product Length Grid"), List("maxLength(10)", "minLength(10)", """pattern("""+"""""""""+"""/[1-9][A-Z0-9]*/"""+"""""""""+""".r)"""))), TypeMeta(None, List())), - Reference("⌿definitions⌿Errors⌿errors") → - Opt(TypeRef(Reference("⌿definitions⌿Errors⌿errors⌿Opt")), TypeMeta(None, List())), - Reference("⌿definitions⌿ModelSchema⌿ageGroups") → - ArrResult(TypeRef(Reference("⌿definitions⌿ModelSchema⌿ageGroups⌿ArrResult")), TypeMeta(None, List("maxItems(4)"))), - Reference("⌿definitions⌿ModelSchemaRoot⌿meta") → - Opt(TypeRef(Reference("⌿definitions⌿Meta")), TypeMeta(None, List())), Reference("⌿definitions⌿ModelSchema⌿silhouetteId⌿jacket") → EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "jacket", TypeMeta(Some("jacket"), List())), Reference("⌿definitions⌿ModelSchema⌿silhouetteId⌿nightwear_combination") → EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "nightwear_combination", TypeMeta(Some("nightwear_combination"), List())), Reference("⌿definitions⌿ModelSchema⌿silhouetteId⌿sun") → EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "sun", TypeMeta(Some("sun"), List())), - Reference("⌿definitions⌿ModelSchema⌿specialDescriptions⌿Opt") → - ArrResult(Str(None, TypeMeta(Some("Each occurance of the 'specialDescription' node will be transformed into a single line in the Zalando Shop Frontend "), List())), TypeMeta(None, List())), Reference("⌿definitions⌿ModelSchema⌿silhouetteId⌿voucher") → EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "voucher", TypeMeta(Some("voucher"), List())), Reference("⌿definitions⌿ModelSchema⌿silhouetteId⌿nail") → @@ -219,8 +197,6 @@ object hackweek_yaml extends WithModel { EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "system", TypeMeta(Some("system"), List())), Reference("⌿definitions⌿ModelSchema⌿silhouetteId⌿scarf") → EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "scarf", TypeMeta(Some("scarf"), List())), - Reference("⌿definitions⌿Errors⌿errors⌿Opt") → - ArrResult(TypeRef(Reference("⌿definitions⌿Error")), TypeMeta(Some("All errors"), List())), Reference("⌿definitions⌿ModelSchema⌿silhouetteId⌿keychain") → EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "keychain", TypeMeta(Some("keychain"), List())), Reference("⌿definitions⌿ModelSchema⌿silhouetteId⌿hair") → @@ -343,15 +319,6 @@ object hackweek_yaml extends WithModel { EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "tights", TypeMeta(Some("tights"), List())), Reference("⌿definitions⌿ModelSchema⌿silhouetteId⌿trouser") → EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "trouser", TypeMeta(Some("trouser"), List())), - Reference("⌿definitions⌿ModelSchema⌿ageGroups⌿ArrResult") → - EnumTrait(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), TypeMeta(None, List("""enum("baby,kid,teen,adult")""")), - Set( - EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "baby", TypeMeta(Some("baby"), List())), - EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "kid", TypeMeta(Some("kid"), List())), - EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "teen", TypeMeta(Some("teen"), List())), - EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "adult", TypeMeta(Some("adult"), List())) - - )), Reference("⌿definitions⌿ModelSchema⌿silhouetteId⌿backpack") → EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "backpack", TypeMeta(Some("backpack"), List())), Reference("⌿definitions⌿ModelSchema⌿silhouetteId⌿shoe_accessoires") → @@ -382,14 +349,23 @@ object hackweek_yaml extends WithModel { EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "ball", TypeMeta(Some("ball"), List())), Reference("⌿definitions⌿ModelSchema⌿silhouetteId⌿belt") → EnumObject(Str(None, TypeMeta(None, List("""enum("ankle_boots,nightdress,low_shoe,ballerina_shoe,voucher,belt,skates,eye_cosmetic,dress,sleeping_bag,system,other_accessoires,bag,etui,bikini_top,hair,undershirt,bathroom,bedroom,one_piece_nightwear,combination_clothing,sun,t_shirt_top,watch,night_shirt,pumps,stocking,boots,beach_trouser,tent,lip_cosmetic,underpant,skincare,backpack,pullover,lounge,sandals,suit_accessoires,coat,other_equipment,beach_shirt,bicycle,ski,cardigan,protector,beach_accessoires,jacket,one_piece_beachwear,headgear,shoe_accessoires,sneaker,headphones,kitchen,bicycle_equipment,ball,nightwear_combination,fitness,tights,one_piece_suit,vest,bustier,first_shoe,one_piece_underwear,bikini_combination,face_cosmetic,fragrance,glasses,shirt,trouser,racket,travel_equipment,case,backless_slipper,umbrella,underwear_combination,jewellery,shave,skirt,bathrobe,wallet,cleansing,night_trouser,corsage,peeling,beauty_equipment,nail,toys,bra,gloves,living,keychain,scarf,boards")"""))), "belt", TypeMeta(Some("belt"), List())), - Reference("⌿definitions⌿ModelSchema⌿ageGroups⌿ArrResult⌿adult") → - EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "adult", TypeMeta(Some("adult"), List())), - Reference("⌿definitions⌿ModelSchema⌿ageGroups⌿ArrResult⌿baby") → + Reference("⌿definitions⌿ModelSchema⌿ageGroups⌿Seq⌿Enum") → + EnumTrait(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), TypeMeta(None, List("""enum("baby,kid,teen,adult")""")), + Set( EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "baby", TypeMeta(Some("baby"), List())), - Reference("⌿definitions⌿ModelSchema⌿ageGroups⌿ArrResult⌿teen") → + EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "kid", TypeMeta(Some("kid"), List())), EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "teen", TypeMeta(Some("teen"), List())), - Reference("⌿definitions⌿ModelSchema⌿ageGroups⌿ArrResult⌿kid") → - EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "kid", TypeMeta(Some("kid"), List())) + EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "adult", TypeMeta(Some("adult"), List())) + + )), + Reference("⌿definitions⌿ModelSchema⌿ageGroups⌿Seq⌿Enum⌿adult") → + EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "adult", TypeMeta(Some("adult"), List())), + Reference("⌿definitions⌿ModelSchema⌿ageGroups⌿Seq⌿Enum⌿baby") → + EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "baby", TypeMeta(Some("baby"), List())), + Reference("⌿definitions⌿ModelSchema⌿ageGroups⌿Seq⌿Enum⌿kid") → + EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "kid", TypeMeta(Some("kid"), List())), + Reference("⌿definitions⌿ModelSchema⌿ageGroups⌿Seq⌿Enum⌿teen") → + EnumObject(Str(None, TypeMeta(None, List("""enum("baby,kid,teen,adult")"""))), "teen", TypeMeta(Some("teen"), List())) ) def parameters = Map[ParameterRef, Parameter]( diff --git a/play-scala-generator/src/test/scala/model/resources.heroku_petstore_api_yaml.scala b/play-scala-generator/src/test/scala/model/resources.heroku_petstore_api_yaml.scala index aac70197..fe47f1f2 100644 --- a/play-scala-generator/src/test/scala/model/resources.heroku_petstore_api_yaml.scala +++ b/play-scala-generator/src/test/scala/model/resources.heroku_petstore_api_yaml.scala @@ -15,13 +15,9 @@ object heroku_petstore_api_yaml extends WithModel { Reference("⌿definitions⌿Pet") → TypeDef(Reference("⌿definitions⌿Pet"), Seq( - Field(Reference("⌿definitions⌿Pet⌿name"), TypeRef(Reference("⌿definitions⌿Pet⌿name"))), - Field(Reference("⌿definitions⌿Pet⌿birthday"), TypeRef(Reference("⌿definitions⌿Pet⌿birthday"))) + Field(Reference("⌿definitions⌿Pet⌿name"), Opt(Str(None, TypeMeta(None, List("maxLength(100)", "minLength(3)"))), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Pet⌿birthday"), Opt(Intgr(TypeMeta(Some("int32"), List("max(100.toInt, false)", "min(1.toInt, false)"))), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 2"), List())), - Reference("⌿definitions⌿Pet⌿name") → - Opt(Str(None, TypeMeta(None, List("maxLength(100)", "minLength(3)"))), TypeMeta(None, List())), - Reference("⌿definitions⌿Pet⌿birthday") → - Opt(Intgr(TypeMeta(Some("int32"), List("max(100.toInt, false)", "min(1.toInt, false)"))), TypeMeta(None, List())), Reference("⌿paths⌿/{petId}⌿get⌿petId") → Str(None, TypeMeta(None, List())), Reference("⌿paths⌿/⌿get⌿limit") → diff --git a/play-scala-generator/src/test/scala/model/resources.instagram_api_yaml.scala b/play-scala-generator/src/test/scala/model/resources.instagram_api_yaml.scala index 0327c81d..3c2e3d42 100644 --- a/play-scala-generator/src/test/scala/model/resources.instagram_api_yaml.scala +++ b/play-scala-generator/src/test/scala/model/resources.instagram_api_yaml.scala @@ -15,331 +15,281 @@ object instagram_api_yaml extends WithModel { Reference("⌿definitions⌿User") → TypeDef(Reference("⌿definitions⌿User"), Seq( - Field(Reference("⌿definitions⌿User⌿website"), TypeRef(Reference("⌿definitions⌿Media⌿filter"))), - Field(Reference("⌿definitions⌿User⌿profile_picture"), TypeRef(Reference("⌿definitions⌿Media⌿filter"))), - Field(Reference("⌿definitions⌿User⌿username"), TypeRef(Reference("⌿definitions⌿Media⌿filter"))), - Field(Reference("⌿definitions⌿User⌿full_name"), TypeRef(Reference("⌿definitions⌿Media⌿filter"))), - Field(Reference("⌿definitions⌿User⌿bio"), TypeRef(Reference("⌿definitions⌿Media⌿filter"))), - Field(Reference("⌿definitions⌿User⌿id"), TypeRef(Reference("⌿definitions⌿Media⌿id"))), - Field(Reference("⌿definitions⌿User⌿counts"), TypeRef(Reference("⌿definitions⌿User⌿counts"))) + Field(Reference("⌿definitions⌿User⌿website"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿User⌿profile_picture"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿User⌿username"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿User⌿full_name"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿User⌿bio"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿User⌿id"), Opt(BInt(TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿User⌿counts"), Opt(TypeRef(Reference("⌿definitions⌿User⌿counts⌿Option⌿counts")), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 7"), List())), Reference("⌿definitions⌿Image") → TypeDef(Reference("⌿definitions⌿Image"), Seq( - Field(Reference("⌿definitions⌿Image⌿width"), TypeRef(Reference("⌿definitions⌿Media⌿id"))), - Field(Reference("⌿definitions⌿Image⌿height"), TypeRef(Reference("⌿definitions⌿Media⌿id"))), - Field(Reference("⌿definitions⌿Image⌿url"), TypeRef(Reference("⌿definitions⌿Media⌿filter"))) + Field(Reference("⌿definitions⌿Image⌿width"), Opt(BInt(TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Image⌿height"), Opt(BInt(TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Image⌿url"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 3"), List())), Reference("⌿definitions⌿Tag") → TypeDef(Reference("⌿definitions⌿Tag"), Seq( - Field(Reference("⌿definitions⌿Tag⌿media_count"), TypeRef(Reference("⌿definitions⌿Media⌿id"))), - Field(Reference("⌿definitions⌿Tag⌿name"), TypeRef(Reference("⌿definitions⌿Media⌿filter"))) + Field(Reference("⌿definitions⌿Tag⌿media_count"), Opt(BInt(TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Tag⌿name"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 2"), List())), Reference("⌿definitions⌿Comment") → TypeDef(Reference("⌿definitions⌿Comment"), Seq( - Field(Reference("⌿definitions⌿Comment⌿id"), TypeRef(Reference("⌿definitions⌿Media⌿filter"))), - Field(Reference("⌿definitions⌿Comment⌿created_time"), TypeRef(Reference("⌿definitions⌿Media⌿filter"))), - Field(Reference("⌿definitions⌿Comment⌿text"), TypeRef(Reference("⌿definitions⌿Media⌿filter"))), - Field(Reference("⌿definitions⌿Comment⌿from"), TypeRef(Reference("⌿definitions⌿Comment⌿from"))) + Field(Reference("⌿definitions⌿Comment⌿id"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Comment⌿created_time"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Comment⌿text"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Comment⌿from"), Opt(TypeRef(Reference("⌿definitions⌿MiniProfile")), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 4"), List())), Reference("⌿definitions⌿Media") → TypeDef(Reference("⌿definitions⌿Media"), Seq( - Field(Reference("⌿definitions⌿Media⌿location"), TypeRef(Reference("⌿definitions⌿Media⌿location"))), - Field(Reference("⌿definitions⌿Media⌿created_time"), TypeRef(Reference("⌿definitions⌿Media⌿id"))), - Field(Reference("⌿definitions⌿Media⌿comments:"), TypeRef(Reference("⌿definitions⌿Media⌿comments:"))), - Field(Reference("⌿definitions⌿Media⌿tags"), TypeRef(Reference("⌿definitions⌿Media⌿tags"))), - Field(Reference("⌿definitions⌿Media⌿users_in_photo"), TypeRef(Reference("⌿definitions⌿Media⌿users_in_photo"))), - Field(Reference("⌿definitions⌿Media⌿filter"), TypeRef(Reference("⌿definitions⌿Media⌿filter"))), - Field(Reference("⌿definitions⌿Media⌿likes"), TypeRef(Reference("⌿definitions⌿Media⌿likes"))), - Field(Reference("⌿definitions⌿Media⌿id"), TypeRef(Reference("⌿definitions⌿Media⌿id"))), - Field(Reference("⌿definitions⌿Media⌿videos"), TypeRef(Reference("⌿definitions⌿Media⌿videos"))), - Field(Reference("⌿definitions⌿Media⌿type"), TypeRef(Reference("⌿definitions⌿Media⌿filter"))), - Field(Reference("⌿definitions⌿Media⌿images"), TypeRef(Reference("⌿definitions⌿Media⌿images"))), - Field(Reference("⌿definitions⌿Media⌿user"), TypeRef(Reference("⌿definitions⌿Comment⌿from"))) + Field(Reference("⌿definitions⌿Media⌿created_time"), Opt(BInt(TypeMeta(Some("Epoc time (ms)"), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Media⌿filter"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Media⌿id"), Opt(BInt(TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Media⌿type"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Media⌿location"), Opt(TypeRef(Reference("⌿definitions⌿Location")), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Media⌿comments:"), Opt(TypeRef(Reference("⌿definitions⌿Media⌿comments:⌿Option⌿comments:")), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Media⌿tags"), Opt(ArrResult(TypeRef(Reference("⌿definitions⌿Tag")), TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Media⌿users_in_photo"), Opt(ArrResult(TypeRef(Reference("⌿definitions⌿MiniProfile")), TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Media⌿likes"), Opt(TypeRef(Reference("⌿definitions⌿Media⌿likes⌿Option⌿likes")), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Media⌿videos"), Opt(TypeRef(Reference("⌿definitions⌿Media⌿videos⌿Option⌿videos")), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Media⌿images"), Opt(TypeRef(Reference("⌿definitions⌿Media⌿images⌿Option⌿images")), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Media⌿user"), Opt(TypeRef(Reference("⌿definitions⌿MiniProfile")), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 12"), List())), Reference("⌿definitions⌿Like") → TypeDef(Reference("⌿definitions⌿Like"), Seq( - Field(Reference("⌿definitions⌿Like⌿first_name"), TypeRef(Reference("⌿definitions⌿Media⌿filter"))), - Field(Reference("⌿definitions⌿Like⌿id"), TypeRef(Reference("⌿definitions⌿Media⌿filter"))), - Field(Reference("⌿definitions⌿Like⌿last_name"), TypeRef(Reference("⌿definitions⌿Media⌿filter"))), - Field(Reference("⌿definitions⌿Like⌿type"), TypeRef(Reference("⌿definitions⌿Media⌿filter"))), - Field(Reference("⌿definitions⌿Like⌿user_name"), TypeRef(Reference("⌿definitions⌿Media⌿filter"))) + Field(Reference("⌿definitions⌿Like⌿first_name"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Like⌿id"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Like⌿last_name"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Like⌿type"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Like⌿user_name"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 5"), List())), Reference("⌿definitions⌿Location") → TypeDef(Reference("⌿definitions⌿Location"), Seq( - Field(Reference("⌿definitions⌿Location⌿id"), TypeRef(Reference("⌿definitions⌿Media⌿filter"))), - Field(Reference("⌿definitions⌿Location⌿name"), TypeRef(Reference("⌿definitions⌿Media⌿filter"))), - Field(Reference("⌿definitions⌿Location⌿latitude"), TypeRef(Reference("⌿definitions⌿Location⌿latitude"))), - Field(Reference("⌿definitions⌿Location⌿longitude"), TypeRef(Reference("⌿definitions⌿Location⌿latitude"))) + Field(Reference("⌿definitions⌿Location⌿id"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Location⌿name"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Location⌿latitude"), Opt(BDcml(TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Location⌿longitude"), Opt(BDcml(TypeMeta(None, List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 4"), List())), Reference("⌿definitions⌿MiniProfile") → TypeDef(Reference("⌿definitions⌿MiniProfile"), Seq( - Field(Reference("⌿definitions⌿MiniProfile⌿user_name"), TypeRef(Reference("⌿definitions⌿Media⌿filter"))), - Field(Reference("⌿definitions⌿MiniProfile⌿full_name"), TypeRef(Reference("⌿definitions⌿Media⌿filter"))), - Field(Reference("⌿definitions⌿MiniProfile⌿id"), TypeRef(Reference("⌿definitions⌿Media⌿id"))), - Field(Reference("⌿definitions⌿MiniProfile⌿profile_picture"), TypeRef(Reference("⌿definitions⌿Media⌿filter"))) + Field(Reference("⌿definitions⌿MiniProfile⌿user_name"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿MiniProfile⌿full_name"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿MiniProfile⌿id"), Opt(BInt(TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿MiniProfile⌿profile_picture"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 4"), List())), - Reference("⌿definitions⌿Media⌿filter") → - Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List())), - Reference("⌿definitions⌿Media⌿tags") → - Opt(TypeRef(Reference("⌿definitions⌿Media⌿tags⌿Opt")), TypeMeta(None, List())), - Reference("⌿definitions⌿Media⌿id") → - Opt(BInt(TypeMeta(None, List())), TypeMeta(None, List())), - Reference("⌿definitions⌿Media⌿images") → - Opt(TypeRef(Reference("⌿definitions⌿Media⌿images⌿Opt")), TypeMeta(None, List())), - Reference("⌿definitions⌿Media⌿likes") → - Opt(TypeRef(Reference("⌿definitions⌿Media⌿likes⌿Opt")), TypeMeta(None, List())), - Reference("⌿definitions⌿Media⌿comments:") → - Opt(TypeRef(Reference("⌿definitions⌿Media⌿comments:⌿Opt")), TypeMeta(None, List())), - Reference("⌿definitions⌿Comment⌿from") → - Opt(TypeRef(Reference("⌿definitions⌿MiniProfile")), TypeMeta(None, List())), - Reference("⌿definitions⌿Media⌿videos") → - Opt(TypeRef(Reference("⌿definitions⌿Media⌿videos⌿Opt")), TypeMeta(None, List())), - Reference("⌿definitions⌿Media⌿location") → - Opt(TypeRef(Reference("⌿definitions⌿Location")), TypeMeta(None, List())), - Reference("⌿definitions⌿Media⌿users_in_photo") → - Opt(TypeRef(Reference("⌿definitions⌿Media⌿users_in_photo⌿Opt")), TypeMeta(None, List())), - Reference("⌿definitions⌿Location⌿latitude") → - Opt(BDcml(TypeMeta(None, List())), TypeMeta(None, List())), Reference("⌿parameters⌿user-id-param⌿user-id") → BDcml(TypeMeta(None, List())), - Reference("⌿definitions⌿User⌿counts") → - Opt(TypeRef(Reference("⌿definitions⌿User⌿counts⌿Opt")), TypeMeta(None, List())), Reference("⌿parameters⌿tag-name⌿tag-name") → Str(None, TypeMeta(None, List())), + Reference("⌿paths⌿/users/{user-id}/media/recent⌿get⌿count") → + Opt(BInt(TypeMeta(None, List())), TypeMeta(None, List())), Reference("⌿paths⌿/locations/{location-id}⌿⌿location-id") → BInt(TypeMeta(None, List())), - Reference("⌿definitions⌿Media⌿videos⌿low_resolution") → - Opt(TypeRef(Reference("⌿definitions⌿Image")), TypeMeta(None, List())), + Reference("⌿paths⌿/locations/search⌿get⌿lng") → + Opt(BDcml(TypeMeta(None, List())), TypeMeta(None, List())), + Reference("⌿paths⌿/users/{user-id}/media/recent⌿get⌿max_id") → + Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List())), Reference("⌿paths⌿/users/{user-id}/relationship⌿post⌿action") → - Opt(TypeRef(Reference("⌿paths⌿/users/{user-id}/relationship⌿post⌿action⌿Opt")), TypeMeta(None, List())), - Reference("⌿definitions⌿Media⌿tags⌿Opt") → - ArrResult(TypeRef(Reference("⌿definitions⌿Tag")), TypeMeta(None, List())), - Reference("⌿definitions⌿User⌿counts⌿Opt") → - TypeDef(Reference("⌿definitions⌿User⌿counts"), - Seq( - Field(Reference("⌿definitions⌿User⌿counts⌿media"), TypeRef(Reference("⌿definitions⌿Media⌿id"))), - Field(Reference("⌿definitions⌿User⌿counts⌿follows"), TypeRef(Reference("⌿definitions⌿Media⌿id"))), - Field(Reference("⌿definitions⌿User⌿counts⌿follwed_by"), TypeRef(Reference("⌿definitions⌿Media⌿id"))) - ), TypeMeta(Some("Named types: 3"), List())), + Opt(TypeRef(Reference("⌿paths⌿/users/{user-id}/relationship⌿post⌿action⌿Option⌿Enum")), TypeMeta(None, List())), Reference("⌿paths⌿/media/search⌿get⌿DISTANCE") → BInt(TypeMeta(None, List("""max(BigInt("5000"), false)"""))), - Reference("⌿definitions⌿Media⌿users_in_photo⌿Opt") → - ArrResult(TypeRef(Reference("⌿definitions⌿MiniProfile")), TypeMeta(None, List())), - Reference("⌿definitions⌿Media⌿comments:⌿Opt") → - TypeDef(Reference("⌿definitions⌿Media⌿comments:"), - Seq( - Field(Reference("⌿definitions⌿Media⌿comments:⌿count"), TypeRef(Reference("⌿definitions⌿Media⌿id"))), - Field(Reference("⌿definitions⌿Media⌿comments:⌿data"), TypeRef(Reference("⌿definitions⌿Media⌿comments:⌿data"))) - ), TypeMeta(Some("Named types: 2"), List())), - Reference("⌿definitions⌿Media⌿videos⌿Opt") → - TypeDef(Reference("⌿definitions⌿Media⌿videos"), - Seq( - Field(Reference("⌿definitions⌿Media⌿videos⌿low_resolution"), TypeRef(Reference("⌿definitions⌿Media⌿videos⌿low_resolution"))), - Field(Reference("⌿definitions⌿Media⌿videos⌿standard_resolution"), TypeRef(Reference("⌿definitions⌿Media⌿videos⌿low_resolution"))) - ), TypeMeta(Some("Named types: 2"), List())), - Reference("⌿definitions⌿Media⌿comments:⌿data") → - Opt(TypeRef(Reference("⌿definitions⌿Media⌿comments:⌿data⌿Opt")), TypeMeta(None, List())), - Reference("⌿definitions⌿Media⌿likes⌿Opt") → - TypeDef(Reference("⌿definitions⌿Media⌿likes"), - Seq( - Field(Reference("⌿definitions⌿Media⌿likes⌿count"), TypeRef(Reference("⌿definitions⌿Media⌿id"))), - Field(Reference("⌿definitions⌿Media⌿likes⌿data"), TypeRef(Reference("⌿definitions⌿Media⌿users_in_photo"))) - ), TypeMeta(Some("Named types: 2"), List())), - Reference("⌿definitions⌿Media⌿images⌿Opt") → - TypeDef(Reference("⌿definitions⌿Media⌿images"), + Reference("⌿definitions⌿User⌿counts⌿Option⌿counts") → + TypeDef(Reference("⌿definitions⌿User⌿counts"), Seq( - Field(Reference("⌿definitions⌿Media⌿images⌿low_resolution"), TypeRef(Reference("⌿definitions⌿Media⌿videos⌿low_resolution"))), - Field(Reference("⌿definitions⌿Media⌿images⌿thumbnail"), TypeRef(Reference("⌿definitions⌿Media⌿videos⌿low_resolution"))), - Field(Reference("⌿definitions⌿Media⌿images⌿standard_resolution"), TypeRef(Reference("⌿definitions⌿Media⌿videos⌿low_resolution"))) + Field(Reference("⌿definitions⌿User⌿counts⌿media"), Opt(BInt(TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿User⌿counts⌿follows"), Opt(BInt(TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿User⌿counts⌿follwed_by"), Opt(BInt(TypeMeta(None, List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 3"), List())), Reference("⌿paths⌿/users/self/feed⌿get⌿responses⌿200") → TypeDef(Reference("⌿paths⌿/users/self/feed⌿get⌿responses⌿200"), Seq( - Field(Reference("⌿paths⌿/users/self/feed⌿get⌿responses⌿200⌿data"), TypeRef(Reference("⌿paths⌿/users/self/feed⌿get⌿responses⌿200⌿data"))) + Field(Reference("⌿paths⌿/users/self/feed⌿get⌿responses⌿200⌿data"), Opt(ArrResult(TypeRef(Reference("⌿definitions⌿Media")), TypeMeta(None, List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 1"), List())), Reference("⌿paths⌿/media/{media-id}/comments⌿delete⌿responses⌿200") → TypeDef(Reference("⌿paths⌿/media/{media-id}/comments⌿delete⌿responses⌿200"), Seq( - Field(Reference("⌿paths⌿/media/{media-id}/comments⌿delete⌿responses⌿200⌿meta"), TypeRef(Reference("⌿paths⌿/media/{media-id}/comments⌿delete⌿responses⌿200⌿meta"))), - Field(Reference("⌿paths⌿/media/{media-id}/comments⌿delete⌿responses⌿200⌿data"), TypeRef(Reference("⌿definitions⌿Media⌿filter"))) + Field(Reference("⌿paths⌿/media/{media-id}/comments⌿delete⌿responses⌿200⌿data"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿paths⌿/media/{media-id}/comments⌿delete⌿responses⌿200⌿meta"), Opt(TypeRef(Reference("⌿paths⌿/media/{media-id}/comments⌿delete⌿responses⌿200⌿meta⌿Option⌿meta")), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 2"), List())), Reference("⌿paths⌿/users/{user-id}/follows⌿get⌿responses⌿200") → TypeDef(Reference("⌿paths⌿/users/{user-id}/follows⌿get⌿responses⌿200"), Seq( - Field(Reference("⌿paths⌿/users/{user-id}/follows⌿get⌿responses⌿200⌿data"), TypeRef(Reference("⌿definitions⌿Media⌿users_in_photo"))) + Field(Reference("⌿paths⌿/users/{user-id}/follows⌿get⌿responses⌿200⌿data"), Opt(ArrResult(TypeRef(Reference("⌿definitions⌿MiniProfile")), TypeMeta(None, List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 1"), List())), Reference("⌿paths⌿/tags/{tag-name}/media/recent⌿get⌿responses⌿200") → TypeDef(Reference("⌿paths⌿/tags/{tag-name}/media/recent⌿get⌿responses⌿200"), Seq( - Field(Reference("⌿paths⌿/tags/{tag-name}/media/recent⌿get⌿responses⌿200⌿data"), TypeRef(Reference("⌿definitions⌿Media⌿tags"))) + Field(Reference("⌿paths⌿/tags/{tag-name}/media/recent⌿get⌿responses⌿200⌿data"), Opt(ArrResult(TypeRef(Reference("⌿definitions⌿Tag")), TypeMeta(None, List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 1"), List())), Reference("⌿paths⌿/users/self/requested-by⌿get⌿responses⌿200") → TypeDef(Reference("⌿paths⌿/users/self/requested-by⌿get⌿responses⌿200"), Seq( - Field(Reference("⌿paths⌿/users/self/requested-by⌿get⌿responses⌿200⌿meta"), TypeRef(Reference("⌿paths⌿/tags/search⌿get⌿responses⌿200⌿meta"))), - Field(Reference("⌿paths⌿/users/self/requested-by⌿get⌿responses⌿200⌿data"), TypeRef(Reference("⌿definitions⌿Media⌿users_in_photo"))) + Field(Reference("⌿paths⌿/users/self/requested-by⌿get⌿responses⌿200⌿meta"), Opt(TypeRef(Reference("⌿paths⌿/tags/search⌿get⌿responses⌿200⌿meta⌿Option⌿meta")), TypeMeta(None, List()))), + Field(Reference("⌿paths⌿/users/self/requested-by⌿get⌿responses⌿200⌿data"), Opt(ArrResult(TypeRef(Reference("⌿definitions⌿MiniProfile")), TypeMeta(None, List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 2"), List())), Reference("⌿paths⌿/locations/{location-id}⌿get⌿responses⌿200") → TypeDef(Reference("⌿paths⌿/locations/{location-id}⌿get⌿responses⌿200"), Seq( - Field(Reference("⌿paths⌿/locations/{location-id}⌿get⌿responses⌿200⌿data"), TypeRef(Reference("⌿definitions⌿Media⌿location"))) + Field(Reference("⌿paths⌿/locations/{location-id}⌿get⌿responses⌿200⌿data"), Opt(TypeRef(Reference("⌿definitions⌿Location")), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 1"), List())), Reference("⌿paths⌿/media/{media-id}/likes⌿get⌿responses⌿200") → TypeDef(Reference("⌿paths⌿/media/{media-id}/likes⌿get⌿responses⌿200"), Seq( - Field(Reference("⌿paths⌿/media/{media-id}/likes⌿get⌿responses⌿200⌿meta"), TypeRef(Reference("⌿paths⌿/media/{media-id}/comments⌿delete⌿responses⌿200⌿meta"))), - Field(Reference("⌿paths⌿/media/{media-id}/likes⌿get⌿responses⌿200⌿data"), TypeRef(Reference("⌿paths⌿/media/{media-id}/likes⌿get⌿responses⌿200⌿data"))) + Field(Reference("⌿paths⌿/media/{media-id}/likes⌿get⌿responses⌿200⌿meta"), Opt(TypeRef(Reference("⌿paths⌿/media/{media-id}/comments⌿delete⌿responses⌿200⌿meta⌿Option⌿meta")), TypeMeta(None, List()))), + Field(Reference("⌿paths⌿/media/{media-id}/likes⌿get⌿responses⌿200⌿data"), Opt(ArrResult(TypeRef(Reference("⌿definitions⌿Like")), TypeMeta(None, List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 2"), List())), Reference("⌿paths⌿/media/search⌿get⌿responses⌿200") → TypeDef(Reference("⌿paths⌿/media/search⌿get⌿responses⌿200"), Seq( - Field(Reference("⌿paths⌿/media/search⌿get⌿responses⌿200⌿data"), TypeRef(Reference("⌿paths⌿/media/search⌿get⌿responses⌿200⌿data"))) + Field(Reference("⌿paths⌿/media/search⌿get⌿responses⌿200⌿data"), Opt(ArrResult(TypeRef(Reference("⌿paths⌿/media/search⌿get⌿responses⌿200⌿data⌿Option⌿Seq⌿data")), TypeMeta(None, List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 1"), List())), Reference("⌿paths⌿/tags/search⌿get⌿responses⌿200") → TypeDef(Reference("⌿paths⌿/tags/search⌿get⌿responses⌿200"), Seq( - Field(Reference("⌿paths⌿/tags/search⌿get⌿responses⌿200⌿meta"), TypeRef(Reference("⌿paths⌿/tags/search⌿get⌿responses⌿200⌿meta"))), - Field(Reference("⌿paths⌿/tags/search⌿get⌿responses⌿200⌿data"), TypeRef(Reference("⌿definitions⌿Media⌿tags"))) + Field(Reference("⌿paths⌿/tags/search⌿get⌿responses⌿200⌿meta"), Opt(TypeRef(Reference("⌿paths⌿/tags/search⌿get⌿responses⌿200⌿meta⌿Option⌿meta")), TypeMeta(None, List()))), + Field(Reference("⌿paths⌿/tags/search⌿get⌿responses⌿200⌿data"), Opt(ArrResult(TypeRef(Reference("⌿definitions⌿Tag")), TypeMeta(None, List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 2"), List())), - Reference("⌿paths⌿/users/{user-id}/relationship⌿post⌿action⌿Opt") → - EnumTrait(Str(None, TypeMeta(None, List("""enum("approve,unblock,block,unfollow,follow")"""))), TypeMeta(None, List("""enum("approve,unblock,block,unfollow,follow")""")), - Set( - EnumObject(Str(None, TypeMeta(None, List("""enum("approve,unblock,block,unfollow,follow")"""))), "follow", TypeMeta(Some("follow"), List())), - EnumObject(Str(None, TypeMeta(None, List("""enum("approve,unblock,block,unfollow,follow")"""))), "unblock", TypeMeta(Some("unblock"), List())), - EnumObject(Str(None, TypeMeta(None, List("""enum("approve,unblock,block,unfollow,follow")"""))), "approve", TypeMeta(Some("approve"), List())), - EnumObject(Str(None, TypeMeta(None, List("""enum("approve,unblock,block,unfollow,follow")"""))), "unfollow", TypeMeta(Some("unfollow"), List())), - EnumObject(Str(None, TypeMeta(None, List("""enum("approve,unblock,block,unfollow,follow")"""))), "block", TypeMeta(Some("block"), List())) - - )), - Reference("⌿definitions⌿Media⌿comments:⌿data⌿Opt") → - ArrResult(TypeRef(Reference("⌿definitions⌿Comment")), TypeMeta(None, List())), Reference("⌿paths⌿/users/{user-id}⌿get⌿responses⌿200") → TypeDef(Reference("⌿paths⌿/users/{user-id}⌿get⌿responses⌿200"), Seq( - Field(Reference("⌿paths⌿/users/{user-id}⌿get⌿responses⌿200⌿data"), TypeRef(Reference("⌿paths⌿/users/{user-id}⌿get⌿responses⌿200⌿data"))) + Field(Reference("⌿paths⌿/users/{user-id}⌿get⌿responses⌿200⌿data"), Opt(TypeRef(Reference("⌿definitions⌿User")), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 1"), List())), Reference("⌿paths⌿/media/{media-id}/comments⌿get⌿responses⌿200") → TypeDef(Reference("⌿paths⌿/media/{media-id}/comments⌿get⌿responses⌿200"), Seq( - Field(Reference("⌿paths⌿/media/{media-id}/comments⌿get⌿responses⌿200⌿meta"), TypeRef(Reference("⌿paths⌿/media/{media-id}/comments⌿delete⌿responses⌿200⌿meta"))), - Field(Reference("⌿paths⌿/media/{media-id}/comments⌿get⌿responses⌿200⌿data"), TypeRef(Reference("⌿definitions⌿Media⌿comments:⌿data"))) + Field(Reference("⌿paths⌿/media/{media-id}/comments⌿get⌿responses⌿200⌿meta"), Opt(TypeRef(Reference("⌿paths⌿/media/{media-id}/comments⌿delete⌿responses⌿200⌿meta⌿Option⌿meta")), TypeMeta(None, List()))), + Field(Reference("⌿paths⌿/media/{media-id}/comments⌿get⌿responses⌿200⌿data"), Opt(ArrResult(TypeRef(Reference("⌿definitions⌿Comment")), TypeMeta(None, List())), TypeMeta(None, List()))) + ), TypeMeta(Some("Named types: 2"), List())), + Reference("⌿definitions⌿Media⌿likes⌿Option⌿likes") → + TypeDef(Reference("⌿definitions⌿Media⌿likes"), + Seq( + Field(Reference("⌿definitions⌿Media⌿likes⌿count"), Opt(BInt(TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Media⌿likes⌿data"), Opt(ArrResult(TypeRef(Reference("⌿definitions⌿MiniProfile")), TypeMeta(None, List())), TypeMeta(None, List()))) + ), TypeMeta(Some("Named types: 2"), List())), + Reference("⌿definitions⌿Media⌿comments:⌿Option⌿comments:") → + TypeDef(Reference("⌿definitions⌿Media⌿comments:"), + Seq( + Field(Reference("⌿definitions⌿Media⌿comments:⌿count"), Opt(BInt(TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Media⌿comments:⌿data"), Opt(ArrResult(TypeRef(Reference("⌿definitions⌿Comment")), TypeMeta(None, List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 2"), List())), Reference("⌿paths⌿/geographies/{geo-id}/media/recent⌿get⌿responses⌿200") → Null(TypeMeta(None, List())), + Reference("⌿definitions⌿Media⌿videos⌿Option⌿videos") → + TypeDef(Reference("⌿definitions⌿Media⌿videos"), + Seq( + Field(Reference("⌿definitions⌿Media⌿videos⌿low_resolution"), Opt(TypeRef(Reference("⌿definitions⌿Image")), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Media⌿videos⌿standard_resolution"), Opt(TypeRef(Reference("⌿definitions⌿Image")), TypeMeta(None, List()))) + ), TypeMeta(Some("Named types: 2"), List())), + Reference("⌿definitions⌿Media⌿images⌿Option⌿images") → + TypeDef(Reference("⌿definitions⌿Media⌿images"), + Seq( + Field(Reference("⌿definitions⌿Media⌿images⌿low_resolution"), Opt(TypeRef(Reference("⌿definitions⌿Image")), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Media⌿images⌿thumbnail"), Opt(TypeRef(Reference("⌿definitions⌿Image")), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Media⌿images⌿standard_resolution"), Opt(TypeRef(Reference("⌿definitions⌿Image")), TypeMeta(None, List()))) + ), TypeMeta(Some("Named types: 3"), List())), Reference("⌿paths⌿/locations/search⌿get⌿responses⌿200") → TypeDef(Reference("⌿paths⌿/locations/search⌿get⌿responses⌿200"), Seq( - Field(Reference("⌿paths⌿/locations/search⌿get⌿responses⌿200⌿data"), TypeRef(Reference("⌿paths⌿/locations/search⌿get⌿responses⌿200⌿data"))) + Field(Reference("⌿paths⌿/locations/search⌿get⌿responses⌿200⌿data"), Opt(ArrResult(TypeRef(Reference("⌿definitions⌿Location")), TypeMeta(None, List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 1"), List())), - Reference("⌿paths⌿/tags/search⌿get⌿responses⌿200⌿meta") → - Opt(TypeRef(Reference("⌿paths⌿/users/self/requested-by⌿get⌿responses⌿200⌿meta⌿Opt")), TypeMeta(None, List())), - Reference("⌿paths⌿/media/{media-id}/comments⌿delete⌿responses⌿200⌿meta") → - Opt(TypeRef(Reference("⌿paths⌿/media/{media-id}/likes⌿get⌿responses⌿200⌿meta⌿Opt")), TypeMeta(None, List())), - Reference("⌿paths⌿/users/self/feed⌿get⌿responses⌿200⌿data") → - Opt(TypeRef(Reference("⌿paths⌿/users/self/feed⌿get⌿responses⌿200⌿data⌿Opt")), TypeMeta(None, List())), - Reference("⌿paths⌿/media/{media-id}/likes⌿get⌿responses⌿200⌿data") → - Opt(TypeRef(Reference("⌿paths⌿/media/{media-id}/likes⌿get⌿responses⌿200⌿data⌿Opt")), TypeMeta(None, List())), - Reference("⌿paths⌿/users/{user-id}/relationship⌿post⌿action⌿Opt⌿follow") → + Reference("⌿paths⌿/users/{user-id}/relationship⌿post⌿action⌿Option⌿Enum") → + EnumTrait(Str(None, TypeMeta(None, List("""enum("approve,unblock,block,unfollow,follow")"""))), TypeMeta(None, List("""enum("approve,unblock,block,unfollow,follow")""")), + Set( EnumObject(Str(None, TypeMeta(None, List("""enum("approve,unblock,block,unfollow,follow")"""))), "follow", TypeMeta(Some("follow"), List())), - Reference("⌿paths⌿/locations/search⌿get⌿responses⌿200⌿data") → - Opt(TypeRef(Reference("⌿paths⌿/locations/search⌿get⌿responses⌿200⌿data⌿Opt")), TypeMeta(None, List())), - Reference("⌿paths⌿/media/search⌿get⌿responses⌿200⌿data") → - Opt(TypeRef(Reference("⌿paths⌿/media/search⌿get⌿responses⌿200⌿data⌿Opt")), TypeMeta(None, List())), - Reference("⌿paths⌿/users/{user-id}⌿get⌿responses⌿200⌿data") → - Opt(TypeRef(Reference("⌿definitions⌿User")), TypeMeta(None, List())), - Reference("⌿paths⌿/users/{user-id}/relationship⌿post⌿action⌿Opt⌿unblock") → EnumObject(Str(None, TypeMeta(None, List("""enum("approve,unblock,block,unfollow,follow")"""))), "unblock", TypeMeta(Some("unblock"), List())), - Reference("⌿paths⌿/users/{user-id}/relationship⌿post⌿action⌿Opt⌿approve") → EnumObject(Str(None, TypeMeta(None, List("""enum("approve,unblock,block,unfollow,follow")"""))), "approve", TypeMeta(Some("approve"), List())), - Reference("⌿paths⌿/users/{user-id}/relationship⌿post⌿action⌿Opt⌿unfollow") → EnumObject(Str(None, TypeMeta(None, List("""enum("approve,unblock,block,unfollow,follow")"""))), "unfollow", TypeMeta(Some("unfollow"), List())), - Reference("⌿paths⌿/users/{user-id}/relationship⌿post⌿action⌿Opt⌿block") → + EnumObject(Str(None, TypeMeta(None, List("""enum("approve,unblock,block,unfollow,follow")"""))), "block", TypeMeta(Some("block"), List())) + + )), + Reference("⌿paths⌿/users/{user-id}/relationship⌿post⌿action⌿Option⌿Enum⌿unblock") → + EnumObject(Str(None, TypeMeta(None, List("""enum("approve,unblock,block,unfollow,follow")"""))), "unblock", TypeMeta(Some("unblock"), List())), + Reference("⌿paths⌿/users/{user-id}/relationship⌿post⌿action⌿Option⌿Enum⌿approve") → + EnumObject(Str(None, TypeMeta(None, List("""enum("approve,unblock,block,unfollow,follow")"""))), "approve", TypeMeta(Some("approve"), List())), + Reference("⌿paths⌿/users/{user-id}/relationship⌿post⌿action⌿Option⌿Enum⌿follow") → + EnumObject(Str(None, TypeMeta(None, List("""enum("approve,unblock,block,unfollow,follow")"""))), "follow", TypeMeta(Some("follow"), List())), + Reference("⌿paths⌿/users/{user-id}/relationship⌿post⌿action⌿Option⌿Enum⌿block") → EnumObject(Str(None, TypeMeta(None, List("""enum("approve,unblock,block,unfollow,follow")"""))), "block", TypeMeta(Some("block"), List())), - Reference("⌿paths⌿/users/self/requested-by⌿get⌿responses⌿200⌿meta⌿Opt") → + Reference("⌿paths⌿/users/{user-id}/relationship⌿post⌿action⌿Option⌿Enum⌿unfollow") → + EnumObject(Str(None, TypeMeta(None, List("""enum("approve,unblock,block,unfollow,follow")"""))), "unfollow", TypeMeta(Some("unfollow"), List())), + Reference("⌿paths⌿/tags/search⌿get⌿responses⌿200⌿meta⌿Option⌿meta") → TypeDef(Reference("⌿paths⌿/tags/search⌿get⌿responses⌿200⌿meta"), Seq( - Field(Reference("⌿paths⌿/users/self/requested-by⌿get⌿responses⌿200⌿meta⌿code"), TypeRef(Reference("⌿definitions⌿Media⌿id"))) + Field(Reference("⌿paths⌿/tags/search⌿get⌿responses⌿200⌿meta⌿code"), Opt(BInt(TypeMeta(None, List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 1"), List())), - Reference("⌿paths⌿/media/{media-id}/likes⌿get⌿responses⌿200⌿data⌿Opt") → - ArrResult(TypeRef(Reference("⌿definitions⌿Like")), TypeMeta(None, List())), - Reference("⌿paths⌿/media/search⌿get⌿responses⌿200⌿data⌿Opt") → - ArrResult(TypeRef(Reference("⌿paths⌿/media/search⌿get⌿responses⌿200⌿data⌿Opt⌿ArrResult")), TypeMeta(None, List())), - Reference("⌿paths⌿/locations/search⌿get⌿responses⌿200⌿data⌿Opt") → - ArrResult(TypeRef(Reference("⌿definitions⌿Location")), TypeMeta(None, List())), - Reference("⌿paths⌿/media/{media-id}/likes⌿get⌿responses⌿200⌿meta⌿Opt") → + Reference("⌿paths⌿/media/{media-id}/comments⌿delete⌿responses⌿200⌿meta⌿Option⌿meta") → TypeDef(Reference("⌿paths⌿/media/{media-id}/comments⌿delete⌿responses⌿200⌿meta"), Seq( - Field(Reference("⌿paths⌿/media/{media-id}/likes⌿get⌿responses⌿200⌿meta⌿code"), TypeRef(Reference("⌿definitions⌿Location⌿latitude"))) + Field(Reference("⌿paths⌿/media/{media-id}/comments⌿delete⌿responses⌿200⌿meta⌿code"), Opt(BDcml(TypeMeta(None, List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 1"), List())), - Reference("⌿paths⌿/users/self/feed⌿get⌿responses⌿200⌿data⌿Opt") → - ArrResult(TypeRef(Reference("⌿definitions⌿Media")), TypeMeta(None, List())), - Reference("⌿paths⌿/media/search⌿get⌿responses⌿200⌿data⌿Opt⌿ArrResult") → + Reference("⌿paths⌿/media/search⌿get⌿responses⌿200⌿data⌿Option⌿Seq⌿data") → AllOf(Reference("⌿paths⌿/media/search⌿get⌿responses⌿200⌿data⌿data"), TypeMeta(Some("Schemas: 2"), List()), Seq( TypeRef(Reference("⌿definitions⌿Media")), - TypeRef(Reference("⌿paths⌿/media/search⌿get⌿responses⌿200⌿data⌿Opt⌿ArrResult⌿AllOf1"))) , None), - Reference("⌿paths⌿/media/search⌿get⌿responses⌿200⌿data⌿Opt⌿ArrResult⌿AllOf1") → + TypeRef(Reference("⌿paths⌿/media/search⌿get⌿responses⌿200⌿data⌿Option⌿Seq⌿data⌿AllOf1"))) , None), + Reference("⌿paths⌿/media/search⌿get⌿responses⌿200⌿data⌿Option⌿Seq⌿data⌿AllOf1") → TypeDef(Reference("⌿paths⌿/media/search⌿get⌿responses⌿200⌿data"), Seq( - Field(Reference("⌿paths⌿/media/search⌿get⌿responses⌿200⌿data⌿distance"), TypeRef(Reference("⌿definitions⌿Location⌿latitude"))) + Field(Reference("⌿paths⌿/media/search⌿get⌿responses⌿200⌿data⌿distance"), Opt(BDcml(TypeMeta(None, List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 1"), List())) ) def parameters = Map[ParameterRef, Parameter]( - ParameterRef( Reference("⌿paths⌿/locations/{location-id}/media/recent⌿get⌿min_timestamp")) → Parameter("min_timestamp", TypeRef(Reference("⌿definitions⌿Media⌿id")), None, None, ".+", encode = true, ParameterPlace.withName("query")), + ParameterRef( Reference("⌿paths⌿/locations/{location-id}/media/recent⌿get⌿min_timestamp")) → Parameter("min_timestamp", TypeRef(Reference("⌿paths⌿/users/{user-id}/media/recent⌿get⌿count")), None, None, ".+", encode = true, ParameterPlace.withName("query")), ParameterRef( Reference("⌿paths⌿/media/{media-id}/likes⌿delete⌿media-id")) → Parameter("media-id", BInt(TypeMeta(None, List())), None, None, "[^/]+", encode = true, ParameterPlace.withName("path")), ParameterRef( Reference("⌿paths⌿/locations/{location-id}⌿get⌿location-id")) → Parameter("location-id", BInt(TypeMeta(None, List())), None, None, "[^/]+", encode = true, ParameterPlace.withName("path")), - ParameterRef( Reference("⌿paths⌿/media/search⌿get⌿MAX_TIMESTAMP")) → Parameter("MAX_TIMESTAMP", TypeRef(Reference("⌿definitions⌿Media⌿id")), None, None, ".+", encode = true, ParameterPlace.withName("query")), + ParameterRef( Reference("⌿paths⌿/media/search⌿get⌿MAX_TIMESTAMP")) → Parameter("MAX_TIMESTAMP", TypeRef(Reference("⌿paths⌿/users/{user-id}/media/recent⌿get⌿count")), None, None, ".+", encode = true, ParameterPlace.withName("query")), ParameterRef( Reference("⌿paths⌿/media/{media-id}/likes⌿post⌿media-id")) → Parameter("media-id", BInt(TypeMeta(None, List())), None, None, "[^/]+", encode = true, ParameterPlace.withName("path")), ParameterRef( Reference("⌿paths⌿/users/{user-id}/relationship⌿post⌿action")) → Parameter("action", TypeRef(Reference("⌿paths⌿/users/{user-id}/relationship⌿post⌿action")), None, None, ".+", encode = false, ParameterPlace.withName("body")), ParameterRef( Reference("⌿paths⌿/users/{user-id}⌿get⌿user-id")) → Parameter("user-id", BDcml(TypeMeta(None, List())), None, None, "[^/]+", encode = true, ParameterPlace.withName("path")), ParameterRef( Reference("⌿paths⌿/users/{user-id}/followed-by⌿get⌿user-id")) → Parameter("user-id", BDcml(TypeMeta(None, List())), None, None, "[^/]+", encode = true, ParameterPlace.withName("path")), - ParameterRef( Reference("⌿paths⌿/users/self/feed⌿get⌿count")) → Parameter("count", TypeRef(Reference("⌿definitions⌿Media⌿id")), None, None, ".+", encode = true, ParameterPlace.withName("query")), - ParameterRef( Reference("⌿paths⌿/users/self/feed⌿get⌿min_id")) → Parameter("min_id", TypeRef(Reference("⌿definitions⌿Media⌿id")), None, None, ".+", encode = true, ParameterPlace.withName("query")), - ParameterRef( Reference("⌿paths⌿/locations/{location-id}/media/recent⌿get⌿max_timestamp")) → Parameter("max_timestamp", TypeRef(Reference("⌿definitions⌿Media⌿id")), None, None, ".+", encode = true, ParameterPlace.withName("query")), - ParameterRef( Reference("⌿paths⌿/locations/search⌿get⌿foursquare_v2_id")) → Parameter("foursquare_v2_id", TypeRef(Reference("⌿definitions⌿Media⌿id")), None, None, ".+", encode = true, ParameterPlace.withName("query")), - ParameterRef( Reference("⌿paths⌿/users/{user-id}/media/recent⌿get⌿max_timestamp")) → Parameter("max_timestamp", TypeRef(Reference("⌿definitions⌿Media⌿id")), None, None, ".+", encode = true, ParameterPlace.withName("query")), - ParameterRef( Reference("⌿paths⌿/users/{user-id}/media/recent⌿get⌿min_id")) → Parameter("min_id", TypeRef(Reference("⌿definitions⌿Media⌿filter")), None, None, ".+", encode = true, ParameterPlace.withName("query")), + ParameterRef( Reference("⌿paths⌿/users/self/feed⌿get⌿count")) → Parameter("count", TypeRef(Reference("⌿paths⌿/users/{user-id}/media/recent⌿get⌿count")), None, None, ".+", encode = true, ParameterPlace.withName("query")), + ParameterRef( Reference("⌿paths⌿/users/self/feed⌿get⌿min_id")) → Parameter("min_id", TypeRef(Reference("⌿paths⌿/users/{user-id}/media/recent⌿get⌿count")), None, None, ".+", encode = true, ParameterPlace.withName("query")), + ParameterRef( Reference("⌿paths⌿/locations/{location-id}/media/recent⌿get⌿max_timestamp")) → Parameter("max_timestamp", TypeRef(Reference("⌿paths⌿/users/{user-id}/media/recent⌿get⌿count")), None, None, ".+", encode = true, ParameterPlace.withName("query")), + ParameterRef( Reference("⌿paths⌿/locations/search⌿get⌿foursquare_v2_id")) → Parameter("foursquare_v2_id", TypeRef(Reference("⌿paths⌿/users/{user-id}/media/recent⌿get⌿count")), None, None, ".+", encode = true, ParameterPlace.withName("query")), + ParameterRef( Reference("⌿paths⌿/users/{user-id}/media/recent⌿get⌿max_timestamp")) → Parameter("max_timestamp", TypeRef(Reference("⌿paths⌿/users/{user-id}/media/recent⌿get⌿count")), None, None, ".+", encode = true, ParameterPlace.withName("query")), + ParameterRef( Reference("⌿paths⌿/users/{user-id}/media/recent⌿get⌿min_id")) → Parameter("min_id", TypeRef(Reference("⌿paths⌿/users/{user-id}/media/recent⌿get⌿max_id")), None, None, ".+", encode = true, ParameterPlace.withName("query")), ParameterRef( Reference("⌿paths⌿/tags/{tag-name}⌿get⌿tag-name")) → Parameter("tag-name", Str(None, TypeMeta(None, List())), None, None, "[^/]+", encode = true, ParameterPlace.withName("path")), ParameterRef( Reference("⌿paths⌿/media/search⌿get⌿DISTANCE")) → Parameter("DISTANCE", BInt(TypeMeta(None, List("""max(BigInt("5000"), false)"""))), None, Some("1000"), ".+", encode = true, ParameterPlace.withName("query")), ParameterRef( Reference("⌿paths⌿/tags/{tag-name}/media/recent⌿get⌿tag-name")) → Parameter("tag-name", Str(None, TypeMeta(None, List())), None, None, "[^/]+", encode = true, ParameterPlace.withName("path")), - ParameterRef( Reference("⌿paths⌿/users/{user-id}/media/recent⌿get⌿min_timestamp")) → Parameter("min_timestamp", TypeRef(Reference("⌿definitions⌿Media⌿id")), None, None, ".+", encode = true, ParameterPlace.withName("query")), - ParameterRef( Reference("⌿paths⌿/media/{media-id}/comments⌿post⌿TEXT")) → Parameter("TEXT", TypeRef(Reference("⌿definitions⌿Location⌿latitude")), None, None, ".+", encode = false, ParameterPlace.withName("body")), + ParameterRef( Reference("⌿paths⌿/users/{user-id}/media/recent⌿get⌿min_timestamp")) → Parameter("min_timestamp", TypeRef(Reference("⌿paths⌿/users/{user-id}/media/recent⌿get⌿count")), None, None, ".+", encode = true, ParameterPlace.withName("query")), + ParameterRef( Reference("⌿paths⌿/media/{media-id}/comments⌿post⌿TEXT")) → Parameter("TEXT", TypeRef(Reference("⌿paths⌿/locations/search⌿get⌿lng")), None, None, ".+", encode = false, ParameterPlace.withName("body")), ParameterRef( Reference("⌿paths⌿/users/{user-id}/follows⌿get⌿user-id")) → Parameter("user-id", BDcml(TypeMeta(None, List())), None, None, "[^/]+", encode = true, ParameterPlace.withName("path")), ParameterRef( Reference("⌿paths⌿/locations/{location-id}/media/recent⌿get⌿location-id")) → Parameter("location-id", BInt(TypeMeta(None, List())), None, None, "[^/]+", encode = true, ParameterPlace.withName("path")), - ParameterRef( Reference("⌿paths⌿/users/self/feed⌿get⌿max_id")) → Parameter("max_id", TypeRef(Reference("⌿definitions⌿Media⌿id")), None, None, ".+", encode = true, ParameterPlace.withName("query")), - ParameterRef( Reference("⌿paths⌿/users/self/media/liked⌿get⌿count")) → Parameter("count", TypeRef(Reference("⌿definitions⌿Media⌿id")), None, None, ".+", encode = true, ParameterPlace.withName("query")), - ParameterRef( Reference("⌿paths⌿/media/search⌿get⌿LNG")) → Parameter("LNG", TypeRef(Reference("⌿definitions⌿Location⌿latitude")), None, None, ".+", encode = true, ParameterPlace.withName("query")), - ParameterRef( Reference("⌿paths⌿/geographies/{geo-id}/media/recent⌿get⌿min_id")) → Parameter("min_id", TypeRef(Reference("⌿definitions⌿Media⌿id")), None, None, ".+", encode = true, ParameterPlace.withName("query")), - ParameterRef( Reference("⌿paths⌿/locations/search⌿get⌿facebook_places_id")) → Parameter("facebook_places_id", TypeRef(Reference("⌿definitions⌿Media⌿id")), None, None, ".+", encode = true, ParameterPlace.withName("query")), + ParameterRef( Reference("⌿paths⌿/users/self/feed⌿get⌿max_id")) → Parameter("max_id", TypeRef(Reference("⌿paths⌿/users/{user-id}/media/recent⌿get⌿count")), None, None, ".+", encode = true, ParameterPlace.withName("query")), + ParameterRef( Reference("⌿paths⌿/users/self/media/liked⌿get⌿count")) → Parameter("count", TypeRef(Reference("⌿paths⌿/users/{user-id}/media/recent⌿get⌿count")), None, None, ".+", encode = true, ParameterPlace.withName("query")), + ParameterRef( Reference("⌿paths⌿/media/search⌿get⌿LNG")) → Parameter("LNG", TypeRef(Reference("⌿paths⌿/locations/search⌿get⌿lng")), None, None, ".+", encode = true, ParameterPlace.withName("query")), + ParameterRef( Reference("⌿paths⌿/geographies/{geo-id}/media/recent⌿get⌿min_id")) → Parameter("min_id", TypeRef(Reference("⌿paths⌿/users/{user-id}/media/recent⌿get⌿count")), None, None, ".+", encode = true, ParameterPlace.withName("query")), + ParameterRef( Reference("⌿paths⌿/locations/search⌿get⌿facebook_places_id")) → Parameter("facebook_places_id", TypeRef(Reference("⌿paths⌿/users/{user-id}/media/recent⌿get⌿count")), None, None, ".+", encode = true, ParameterPlace.withName("query")), ParameterRef( Reference("⌿paths⌿/media/{media-id}/comments⌿post⌿media-id")) → Parameter("media-id", BInt(TypeMeta(None, List())), None, None, "[^/]+", encode = true, ParameterPlace.withName("path")), ParameterRef( Reference("⌿paths⌿/media/{media-id}⌿get⌿media-id")) → Parameter("media-id", BInt(TypeMeta(None, List())), None, None, "[^/]+", encode = true, ParameterPlace.withName("path")), - ParameterRef( Reference("⌿paths⌿/users/self/media/liked⌿get⌿max_like_id")) → Parameter("max_like_id", TypeRef(Reference("⌿definitions⌿Media⌿id")), None, None, ".+", encode = true, ParameterPlace.withName("query")), - ParameterRef( Reference("⌿paths⌿/media/search⌿get⌿MIN_TIMESTAMP")) → Parameter("MIN_TIMESTAMP", TypeRef(Reference("⌿definitions⌿Media⌿id")), None, None, ".+", encode = true, ParameterPlace.withName("query")), - ParameterRef( Reference("⌿paths⌿/locations/search⌿get⌿distance")) → Parameter("distance", TypeRef(Reference("⌿definitions⌿Media⌿id")), None, None, ".+", encode = true, ParameterPlace.withName("query")), - ParameterRef( Reference("⌿paths⌿/users/search⌿get⌿count")) → Parameter("count", TypeRef(Reference("⌿definitions⌿Media⌿filter")), None, None, ".+", encode = true, ParameterPlace.withName("query")), - ParameterRef( Reference("⌿paths⌿/locations/{location-id}/media/recent⌿get⌿max_id")) → Parameter("max_id", TypeRef(Reference("⌿definitions⌿Media⌿filter")), None, None, ".+", encode = true, ParameterPlace.withName("query")), - ParameterRef( Reference("⌿paths⌿/media/search⌿get⌿LAT")) → Parameter("LAT", TypeRef(Reference("⌿definitions⌿Location⌿latitude")), None, None, ".+", encode = true, ParameterPlace.withName("query")), - ParameterRef( Reference("⌿paths⌿/locations/search⌿get⌿lat")) → Parameter("lat", TypeRef(Reference("⌿definitions⌿Location⌿latitude")), None, None, ".+", encode = true, ParameterPlace.withName("query")), - ParameterRef( Reference("⌿paths⌿/locations/search⌿get⌿foursquare_id")) → Parameter("foursquare_id", TypeRef(Reference("⌿definitions⌿Media⌿id")), None, None, ".+", encode = true, ParameterPlace.withName("query")), - ParameterRef( Reference("⌿paths⌿/locations/{location-id}/media/recent⌿get⌿min_id")) → Parameter("min_id", TypeRef(Reference("⌿definitions⌿Media⌿filter")), None, None, ".+", encode = true, ParameterPlace.withName("query")), - ParameterRef( Reference("⌿paths⌿/tags/search⌿get⌿q")) → Parameter("q", TypeRef(Reference("⌿definitions⌿Media⌿filter")), None, None, ".+", encode = true, ParameterPlace.withName("query")), - ParameterRef( Reference("⌿paths⌿/users/{user-id}/media/recent⌿get⌿max_id")) → Parameter("max_id", TypeRef(Reference("⌿definitions⌿Media⌿filter")), None, None, ".+", encode = true, ParameterPlace.withName("query")), + ParameterRef( Reference("⌿paths⌿/users/self/media/liked⌿get⌿max_like_id")) → Parameter("max_like_id", TypeRef(Reference("⌿paths⌿/users/{user-id}/media/recent⌿get⌿count")), None, None, ".+", encode = true, ParameterPlace.withName("query")), + ParameterRef( Reference("⌿paths⌿/media/search⌿get⌿MIN_TIMESTAMP")) → Parameter("MIN_TIMESTAMP", TypeRef(Reference("⌿paths⌿/users/{user-id}/media/recent⌿get⌿count")), None, None, ".+", encode = true, ParameterPlace.withName("query")), + ParameterRef( Reference("⌿paths⌿/locations/search⌿get⌿distance")) → Parameter("distance", TypeRef(Reference("⌿paths⌿/users/{user-id}/media/recent⌿get⌿count")), None, None, ".+", encode = true, ParameterPlace.withName("query")), + ParameterRef( Reference("⌿paths⌿/users/search⌿get⌿count")) → Parameter("count", TypeRef(Reference("⌿paths⌿/users/{user-id}/media/recent⌿get⌿max_id")), None, None, ".+", encode = true, ParameterPlace.withName("query")), + ParameterRef( Reference("⌿paths⌿/locations/{location-id}/media/recent⌿get⌿max_id")) → Parameter("max_id", TypeRef(Reference("⌿paths⌿/users/{user-id}/media/recent⌿get⌿max_id")), None, None, ".+", encode = true, ParameterPlace.withName("query")), + ParameterRef( Reference("⌿paths⌿/media/search⌿get⌿LAT")) → Parameter("LAT", TypeRef(Reference("⌿paths⌿/locations/search⌿get⌿lng")), None, None, ".+", encode = true, ParameterPlace.withName("query")), + ParameterRef( Reference("⌿paths⌿/locations/search⌿get⌿lat")) → Parameter("lat", TypeRef(Reference("⌿paths⌿/locations/search⌿get⌿lng")), None, None, ".+", encode = true, ParameterPlace.withName("query")), + ParameterRef( Reference("⌿paths⌿/locations/search⌿get⌿foursquare_id")) → Parameter("foursquare_id", TypeRef(Reference("⌿paths⌿/users/{user-id}/media/recent⌿get⌿count")), None, None, ".+", encode = true, ParameterPlace.withName("query")), + ParameterRef( Reference("⌿paths⌿/locations/{location-id}/media/recent⌿get⌿min_id")) → Parameter("min_id", TypeRef(Reference("⌿paths⌿/users/{user-id}/media/recent⌿get⌿max_id")), None, None, ".+", encode = true, ParameterPlace.withName("query")), + ParameterRef( Reference("⌿paths⌿/tags/search⌿get⌿q")) → Parameter("q", TypeRef(Reference("⌿paths⌿/users/{user-id}/media/recent⌿get⌿max_id")), None, None, ".+", encode = true, ParameterPlace.withName("query")), + ParameterRef( Reference("⌿paths⌿/users/{user-id}/media/recent⌿get⌿max_id")) → Parameter("max_id", TypeRef(Reference("⌿paths⌿/users/{user-id}/media/recent⌿get⌿max_id")), None, None, ".+", encode = true, ParameterPlace.withName("query")), ParameterRef( Reference("⌿paths⌿/media/{media-id}/likes⌿get⌿media-id")) → Parameter("media-id", BInt(TypeMeta(None, List())), None, None, "[^/]+", encode = true, ParameterPlace.withName("path")), ParameterRef( Reference("⌿paths⌿/users/{user-id}/relationship⌿post⌿user-id")) → Parameter("user-id", BDcml(TypeMeta(None, List())), None, None, "[^/]+", encode = true, ParameterPlace.withName("path")), ParameterRef( Reference("⌿paths⌿/media/{media-id}/comments⌿delete⌿media-id")) → Parameter("media-id", BInt(TypeMeta(None, List())), None, None, "[^/]+", encode = true, ParameterPlace.withName("path")), ParameterRef( Reference("⌿paths⌿/media/{media-id}/comments⌿get⌿media-id")) → Parameter("media-id", BInt(TypeMeta(None, List())), None, None, "[^/]+", encode = true, ParameterPlace.withName("path")), ParameterRef( Reference("⌿paths⌿/users/search⌿get⌿q")) → Parameter("q", Str(None, TypeMeta(None, List())), None, None, ".+", encode = true, ParameterPlace.withName("query")), ParameterRef( Reference("⌿paths⌿/media/{shortcode}⌿get⌿shortcode")) → Parameter("shortcode", Str(None, TypeMeta(None, List())), None, None, "[^/]+", encode = true, ParameterPlace.withName("path")), - ParameterRef( Reference("⌿paths⌿/users/{user-id}/media/recent⌿get⌿count")) → Parameter("count", TypeRef(Reference("⌿definitions⌿Media⌿id")), None, None, ".+", encode = true, ParameterPlace.withName("query")), - ParameterRef( Reference("⌿paths⌿/geographies/{geo-id}/media/recent⌿get⌿count")) → Parameter("count", TypeRef(Reference("⌿definitions⌿Media⌿id")), None, None, ".+", encode = true, ParameterPlace.withName("query")), - ParameterRef( Reference("⌿paths⌿/locations/search⌿get⌿lng")) → Parameter("lng", TypeRef(Reference("⌿definitions⌿Location⌿latitude")), None, None, ".+", encode = true, ParameterPlace.withName("query")), + ParameterRef( Reference("⌿paths⌿/users/{user-id}/media/recent⌿get⌿count")) → Parameter("count", TypeRef(Reference("⌿paths⌿/users/{user-id}/media/recent⌿get⌿count")), None, None, ".+", encode = true, ParameterPlace.withName("query")), + ParameterRef( Reference("⌿paths⌿/geographies/{geo-id}/media/recent⌿get⌿count")) → Parameter("count", TypeRef(Reference("⌿paths⌿/users/{user-id}/media/recent⌿get⌿count")), None, None, ".+", encode = true, ParameterPlace.withName("query")), + ParameterRef( Reference("⌿paths⌿/locations/search⌿get⌿lng")) → Parameter("lng", TypeRef(Reference("⌿paths⌿/locations/search⌿get⌿lng")), None, None, ".+", encode = true, ParameterPlace.withName("query")), ParameterRef( Reference("⌿paths⌿/users/{user-id}/media/recent⌿get⌿user-id")) → Parameter("user-id", BDcml(TypeMeta(None, List())), None, None, "[^/]+", encode = true, ParameterPlace.withName("path")), ParameterRef( Reference("⌿paths⌿/geographies/{geo-id}/media/recent⌿get⌿geo-id")) → Parameter("geo-id", BInt(TypeMeta(None, List())), None, None, "[^/]+", encode = true, ParameterPlace.withName("path")) ) diff --git a/play-scala-generator/src/test/scala/model/resources.nakadi_yaml.scala b/play-scala-generator/src/test/scala/model/resources.nakadi_yaml.scala index a1628d04..e11aa2d7 100644 --- a/play-scala-generator/src/test/scala/model/resources.nakadi_yaml.scala +++ b/play-scala-generator/src/test/scala/model/resources.nakadi_yaml.scala @@ -15,11 +15,11 @@ object nakadi_yaml extends WithModel { Reference("⌿definitions⌿EventMetaData") → TypeDef(Reference("⌿definitions⌿EventMetaData"), Seq( - Field(Reference("⌿definitions⌿EventMetaData⌿root_id"), TypeRef(Reference("⌿definitions⌿EventMetaData⌿parent_id"))), - Field(Reference("⌿definitions⌿EventMetaData⌿parent_id"), TypeRef(Reference("⌿definitions⌿EventMetaData⌿parent_id"))), - Field(Reference("⌿definitions⌿EventMetaData⌿scopes"), TypeRef(Reference("⌿definitions⌿EventMetaData⌿scopes"))), - Field(Reference("⌿definitions⌿EventMetaData⌿id"), TypeRef(Reference("⌿definitions⌿EventMetaData⌿parent_id"))), - Field(Reference("⌿definitions⌿EventMetaData⌿created"), TypeRef(Reference("⌿definitions⌿Event⌿event_type"))) + Field(Reference("⌿definitions⌿EventMetaData⌿root_id"), Opt(UUID(TypeMeta(Some("uuid"), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿EventMetaData⌿parent_id"), Opt(UUID(TypeMeta(Some("uuid"), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿EventMetaData⌿scopes"), Opt(ArrResult(Str(None, TypeMeta(None, List())), TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿EventMetaData⌿id"), Opt(UUID(TypeMeta(Some("uuid"), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿EventMetaData⌿created"), Opt(Str(Some("data-time"), TypeMeta(Some("data-time"), List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 5"), List())), Reference("⌿definitions⌿Topic") → TypeDef(Reference("⌿definitions⌿Topic"), @@ -29,14 +29,14 @@ object nakadi_yaml extends WithModel { Reference("⌿definitions⌿Metrics") → TypeDef(Reference("⌿definitions⌿Metrics"), Seq( - Field(Reference("⌿definitions⌿Metrics⌿name"), TypeRef(Reference("⌿definitions⌿Event⌿event_type"))) + Field(Reference("⌿definitions⌿Metrics⌿name"), Opt(Str(None, TypeMeta(Some("Metric name"), List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 1"), List())), Reference("⌿definitions⌿Event") → TypeDef(Reference("⌿definitions⌿Event"), Seq( - Field(Reference("⌿definitions⌿Event⌿event_type"), TypeRef(Reference("⌿definitions⌿Event⌿event_type"))), - Field(Reference("⌿definitions⌿Event⌿partitioning_key"), TypeRef(Reference("⌿definitions⌿Event⌿event_type"))), - Field(Reference("⌿definitions⌿Event⌿metadata"), TypeRef(Reference("⌿definitions⌿Event⌿metadata"))) + Field(Reference("⌿definitions⌿Event⌿event_type"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Event⌿partitioning_key"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Event⌿metadata"), Opt(TypeRef(Reference("⌿definitions⌿EventMetaData")), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 3"), List())), Reference("⌿definitions⌿Cursor") → TypeDef(Reference("⌿definitions⌿Cursor"), @@ -60,28 +60,14 @@ object nakadi_yaml extends WithModel { TypeDef(Reference("⌿definitions⌿SimpleStreamEvent"), Seq( Field(Reference("⌿definitions⌿SimpleStreamEvent⌿cursor"), TypeRef(Reference("⌿definitions⌿Cursor"))), - Field(Reference("⌿definitions⌿SimpleStreamEvent⌿events"), TypeRef(Reference("⌿definitions⌿SimpleStreamEvent⌿events"))) + Field(Reference("⌿definitions⌿SimpleStreamEvent⌿events"), Opt(ArrResult(TypeRef(Reference("⌿definitions⌿Event")), TypeMeta(None, List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 2"), List())), - Reference("⌿definitions⌿Event⌿event_type") → - Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List())), - Reference("⌿definitions⌿EventMetaData⌿parent_id") → - Opt(UUID(TypeMeta(Some("uuid"), List())), TypeMeta(None, List())), - Reference("⌿definitions⌿Event⌿metadata") → - Opt(TypeRef(Reference("⌿definitions⌿EventMetaData")), TypeMeta(None, List())), - Reference("⌿definitions⌿SimpleStreamEvent⌿events") → - Opt(TypeRef(Reference("⌿definitions⌿SimpleStreamEvent⌿events⌿Opt")), TypeMeta(None, List())), - Reference("⌿definitions⌿EventMetaData⌿scopes") → - Opt(TypeRef(Reference("⌿definitions⌿EventMetaData⌿scopes⌿Opt")), TypeMeta(None, List())), Reference("⌿paths⌿/topics/{topic}/events/batch⌿post⌿topic") → Str(None, TypeMeta(None, List())), Reference("⌿paths⌿/topics/{topic}/events⌿get⌿stream_timeout") → Opt(Intgr(TypeMeta(Some("int32"), List())), TypeMeta(None, List())), Reference("⌿paths⌿/topics/{topic}/events⌿get⌿batch_limit") → Intgr(TypeMeta(Some("int32"), List())), - Reference("⌿definitions⌿SimpleStreamEvent⌿events⌿Opt") → - ArrResult(TypeRef(Reference("⌿definitions⌿Event")), TypeMeta(None, List())), - Reference("⌿definitions⌿EventMetaData⌿scopes⌿Opt") → - ArrResult(Str(None, TypeMeta(None, List())), TypeMeta(None, List())), Reference("⌿paths⌿/topics/{topic}/events/batch⌿post⌿event") → Opt(TypeRef(Reference("⌿definitions⌿Event")), TypeMeta(None, List())), Reference("⌿paths⌿/topics/{topic}/events⌿post⌿responses⌿201") → diff --git a/play-scala-generator/src/test/scala/model/resources.nested_arrays_validation_yaml.scala b/play-scala-generator/src/test/scala/model/resources.nested_arrays_validation_yaml.scala index 43f534cd..c903c516 100644 --- a/play-scala-generator/src/test/scala/model/resources.nested_arrays_validation_yaml.scala +++ b/play-scala-generator/src/test/scala/model/resources.nested_arrays_validation_yaml.scala @@ -15,36 +15,18 @@ object nested_arrays_validation_yaml extends WithModel { Reference("⌿definitions⌿Activity") → TypeDef(Reference("⌿definitions⌿Activity"), Seq( - Field(Reference("⌿definitions⌿Activity⌿actions"), TypeRef(Reference("⌿definitions⌿Activity⌿actions"))) + Field(Reference("⌿definitions⌿Activity⌿actions"), Opt(Str(None, TypeMeta(Some("The text of the error message"), List("""pattern("""+"""""""""+"""the pattern to validate"""+"""""""""+""".r)"""))), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 1"), List())), Reference("⌿definitions⌿Example") → TypeDef(Reference("⌿definitions⌿Example"), Seq( - Field(Reference("⌿definitions⌿Example⌿messages"), TypeRef(Reference("⌿definitions⌿Example⌿messages"))), - Field(Reference("⌿definitions⌿Example⌿nestedArrays"), TypeRef(Reference("⌿definitions⌿Example⌿nestedArrays"))) + Field(Reference("⌿definitions⌿Example⌿nestedArrays"), Opt(ArrResult(ArrResult(ArrResult(ArrResult(Str(Some("nested arrays"), TypeMeta(Some("nested arrays"), List("maxLength(6)", "minLength(5)"))), TypeMeta(None, List("maxItems(36)", "minItems(35)"))), TypeMeta(None, List("maxItems(26)", "minItems(25)"))), TypeMeta(None, List("maxItems(16)", "minItems(15)"))), TypeMeta(None, List("maxItems(6)", "minItems(5)"))), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Example⌿messages"), Opt(ArrResult(ArrResult(TypeRef(Reference("⌿definitions⌿Activity")), TypeMeta(None, List("maxItems(6)", "minItems(5)"))), TypeMeta(Some("The text of the error message"), List("maxItems(6)", "minItems(5)"))), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 2"), List())), - Reference("⌿definitions⌿Example⌿messages") → - Opt(TypeRef(Reference("⌿definitions⌿Example⌿messages⌿Opt")), TypeMeta(None, List())), - Reference("⌿definitions⌿Example⌿nestedArrays") → - Opt(TypeRef(Reference("⌿definitions⌿Example⌿nestedArrays⌿Opt")), TypeMeta(None, List())), - Reference("⌿definitions⌿Activity⌿actions") → - Opt(Str(None, TypeMeta(Some("The text of the error message"), List("""pattern("""+"""""""""+"""the pattern to validate"""+"""""""""+""".r)"""))), TypeMeta(None, List())), - Reference("⌿definitions⌿Example⌿nestedArrays⌿Opt") → - ArrResult(TypeRef(Reference("⌿definitions⌿Example⌿nestedArrays⌿Opt⌿ArrResult")), TypeMeta(None, List("maxItems(6)", "minItems(5)"))), - Reference("⌿definitions⌿Example⌿messages⌿Opt") → - ArrResult(TypeRef(Reference("⌿definitions⌿Example⌿messages⌿Opt⌿ArrResult")), TypeMeta(Some("The text of the error message"), List("maxItems(6)", "minItems(5)"))), Reference("⌿paths⌿/another⌿post⌿example") → Opt(TypeRef(Reference("⌿definitions⌿Example")), TypeMeta(None, List())), Reference("⌿paths⌿/another⌿post⌿responses⌿200") → - Null(TypeMeta(None, List())), - Reference("⌿definitions⌿Example⌿nestedArrays⌿Opt⌿ArrResult") → - ArrResult(TypeRef(Reference("⌿definitions⌿Example⌿nestedArrays⌿Opt⌿ArrResult⌿ArrResult")), TypeMeta(None, List("maxItems(16)", "minItems(15)"))), - Reference("⌿definitions⌿Example⌿messages⌿Opt⌿ArrResult") → - ArrResult(TypeRef(Reference("⌿definitions⌿Activity")), TypeMeta(None, List("maxItems(6)", "minItems(5)"))), - Reference("⌿definitions⌿Example⌿nestedArrays⌿Opt⌿ArrResult⌿ArrResult") → - ArrResult(TypeRef(Reference("⌿definitions⌿Example⌿nestedArrays⌿Opt⌿ArrResult⌿ArrResult⌿ArrResult")), TypeMeta(None, List("maxItems(26)", "minItems(25)"))), - Reference("⌿definitions⌿Example⌿nestedArrays⌿Opt⌿ArrResult⌿ArrResult⌿ArrResult") → - ArrResult(Str(Some("nested arrays"), TypeMeta(Some("nested arrays"), List("maxLength(6)", "minLength(5)"))), TypeMeta(None, List("maxItems(36)", "minItems(35)"))) + Null(TypeMeta(None, List())) ) def parameters = Map[ParameterRef, Parameter]( diff --git a/play-scala-generator/src/test/scala/model/resources.nested_arrays_yaml.scala b/play-scala-generator/src/test/scala/model/resources.nested_arrays_yaml.scala index 109813ee..24d31aa1 100644 --- a/play-scala-generator/src/test/scala/model/resources.nested_arrays_yaml.scala +++ b/play-scala-generator/src/test/scala/model/resources.nested_arrays_yaml.scala @@ -15,32 +15,14 @@ object nested_arrays_yaml extends WithModel { Reference("⌿definitions⌿Activity") → TypeDef(Reference("⌿definitions⌿Activity"), Seq( - Field(Reference("⌿definitions⌿Activity⌿actions"), TypeRef(Reference("⌿definitions⌿Activity⌿actions"))) + Field(Reference("⌿definitions⌿Activity⌿actions"), Opt(Str(None, TypeMeta(Some("The text of the error message"), List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 1"), List())), Reference("⌿definitions⌿Example") → TypeDef(Reference("⌿definitions⌿Example"), Seq( - Field(Reference("⌿definitions⌿Example⌿messages"), TypeRef(Reference("⌿definitions⌿Example⌿messages"))), - Field(Reference("⌿definitions⌿Example⌿nestedArrays"), TypeRef(Reference("⌿definitions⌿Example⌿nestedArrays"))) - ), TypeMeta(Some("Named types: 2"), List())), - Reference("⌿definitions⌿Example⌿messages") → - Opt(TypeRef(Reference("⌿definitions⌿Example⌿messages⌿Opt")), TypeMeta(None, List())), - Reference("⌿definitions⌿Example⌿nestedArrays") → - Opt(TypeRef(Reference("⌿definitions⌿Example⌿nestedArrays⌿Opt")), TypeMeta(None, List())), - Reference("⌿definitions⌿Activity⌿actions") → - Opt(Str(None, TypeMeta(Some("The text of the error message"), List())), TypeMeta(None, List())), - Reference("⌿definitions⌿Example⌿nestedArrays⌿Opt") → - ArrResult(TypeRef(Reference("⌿definitions⌿Example⌿nestedArrays⌿Opt⌿ArrResult")), TypeMeta(None, List())), - Reference("⌿definitions⌿Example⌿messages⌿Opt") → - ArrResult(TypeRef(Reference("⌿definitions⌿Example⌿messages⌿Opt⌿ArrResult")), TypeMeta(Some("The text of the error message"), List())), - Reference("⌿definitions⌿Example⌿nestedArrays⌿Opt⌿ArrResult") → - ArrResult(TypeRef(Reference("⌿definitions⌿Example⌿nestedArrays⌿Opt⌿ArrResult⌿ArrResult")), TypeMeta(None, List())), - Reference("⌿definitions⌿Example⌿messages⌿Opt⌿ArrResult") → - ArrResult(TypeRef(Reference("⌿definitions⌿Activity")), TypeMeta(None, List())), - Reference("⌿definitions⌿Example⌿nestedArrays⌿Opt⌿ArrResult⌿ArrResult") → - ArrResult(TypeRef(Reference("⌿definitions⌿Example⌿nestedArrays⌿Opt⌿ArrResult⌿ArrResult⌿ArrResult")), TypeMeta(None, List())), - Reference("⌿definitions⌿Example⌿nestedArrays⌿Opt⌿ArrResult⌿ArrResult⌿ArrResult") → - ArrResult(Str(Some("nested arrays"), TypeMeta(Some("nested arrays"), List())), TypeMeta(None, List())) + Field(Reference("⌿definitions⌿Example⌿nestedArrays"), Opt(ArrResult(ArrResult(ArrResult(ArrResult(Str(Some("nested arrays"), TypeMeta(Some("nested arrays"), List())), TypeMeta(None, List())), TypeMeta(None, List())), TypeMeta(None, List())), TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Example⌿messages"), Opt(ArrResult(ArrResult(TypeRef(Reference("⌿definitions⌿Activity")), TypeMeta(None, List())), TypeMeta(Some("The text of the error message"), List())), TypeMeta(None, List()))) + ), TypeMeta(Some("Named types: 2"), List())) ) def parameters = Map[ParameterRef, Parameter]( diff --git a/play-scala-generator/src/test/scala/model/resources.nested_objects_validation_yaml.scala b/play-scala-generator/src/test/scala/model/resources.nested_objects_validation_yaml.scala index 40308c0b..185d7efa 100644 --- a/play-scala-generator/src/test/scala/model/resources.nested_objects_validation_yaml.scala +++ b/play-scala-generator/src/test/scala/model/resources.nested_objects_validation_yaml.scala @@ -15,38 +15,30 @@ object nested_objects_validation_yaml extends WithModel { Reference("⌿definitions⌿NestedObjects") → TypeDef(Reference("⌿definitions⌿NestedObjects"), Seq( - Field(Reference("⌿definitions⌿NestedObjects⌿plain"), TypeRef(Reference("⌿definitions⌿NestedObjects⌿plain"))), - Field(Reference("⌿definitions⌿NestedObjects⌿nested"), TypeRef(Reference("⌿definitions⌿NestedObjects⌿nested"))) + Field(Reference("⌿definitions⌿NestedObjects⌿plain"), Opt(TypeRef(Reference("⌿definitions⌿NestedObjects⌿plain⌿Option⌿plain")), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿NestedObjects⌿nested"), Opt(TypeRef(Reference("⌿definitions⌿NestedObjects⌿nested⌿Option⌿nested")), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 2"), List())), - Reference("⌿definitions⌿NestedObjects⌿nested") → - Opt(TypeRef(Reference("⌿definitions⌿NestedObjects⌿nested⌿Opt")), TypeMeta(None, List())), - Reference("⌿definitions⌿NestedObjects⌿plain") → - Opt(TypeRef(Reference("⌿definitions⌿NestedObjects⌿plain⌿Opt")), TypeMeta(None, List())), - Reference("⌿definitions⌿NestedObjects⌿nested⌿Opt") → - TypeDef(Reference("⌿definitions⌿NestedObjects⌿nested"), + Reference("⌿definitions⌿NestedObjects⌿nested⌿nested2") → + TypeDef(Reference("⌿definitions⌿NestedObjects⌿nested⌿nested2"), Seq( - Field(Reference("⌿definitions⌿NestedObjects⌿nested⌿nested2"), TypeRef(Reference("⌿definitions⌿NestedObjects⌿nested⌿nested2"))) + Field(Reference("⌿definitions⌿NestedObjects⌿nested⌿nested2⌿nested3"), Opt(TypeRef(Reference("⌿definitions⌿NestedObjects⌿nested⌿nested2⌿nested3⌿Option⌿nested3")), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 1"), List())), - Reference("⌿definitions⌿NestedObjects⌿plain⌿Opt") → + Reference("⌿definitions⌿NestedObjects⌿plain⌿Option⌿plain") → TypeDef(Reference("⌿definitions⌿NestedObjects⌿plain"), Seq( Field(Reference("⌿definitions⌿NestedObjects⌿plain⌿simple"), Str(None, TypeMeta(None, List("""pattern("""+"""""""""+"""the pattern"""+"""""""""+""".r)""")))) ), TypeMeta(Some("Named types: 1"), List())), - Reference("⌿definitions⌿NestedObjects⌿nested⌿nested2") → - TypeDef(Reference("⌿definitions⌿NestedObjects⌿nested⌿nested2"), + Reference("⌿definitions⌿NestedObjects⌿nested⌿Option⌿nested") → + TypeDef(Reference("⌿definitions⌿NestedObjects⌿nested"), Seq( - Field(Reference("⌿definitions⌿NestedObjects⌿nested⌿nested2⌿nested3"), TypeRef(Reference("⌿definitions⌿NestedObjects⌿nested⌿nested2⌿nested3"))) + Field(Reference("⌿definitions⌿NestedObjects⌿nested⌿nested2"), TypeRef(Reference("⌿definitions⌿NestedObjects⌿nested⌿nested2"))) ), TypeMeta(Some("Named types: 1"), List())), - Reference("⌿definitions⌿NestedObjects⌿nested⌿nested2⌿nested3") → - Opt(TypeRef(Reference("⌿definitions⌿NestedObjects⌿nested⌿nested2⌿nested3⌿Opt")), TypeMeta(None, List())), Reference("⌿paths⌿/⌿get⌿responses⌿200") → Null(TypeMeta(None, List())), - Reference("⌿definitions⌿NestedObjects⌿nested⌿nested2⌿nested3⌿bottom") → - Opt(Str(None, TypeMeta(None, List("maxLength(30)", "minLength(3)"))), TypeMeta(None, List())), - Reference("⌿definitions⌿NestedObjects⌿nested⌿nested2⌿nested3⌿Opt") → + Reference("⌿definitions⌿NestedObjects⌿nested⌿nested2⌿nested3⌿Option⌿nested3") → TypeDef(Reference("⌿definitions⌿NestedObjects⌿nested⌿nested2⌿nested3"), Seq( - Field(Reference("⌿definitions⌿NestedObjects⌿nested⌿nested2⌿nested3⌿bottom"), TypeRef(Reference("⌿definitions⌿NestedObjects⌿nested⌿nested2⌿nested3⌿bottom"))) + Field(Reference("⌿definitions⌿NestedObjects⌿nested⌿nested2⌿nested3⌿bottom"), Opt(Str(None, TypeMeta(None, List("maxLength(30)", "minLength(3)"))), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 1"), List())) ) diff --git a/play-scala-generator/src/test/scala/model/resources.nested_objects_yaml.scala b/play-scala-generator/src/test/scala/model/resources.nested_objects_yaml.scala index 8e254742..be3f1c26 100644 --- a/play-scala-generator/src/test/scala/model/resources.nested_objects_yaml.scala +++ b/play-scala-generator/src/test/scala/model/resources.nested_objects_yaml.scala @@ -15,36 +15,28 @@ object nested_objects_yaml extends WithModel { Reference("⌿definitions⌿NestedObjects") → TypeDef(Reference("⌿definitions⌿NestedObjects"), Seq( - Field(Reference("⌿definitions⌿NestedObjects⌿plain"), TypeRef(Reference("⌿definitions⌿NestedObjects⌿plain"))), - Field(Reference("⌿definitions⌿NestedObjects⌿nested"), TypeRef(Reference("⌿definitions⌿NestedObjects⌿nested"))) + Field(Reference("⌿definitions⌿NestedObjects⌿plain"), Opt(TypeRef(Reference("⌿definitions⌿NestedObjects⌿plain⌿Option⌿plain")), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿NestedObjects⌿nested"), Opt(TypeRef(Reference("⌿definitions⌿NestedObjects⌿nested⌿Option⌿nested")), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 2"), List())), - Reference("⌿definitions⌿NestedObjects⌿nested") → - Opt(TypeRef(Reference("⌿definitions⌿NestedObjects⌿nested⌿Opt")), TypeMeta(None, List())), - Reference("⌿definitions⌿NestedObjects⌿plain") → - Opt(TypeRef(Reference("⌿definitions⌿NestedObjects⌿plain⌿Opt")), TypeMeta(None, List())), - Reference("⌿definitions⌿NestedObjects⌿nested⌿Opt") → - TypeDef(Reference("⌿definitions⌿NestedObjects⌿nested"), + Reference("⌿definitions⌿NestedObjects⌿nested⌿nested2") → + TypeDef(Reference("⌿definitions⌿NestedObjects⌿nested⌿nested2"), Seq( - Field(Reference("⌿definitions⌿NestedObjects⌿nested⌿nested2"), TypeRef(Reference("⌿definitions⌿NestedObjects⌿nested⌿nested2"))) + Field(Reference("⌿definitions⌿NestedObjects⌿nested⌿nested2⌿nested3"), Opt(TypeRef(Reference("⌿definitions⌿NestedObjects⌿nested⌿nested2⌿nested3⌿Option⌿nested3")), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 1"), List())), - Reference("⌿definitions⌿NestedObjects⌿plain⌿Opt") → + Reference("⌿definitions⌿NestedObjects⌿plain⌿Option⌿plain") → TypeDef(Reference("⌿definitions⌿NestedObjects⌿plain"), Seq( Field(Reference("⌿definitions⌿NestedObjects⌿plain⌿simple"), Str(None, TypeMeta(None, List("""pattern("""+"""""""""+"""the pattern"""+"""""""""+""".r)""")))) ), TypeMeta(Some("Named types: 1"), List())), - Reference("⌿definitions⌿NestedObjects⌿nested⌿nested2") → - TypeDef(Reference("⌿definitions⌿NestedObjects⌿nested⌿nested2"), + Reference("⌿definitions⌿NestedObjects⌿nested⌿Option⌿nested") → + TypeDef(Reference("⌿definitions⌿NestedObjects⌿nested"), Seq( - Field(Reference("⌿definitions⌿NestedObjects⌿nested⌿nested2⌿nested3"), TypeRef(Reference("⌿definitions⌿NestedObjects⌿nested⌿nested2⌿nested3"))) + Field(Reference("⌿definitions⌿NestedObjects⌿nested⌿nested2"), TypeRef(Reference("⌿definitions⌿NestedObjects⌿nested⌿nested2"))) ), TypeMeta(Some("Named types: 1"), List())), - Reference("⌿definitions⌿NestedObjects⌿nested⌿nested2⌿nested3") → - Opt(TypeRef(Reference("⌿definitions⌿NestedObjects⌿nested⌿nested2⌿nested3⌿Opt")), TypeMeta(None, List())), - Reference("⌿definitions⌿NestedObjects⌿nested⌿nested2⌿nested3⌿bottom") → - Opt(Str(None, TypeMeta(None, List("maxLength(30)", "minLength(3)"))), TypeMeta(None, List())), - Reference("⌿definitions⌿NestedObjects⌿nested⌿nested2⌿nested3⌿Opt") → + Reference("⌿definitions⌿NestedObjects⌿nested⌿nested2⌿nested3⌿Option⌿nested3") → TypeDef(Reference("⌿definitions⌿NestedObjects⌿nested⌿nested2⌿nested3"), Seq( - Field(Reference("⌿definitions⌿NestedObjects⌿nested⌿nested2⌿nested3⌿bottom"), TypeRef(Reference("⌿definitions⌿NestedObjects⌿nested⌿nested2⌿nested3⌿bottom"))) + Field(Reference("⌿definitions⌿NestedObjects⌿nested⌿nested2⌿nested3⌿bottom"), Opt(Str(None, TypeMeta(None, List("maxLength(30)", "minLength(3)"))), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 1"), List())) ) diff --git a/play-scala-generator/src/test/scala/model/resources.nested_options_validation_yaml.scala b/play-scala-generator/src/test/scala/model/resources.nested_options_validation_yaml.scala index 0732438e..3bacdd6b 100644 --- a/play-scala-generator/src/test/scala/model/resources.nested_options_validation_yaml.scala +++ b/play-scala-generator/src/test/scala/model/resources.nested_options_validation_yaml.scala @@ -15,17 +15,13 @@ object nested_options_validation_yaml extends WithModel { Reference("⌿definitions⌿Basic") → TypeDef(Reference("⌿definitions⌿Basic"), Seq( - Field(Reference("⌿definitions⌿Basic⌿optional"), TypeRef(Reference("⌿definitions⌿Basic⌿optional"))) + Field(Reference("⌿definitions⌿Basic⌿optional"), Opt(TypeRef(Reference("⌿definitions⌿Basic⌿optional⌿Option⌿optional")), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 1"), List())), - Reference("⌿definitions⌿Basic⌿optional") → - Opt(TypeRef(Reference("⌿definitions⌿Basic⌿optional⌿Opt")), TypeMeta(None, List())), - Reference("⌿definitions⌿Basic⌿optional⌿Opt") → + Reference("⌿definitions⌿Basic⌿optional⌿Option⌿optional") → TypeDef(Reference("⌿definitions⌿Basic⌿optional"), Seq( - Field(Reference("⌿definitions⌿Basic⌿optional⌿nested_optional"), TypeRef(Reference("⌿definitions⌿Basic⌿optional⌿nested_optional"))) + Field(Reference("⌿definitions⌿Basic⌿optional⌿nested_optional"), Opt(Str(None, TypeMeta(None, List("maxLength(6)", "minLength(5)"))), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 1"), List())), - Reference("⌿definitions⌿Basic⌿optional⌿nested_optional") → - Opt(Str(None, TypeMeta(None, List("maxLength(6)", "minLength(5)"))), TypeMeta(None, List())), Reference("⌿paths⌿/⌿get⌿responses⌿200") → Null(TypeMeta(None, List())) ) diff --git a/play-scala-generator/src/test/scala/model/resources.nested_options_yaml.scala b/play-scala-generator/src/test/scala/model/resources.nested_options_yaml.scala index b10c5229..5ce729d3 100644 --- a/play-scala-generator/src/test/scala/model/resources.nested_options_yaml.scala +++ b/play-scala-generator/src/test/scala/model/resources.nested_options_yaml.scala @@ -15,17 +15,13 @@ object nested_options_yaml extends WithModel { Reference("⌿definitions⌿Basic") → TypeDef(Reference("⌿definitions⌿Basic"), Seq( - Field(Reference("⌿definitions⌿Basic⌿optional"), TypeRef(Reference("⌿definitions⌿Basic⌿optional"))) + Field(Reference("⌿definitions⌿Basic⌿optional"), Opt(TypeRef(Reference("⌿definitions⌿Basic⌿optional⌿Option⌿optional")), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 1"), List())), - Reference("⌿definitions⌿Basic⌿optional") → - Opt(TypeRef(Reference("⌿definitions⌿Basic⌿optional⌿Opt")), TypeMeta(None, List())), - Reference("⌿definitions⌿Basic⌿optional⌿Opt") → + Reference("⌿definitions⌿Basic⌿optional⌿Option⌿optional") → TypeDef(Reference("⌿definitions⌿Basic⌿optional"), Seq( - Field(Reference("⌿definitions⌿Basic⌿optional⌿nested_optional"), TypeRef(Reference("⌿definitions⌿Basic⌿optional⌿nested_optional"))) - ), TypeMeta(Some("Named types: 1"), List())), - Reference("⌿definitions⌿Basic⌿optional⌿nested_optional") → - Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List())) + Field(Reference("⌿definitions⌿Basic⌿optional⌿nested_optional"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))) + ), TypeMeta(Some("Named types: 1"), List())) ) def parameters = Map[ParameterRef, Parameter]( diff --git a/play-scala-generator/src/test/scala/model/resources.options_yaml.scala b/play-scala-generator/src/test/scala/model/resources.options_yaml.scala index a4ad6940..288d912c 100644 --- a/play-scala-generator/src/test/scala/model/resources.options_yaml.scala +++ b/play-scala-generator/src/test/scala/model/resources.options_yaml.scala @@ -16,13 +16,9 @@ object options_yaml extends WithModel { TypeDef(Reference("⌿definitions⌿Basic"), Seq( Field(Reference("⌿definitions⌿Basic⌿id"), Lng(TypeMeta(Some("int64"), List()))), - Field(Reference("⌿definitions⌿Basic⌿required"), TypeRef(Reference("⌿definitions⌿Basic⌿required"))), - Field(Reference("⌿definitions⌿Basic⌿optional"), TypeRef(Reference("⌿definitions⌿Basic⌿optional"))) - ), TypeMeta(Some("Named types: 3"), List())), - Reference("⌿definitions⌿Basic⌿required") → - ArrResult(Str(None, TypeMeta(None, List())), TypeMeta(None, List())), - Reference("⌿definitions⌿Basic⌿optional") → - Opt(TypeRef(Reference("⌿definitions⌿Basic⌿required")), TypeMeta(None, List())) + Field(Reference("⌿definitions⌿Basic⌿required"), ArrResult(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Basic⌿optional"), Opt(ArrResult(Str(None, TypeMeta(None, List())), TypeMeta(None, List())), TypeMeta(None, List()))) + ), TypeMeta(Some("Named types: 3"), List())) ) def parameters = Map[ParameterRef, Parameter]( diff --git a/play-scala-generator/src/test/scala/model/resources.security_api_yaml.scala b/play-scala-generator/src/test/scala/model/resources.security_api_yaml.scala index 59f2dd16..0254f39c 100644 --- a/play-scala-generator/src/test/scala/model/resources.security_api_yaml.scala +++ b/play-scala-generator/src/test/scala/model/resources.security_api_yaml.scala @@ -22,10 +22,8 @@ object security_api_yaml extends WithModel { TypeDef(Reference("⌿definitions⌿Pet"), Seq( Field(Reference("⌿definitions⌿Pet⌿name"), Str(None, TypeMeta(None, List()))), - Field(Reference("⌿definitions⌿Pet⌿tag"), TypeRef(Reference("⌿definitions⌿Pet⌿tag"))) + Field(Reference("⌿definitions⌿Pet⌿tag"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 2"), List())), - Reference("⌿definitions⌿Pet⌿tag") → - Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List())), Reference("⌿paths⌿/pets/{id}⌿get⌿id") → Arr(Str(None, TypeMeta(None, List())), TypeMeta(None, List()), "csv"), Reference("⌿paths⌿/pets/{id}⌿get⌿responses⌿200") → diff --git a/play-scala-generator/src/test/scala/model/resources.simple_petstore_api_yaml.scala b/play-scala-generator/src/test/scala/model/resources.simple_petstore_api_yaml.scala index 05d7cf01..de11d83a 100644 --- a/play-scala-generator/src/test/scala/model/resources.simple_petstore_api_yaml.scala +++ b/play-scala-generator/src/test/scala/model/resources.simple_petstore_api_yaml.scala @@ -23,29 +23,23 @@ object simple_petstore_api_yaml extends WithModel { Seq( Field(Reference("⌿definitions⌿pet⌿id"), Lng(TypeMeta(Some("int64"), List()))), Field(Reference("⌿definitions⌿pet⌿name"), Str(None, TypeMeta(None, List()))), - Field(Reference("⌿definitions⌿pet⌿tag"), TypeRef(Reference("⌿definitions⌿newPet⌿tag"))) + Field(Reference("⌿definitions⌿pet⌿tag"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 3"), List())), Reference("⌿definitions⌿newPet") → TypeDef(Reference("⌿definitions⌿newPet"), Seq( + Field(Reference("⌿definitions⌿newPet⌿id"), Opt(Lng(TypeMeta(Some("int64"), List())), TypeMeta(None, List()))), Field(Reference("⌿definitions⌿newPet⌿name"), Str(None, TypeMeta(None, List()))), - Field(Reference("⌿definitions⌿newPet⌿id"), TypeRef(Reference("⌿definitions⌿newPet⌿id"))), - Field(Reference("⌿definitions⌿newPet⌿tag"), TypeRef(Reference("⌿definitions⌿newPet⌿tag"))) + Field(Reference("⌿definitions⌿newPet⌿tag"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 3"), List())), - Reference("⌿definitions⌿newPet⌿tag") → - Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List())), - Reference("⌿definitions⌿newPet⌿id") → - Opt(Lng(TypeMeta(Some("int64"), List())), TypeMeta(None, List())), Reference("⌿paths⌿/pets/{id}⌿delete⌿id") → Lng(TypeMeta(Some("int64"), List())), Reference("⌿paths⌿/pets⌿get⌿limit") → Opt(Intgr(TypeMeta(Some("int32"), List("max(200.toInt, false)", "min(1.toInt, false)"))), TypeMeta(None, List())), Reference("⌿paths⌿/pets⌿get⌿tags") → - Opt(TypeRef(Reference("⌿paths⌿/pets⌿get⌿tags⌿Opt")), TypeMeta(None, List())), + Opt(Arr(Str(None, TypeMeta(None, List())), TypeMeta(None, List()), "csv"), TypeMeta(None, List())), Reference("⌿paths⌿/pets/{id}⌿delete⌿responses⌿204") → Null(TypeMeta(None, List())), - Reference("⌿paths⌿/pets⌿get⌿tags⌿Opt") → - Arr(Str(None, TypeMeta(None, List())), TypeMeta(None, List()), "csv"), Reference("⌿paths⌿/pets⌿get⌿responses⌿200") → ArrResult(TypeRef(Reference("⌿definitions⌿pet")), TypeMeta(None, List())) ) diff --git a/play-scala-generator/src/test/scala/model/resources.split_petstore_api_yaml.scala b/play-scala-generator/src/test/scala/model/resources.split_petstore_api_yaml.scala index 94a7b54d..19b84871 100644 --- a/play-scala-generator/src/test/scala/model/resources.split_petstore_api_yaml.scala +++ b/play-scala-generator/src/test/scala/model/resources.split_petstore_api_yaml.scala @@ -12,83 +12,63 @@ import Security._ object split_petstore_api_yaml extends WithModel { def types = Map[Reference, Type]( - Reference("⌿definitions⌿Order⌿status") → - Opt(Str(None, TypeMeta(Some("Order Status"), List())), TypeMeta(None, List())), - Reference("⌿definitions⌿Order⌿petId") → - Opt(Lng(TypeMeta(Some("int64"), List())), TypeMeta(None, List())), - Reference("⌿definitions⌿Order⌿shipDate") → - Opt(DateTime(TypeMeta(Some("date-time"), List())), TypeMeta(None, List())), - Reference("⌿definitions⌿Order⌿complete") → - Opt(Bool(TypeMeta(None, List())), TypeMeta(None, List())), - Reference("⌿definitions⌿Pet⌿tags") → - Opt(TypeRef(Reference("⌿definitions⌿Pet⌿tags⌿Opt")), TypeMeta(None, List())), - Reference("⌿definitions⌿Order⌿quantity") → - Opt(Intgr(TypeMeta(Some("int32"), List())), TypeMeta(None, List())), - Reference("⌿definitions⌿Pet⌿photoUrls") → - ArrResult(Str(None, TypeMeta(None, List())), TypeMeta(None, List())), - Reference("⌿definitions⌿Pet⌿category") → - Opt(TypeRef(Reference("⌿definitions⌿Pet⌿category⌿Opt")), TypeMeta(None, List())), - Reference("⌿definitions⌿Pet⌿category⌿Opt") → - TypeDef(Reference("⌿definitions⌿Category"), - Seq( - Field(Reference("⌿definitions⌿Category⌿id"), TypeRef(Reference("⌿definitions⌿Order⌿petId"))), - Field(Reference("⌿definitions⌿Category⌿name"), TypeRef(Reference("⌿definitions⌿Order⌿status"))) - ), TypeMeta(Some("Named types: 2"), List())), Reference("⌿paths⌿/users/{username}⌿get⌿username") → Str(None, TypeMeta(None, List())), + Reference("⌿paths⌿/users/login⌿get⌿username") → + Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List())), Reference("⌿paths⌿/pets⌿post⌿body") → - Opt(TypeRef(Reference("⌿paths⌿/pets⌿post⌿body⌿Opt")), TypeMeta(None, List())), + Opt(TypeRef(Reference("⌿paths⌿/pets⌿post⌿body⌿Option⌿Pet")), TypeMeta(None, List())), Reference("⌿paths⌿/users/{username}⌿put⌿body") → - Opt(TypeRef(Reference("⌿paths⌿/users/{username}⌿put⌿body⌿Opt")), TypeMeta(None, List())), + Opt(TypeRef(Reference("⌿paths⌿/users/{username}⌿put⌿body⌿Option⌿User")), TypeMeta(None, List())), Reference("⌿paths⌿/stores/order⌿post⌿body") → - Opt(TypeRef(Reference("⌿paths⌿/stores/order⌿post⌿body⌿Opt")), TypeMeta(None, List())), + Opt(TypeRef(Reference("⌿paths⌿/stores/order⌿post⌿body⌿Option⌿Order")), TypeMeta(None, List())), Reference("⌿paths⌿/pets/{petId}⌿delete⌿petId") → Lng(TypeMeta(Some("int64"), List())), Reference("⌿paths⌿/users/createWithList⌿post⌿body") → - Opt(TypeRef(Reference("⌿paths⌿/users/createWithList⌿post⌿body⌿Opt")), TypeMeta(None, List())), + Opt(ArrResult(TypeRef(Reference("⌿paths⌿/users/{username}⌿put⌿body⌿Option⌿User")), TypeMeta(None, List())), TypeMeta(None, List())), Reference("⌿paths⌿/pets/findByStatus⌿get⌿status") → - Opt(TypeRef(Reference("⌿paths⌿/pets/findByStatus⌿get⌿status⌿Opt")), TypeMeta(None, List())), - Reference("⌿definitions⌿Pet⌿tags⌿Opt") → - ArrResult(TypeRef(Reference("⌿definitions⌿Pet⌿category⌿Opt")), TypeMeta(None, List())), + Opt(Arr(Str(None, TypeMeta(None, List())), TypeMeta(None, List()), "multi"), TypeMeta(None, List())), Reference("⌿paths⌿/users/createWithList⌿post⌿responses⌿default") → Null(TypeMeta(None, List())), - Reference("⌿paths⌿/pets/findByStatus⌿get⌿status⌿Opt") → - Arr(Str(None, TypeMeta(None, List())), TypeMeta(None, List()), "multi"), - Reference("⌿paths⌿/users/createWithList⌿post⌿body⌿Opt") → - ArrResult(TypeRef(Reference("⌿paths⌿/users/{username}⌿put⌿body⌿Opt")), TypeMeta(None, List())), Reference("⌿paths⌿/pets/findByStatus⌿get⌿responses⌿200") → - ArrResult(TypeRef(Reference("⌿paths⌿/pets⌿post⌿body⌿Opt")), TypeMeta(None, List())), - Reference("⌿paths⌿/pets⌿post⌿body⌿Opt") → - TypeDef(Reference("⌿definitions⌿Pet"), + ArrResult(TypeRef(Reference("⌿paths⌿/pets⌿post⌿body⌿Option⌿Pet")), TypeMeta(None, List())), + Reference("⌿definitions⌿Pet⌿category⌿Option⌿Category") → + TypeDef(Reference("⌿definitions⌿Category"), Seq( - Field(Reference("⌿definitions⌿Pet⌿name"), Str(None, TypeMeta(None, List()))), - Field(Reference("⌿definitions⌿Pet⌿tags"), TypeRef(Reference("⌿definitions⌿Pet⌿tags"))), - Field(Reference("⌿definitions⌿Pet⌿photoUrls"), TypeRef(Reference("⌿definitions⌿Pet⌿photoUrls"))), - Field(Reference("⌿definitions⌿Pet⌿id"), TypeRef(Reference("⌿definitions⌿Order⌿petId"))), - Field(Reference("⌿definitions⌿Pet⌿status"), TypeRef(Reference("⌿definitions⌿Order⌿status"))), - Field(Reference("⌿definitions⌿Pet⌿category"), TypeRef(Reference("⌿definitions⌿Pet⌿category"))) - ), TypeMeta(Some("Named types: 6"), List())), - Reference("⌿paths⌿/users/{username}⌿put⌿body⌿Opt") → + Field(Reference("⌿definitions⌿Category⌿id"), Opt(Lng(TypeMeta(Some("int64"), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Category⌿name"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))) + ), TypeMeta(Some("Named types: 2"), List())), + Reference("⌿paths⌿/users/{username}⌿put⌿body⌿Option⌿User") → TypeDef(Reference("⌿definitions⌿User"), Seq( - Field(Reference("⌿definitions⌿User⌿email"), TypeRef(Reference("⌿definitions⌿Order⌿status"))), - Field(Reference("⌿definitions⌿User⌿username"), TypeRef(Reference("⌿definitions⌿Order⌿status"))), - Field(Reference("⌿definitions⌿User⌿userStatus"), TypeRef(Reference("⌿definitions⌿Order⌿quantity"))), - Field(Reference("⌿definitions⌿User⌿lastName"), TypeRef(Reference("⌿definitions⌿Order⌿status"))), - Field(Reference("⌿definitions⌿User⌿firstName"), TypeRef(Reference("⌿definitions⌿Order⌿status"))), - Field(Reference("⌿definitions⌿User⌿id"), TypeRef(Reference("⌿definitions⌿Order⌿petId"))), - Field(Reference("⌿definitions⌿User⌿phone"), TypeRef(Reference("⌿definitions⌿Order⌿status"))), - Field(Reference("⌿definitions⌿User⌿password"), TypeRef(Reference("⌿definitions⌿Order⌿status"))) + Field(Reference("⌿definitions⌿User⌿email"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿User⌿username"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿User⌿userStatus"), Opt(Intgr(TypeMeta(Some("User Status"), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿User⌿lastName"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿User⌿firstName"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿User⌿id"), Opt(Lng(TypeMeta(Some("int64"), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿User⌿phone"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿User⌿password"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 8"), List())), - Reference("⌿paths⌿/stores/order⌿post⌿body⌿Opt") → + Reference("⌿paths⌿/pets⌿post⌿body⌿Option⌿Pet") → + TypeDef(Reference("⌿definitions⌿Pet"), + Seq( + Field(Reference("⌿definitions⌿Pet⌿name"), Str(None, TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Pet⌿photoUrls"), ArrResult(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Pet⌿id"), Opt(Lng(TypeMeta(Some("int64"), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Pet⌿status"), Opt(Str(None, TypeMeta(Some("pet status in the store"), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Pet⌿tags"), Opt(ArrResult(TypeRef(Reference("⌿definitions⌿Pet⌿category⌿Option⌿Category")), TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Pet⌿category"), Opt(TypeRef(Reference("⌿definitions⌿Pet⌿category⌿Option⌿Category")), TypeMeta(None, List()))) + ), TypeMeta(Some("Named types: 6"), List())), + Reference("⌿paths⌿/stores/order⌿post⌿body⌿Option⌿Order") → TypeDef(Reference("⌿definitions⌿Order"), Seq( - Field(Reference("⌿definitions⌿Order⌿shipDate"), TypeRef(Reference("⌿definitions⌿Order⌿shipDate"))), - Field(Reference("⌿definitions⌿Order⌿quantity"), TypeRef(Reference("⌿definitions⌿Order⌿quantity"))), - Field(Reference("⌿definitions⌿Order⌿petId"), TypeRef(Reference("⌿definitions⌿Order⌿petId"))), - Field(Reference("⌿definitions⌿Order⌿id"), TypeRef(Reference("⌿definitions⌿Order⌿petId"))), - Field(Reference("⌿definitions⌿Order⌿complete"), TypeRef(Reference("⌿definitions⌿Order⌿complete"))), - Field(Reference("⌿definitions⌿Order⌿status"), TypeRef(Reference("⌿definitions⌿Order⌿status"))) + Field(Reference("⌿definitions⌿Order⌿shipDate"), Opt(DateTime(TypeMeta(Some("date-time"), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Order⌿quantity"), Opt(Intgr(TypeMeta(Some("int32"), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Order⌿petId"), Opt(Lng(TypeMeta(Some("int64"), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Order⌿id"), Opt(Lng(TypeMeta(Some("int64"), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Order⌿complete"), Opt(Bool(TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Order⌿status"), Opt(Str(None, TypeMeta(Some("Order Status"), List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 6"), List())) ) @@ -106,12 +86,12 @@ object split_petstore_api_yaml extends WithModel { ParameterRef( Reference("⌿paths⌿/users/createWithList⌿post⌿body")) → Parameter("body", TypeRef(Reference("⌿paths⌿/users/createWithList⌿post⌿body")), None, None, ".+", encode = false, ParameterPlace.withName("body")), ParameterRef( Reference("⌿paths⌿/users/{username}⌿get⌿username")) → Parameter("username", Str(None, TypeMeta(None, List())), None, None, "[^/]+", encode = true, ParameterPlace.withName("path")), ParameterRef( Reference("⌿paths⌿/users/{username}⌿delete⌿username")) → Parameter("username", Str(None, TypeMeta(None, List())), None, None, "[^/]+", encode = true, ParameterPlace.withName("path")), - ParameterRef( Reference("⌿paths⌿/users/login⌿get⌿password")) → Parameter("password", TypeRef(Reference("⌿definitions⌿Order⌿status")), None, None, ".+", encode = true, ParameterPlace.withName("query")), + ParameterRef( Reference("⌿paths⌿/users/login⌿get⌿password")) → Parameter("password", TypeRef(Reference("⌿paths⌿/users/login⌿get⌿username")), None, None, ".+", encode = true, ParameterPlace.withName("query")), ParameterRef( Reference("⌿paths⌿/stores/order⌿post⌿body")) → Parameter("body", TypeRef(Reference("⌿paths⌿/stores/order⌿post⌿body")), None, None, ".+", encode = false, ParameterPlace.withName("body")), ParameterRef( Reference("⌿paths⌿/users/createWithArray⌿post⌿body")) → Parameter("body", TypeRef(Reference("⌿paths⌿/users/createWithList⌿post⌿body")), None, None, ".+", encode = false, ParameterPlace.withName("body")), ParameterRef( Reference("⌿paths⌿/users⌿post⌿body")) → Parameter("body", TypeRef(Reference("⌿paths⌿/users/{username}⌿put⌿body")), None, None, ".+", encode = false, ParameterPlace.withName("body")), ParameterRef( Reference("⌿paths⌿/pets/findByStatus⌿get⌿status")) → Parameter("status", TypeRef(Reference("⌿paths⌿/pets/findByStatus⌿get⌿status")), None, None, ".+", encode = true, ParameterPlace.withName("query")), - ParameterRef( Reference("⌿paths⌿/users/login⌿get⌿username")) → Parameter("username", TypeRef(Reference("⌿definitions⌿Order⌿status")), None, None, ".+", encode = true, ParameterPlace.withName("query")), + ParameterRef( Reference("⌿paths⌿/users/login⌿get⌿username")) → Parameter("username", TypeRef(Reference("⌿paths⌿/users/login⌿get⌿username")), None, None, ".+", encode = true, ParameterPlace.withName("query")), ParameterRef( Reference("⌿paths⌿/pets/{petId}⌿post⌿status")) → Parameter("status", Str(None, TypeMeta(None, List())), None, None, ".+", encode = true, ParameterPlace.withName("formData")), ParameterRef( Reference("⌿paths⌿/pets/findByTags⌿get⌿tags")) → Parameter("tags", TypeRef(Reference("⌿paths⌿/pets/findByStatus⌿get⌿status")), None, None, ".+", encode = true, ParameterPlace.withName("query")), ParameterRef( Reference("⌿paths⌿/stores/order/{orderId}⌿get⌿orderId")) → Parameter("orderId", Str(None, TypeMeta(None, List())), None, None, "[^/]+", encode = true, ParameterPlace.withName("path")) @@ -167,7 +147,7 @@ def calls: Seq[ApiCall] = Seq( TypesResponseInfo( Map[Int, ParameterRef]( 400 -> ParameterRef(Reference("⌿paths⌿/users/createWithList⌿post⌿responses⌿default")), - 200 -> ParameterRef(Reference("⌿paths⌿/stores/order⌿post⌿body⌿Opt")) + 200 -> ParameterRef(Reference("⌿paths⌿/stores/order⌿post⌿body⌿Option⌿Order")) ), None), StateResponseInfo( Map[Int, State]( @@ -224,7 +204,7 @@ def calls: Seq[ApiCall] = Seq( Map[Int, ParameterRef]( 404 -> ParameterRef(Reference("⌿paths⌿/users/createWithList⌿post⌿responses⌿default")), 400 -> ParameterRef(Reference("⌿paths⌿/users/createWithList⌿post⌿responses⌿default")), - 200 -> ParameterRef(Reference("⌿paths⌿/users/{username}⌿put⌿body⌿Opt")) + 200 -> ParameterRef(Reference("⌿paths⌿/users/{username}⌿put⌿body⌿Option⌿User")) ), None), StateResponseInfo( Map[Int, State]( @@ -367,7 +347,7 @@ def calls: Seq[ApiCall] = Seq( Map[Int, ParameterRef]( 404 -> ParameterRef(Reference("⌿paths⌿/users/createWithList⌿post⌿responses⌿default")), 400 -> ParameterRef(Reference("⌿paths⌿/users/createWithList⌿post⌿responses⌿default")), - 200 -> ParameterRef(Reference("⌿paths⌿/stores/order⌿post⌿body⌿Opt")) + 200 -> ParameterRef(Reference("⌿paths⌿/stores/order⌿post⌿body⌿Option⌿Order")) ), None), StateResponseInfo( Map[Int, State]( @@ -433,7 +413,7 @@ def calls: Seq[ApiCall] = Seq( Map[Int, ParameterRef]( 404 -> ParameterRef(Reference("⌿paths⌿/users/createWithList⌿post⌿responses⌿default")), 400 -> ParameterRef(Reference("⌿paths⌿/users/createWithList⌿post⌿responses⌿default")), - 200 -> ParameterRef(Reference("⌿paths⌿/pets⌿post⌿body⌿Opt")) + 200 -> ParameterRef(Reference("⌿paths⌿/pets⌿post⌿body⌿Option⌿Pet")) ), None), StateResponseInfo( Map[Int, State]( diff --git a/play-scala-generator/src/test/scala/model/resources.type_deduplication_yaml.scala b/play-scala-generator/src/test/scala/model/resources.type_deduplication_yaml.scala index 86177e9c..74e5d144 100644 --- a/play-scala-generator/src/test/scala/model/resources.type_deduplication_yaml.scala +++ b/play-scala-generator/src/test/scala/model/resources.type_deduplication_yaml.scala @@ -15,70 +15,66 @@ object type_deduplication_yaml extends WithModel { Reference("⌿definitions⌿SunlightNeeds") → TypeDef(Reference("⌿definitions⌿SunlightNeeds"), Seq( - Field(Reference("⌿definitions⌿SunlightNeeds⌿amount"), TypeRef(Reference("⌿definitions⌿Plant⌿plant_id"))) + Field(Reference("⌿definitions⌿SunlightNeeds⌿amount"), Opt(Str(None, TypeMeta(Some("Amount of sunlight the plant need."), List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 1"), List())), Reference("⌿definitions⌿Plant") → TypeDef(Reference("⌿definitions⌿Plant"), Seq( - Field(Reference("⌿definitions⌿Plant⌿species"), TypeRef(Reference("⌿definitions⌿Plant⌿plant_id"))), - Field(Reference("⌿definitions⌿Plant⌿name"), TypeRef(Reference("⌿definitions⌿Plant⌿plant_id"))), - Field(Reference("⌿definitions⌿Plant⌿description"), TypeRef(Reference("⌿definitions⌿Plant⌿plant_id"))), - Field(Reference("⌿definitions⌿Plant⌿owner_id"), TypeRef(Reference("⌿definitions⌿Plant⌿plant_id"))), - Field(Reference("⌿definitions⌿Plant⌿plant_id"), TypeRef(Reference("⌿definitions⌿Plant⌿plant_id"))), - Field(Reference("⌿definitions⌿Plant⌿godparent"), TypeRef(Reference("⌿definitions⌿Plant⌿plant_id"))) + Field(Reference("⌿definitions⌿Plant⌿species"), Opt(Str(None, TypeMeta(Some("Species of the plant."), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Plant⌿name"), Opt(Str(None, TypeMeta(Some("User defined name of the plant."), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Plant⌿description"), Opt(Str(None, TypeMeta(Some("User defined description of the plant."), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Plant⌿owner_id"), Opt(Str(None, TypeMeta(Some("ID of the owner of this plant."), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Plant⌿plant_id"), Opt(Str(None, TypeMeta(Some("Unique identifier representing a plant."), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Plant⌿godparent"), Opt(Str(None, TypeMeta(Some("ID of the godparent of this plant. Can be empty if no godparent is assigned"), List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 6"), List())), Reference("⌿definitions⌿User") → TypeDef(Reference("⌿definitions⌿User"), Seq( - Field(Reference("⌿definitions⌿User⌿user_id"), TypeRef(Reference("⌿definitions⌿Plant⌿plant_id"))), - Field(Reference("⌿definitions⌿User⌿name"), TypeRef(Reference("⌿definitions⌿Plant⌿plant_id"))), - Field(Reference("⌿definitions⌿User⌿area_id"), TypeRef(Reference("⌿definitions⌿Plant⌿plant_id"))) + Field(Reference("⌿definitions⌿User⌿user_id"), Opt(Str(None, TypeMeta(Some("ID of the user."), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿User⌿name"), Opt(Str(None, TypeMeta(Some("Display name of the user."), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿User⌿area_id"), Opt(Str(None, TypeMeta(Some("Id of the area where the user is usually located."), List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 3"), List())), Reference("⌿definitions⌿SigninData") → TypeDef(Reference("⌿definitions⌿SigninData"), Seq( - Field(Reference("⌿definitions⌿SigninData⌿username"), TypeRef(Reference("⌿definitions⌿Plant⌿plant_id"))), - Field(Reference("⌿definitions⌿SigninData⌿password"), TypeRef(Reference("⌿definitions⌿Plant⌿plant_id"))), - Field(Reference("⌿definitions⌿SigninData⌿email"), TypeRef(Reference("⌿definitions⌿Plant⌿plant_id"))) + Field(Reference("⌿definitions⌿SigninData⌿username"), Opt(Str(None, TypeMeta(Some("Name of the new user."), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿SigninData⌿password"), Opt(Str(None, TypeMeta(Some("Password of the new user."), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿SigninData⌿email"), Opt(Str(None, TypeMeta(Some("E-mail address of the new user."), List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 3"), List())), Reference("⌿definitions⌿Watering") → TypeDef(Reference("⌿definitions⌿Watering"), Seq( - Field(Reference("⌿definitions⌿Watering⌿watering_id"), TypeRef(Reference("⌿definitions⌿Plant⌿plant_id"))), - Field(Reference("⌿definitions⌿Watering⌿user_id"), TypeRef(Reference("⌿definitions⌿Plant⌿plant_id"))), - Field(Reference("⌿definitions⌿Watering⌿date"), TypeRef(Reference("⌿definitions⌿Plant⌿plant_id"))) + Field(Reference("⌿definitions⌿Watering⌿watering_id"), Opt(Str(None, TypeMeta(Some("Id of the watering."), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Watering⌿user_id"), Opt(Str(None, TypeMeta(Some("Id of the user responsible for watering this plant."), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Watering⌿date"), Opt(Str(None, TypeMeta(Some("Date of the last time the plant was watered."), List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 3"), List())), Reference("⌿definitions⌿Area") → TypeDef(Reference("⌿definitions⌿Area"), Seq( - Field(Reference("⌿definitions⌿Area⌿area_id"), TypeRef(Reference("⌿definitions⌿Plant⌿plant_id"))), - Field(Reference("⌿definitions⌿Area⌿building"), TypeRef(Reference("⌿definitions⌿Plant⌿plant_id"))), - Field(Reference("⌿definitions⌿Area⌿floor"), TypeRef(Reference("⌿definitions⌿Plant⌿plant_id"))), - Field(Reference("⌿definitions⌿Area⌿room"), TypeRef(Reference("⌿definitions⌿Plant⌿plant_id"))) + Field(Reference("⌿definitions⌿Area⌿area_id"), Opt(Str(None, TypeMeta(Some("ID of the area."), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Area⌿building"), Opt(Str(None, TypeMeta(Some("Name of the building."), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Area⌿floor"), Opt(Str(None, TypeMeta(Some("Name of the floor."), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Area⌿room"), Opt(Str(None, TypeMeta(Some("Name of the room within the building."), List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 4"), List())), Reference("⌿definitions⌿Location") → TypeDef(Reference("⌿definitions⌿Location"), Seq( - Field(Reference("⌿definitions⌿Location⌿area_id"), TypeRef(Reference("⌿definitions⌿Plant⌿plant_id"))), - Field(Reference("⌿definitions⌿Location⌿details"), TypeRef(Reference("⌿definitions⌿Plant⌿plant_id"))) + Field(Reference("⌿definitions⌿Location⌿area_id"), Opt(Str(None, TypeMeta(Some("ID of the area of the location."), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Location⌿details"), Opt(Str(None, TypeMeta(Some("""Details of the location within the specified area (e.g. "desk 1" or "windowsill" )."""), List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 2"), List())), Reference("⌿definitions⌿Error") → TypeDef(Reference("⌿definitions⌿Error"), Seq( - Field(Reference("⌿definitions⌿Error⌿code"), TypeRef(Reference("⌿definitions⌿Error⌿code"))), - Field(Reference("⌿definitions⌿Error⌿message"), TypeRef(Reference("⌿definitions⌿Plant⌿plant_id"))), - Field(Reference("⌿definitions⌿Error⌿fields"), TypeRef(Reference("⌿definitions⌿Plant⌿plant_id"))) + Field(Reference("⌿definitions⌿Error⌿code"), Opt(Intgr(TypeMeta(Some("int32"), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Error⌿message"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Error⌿fields"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 3"), List())), Reference("⌿definitions⌿WaterNeeds") → TypeDef(Reference("⌿definitions⌿WaterNeeds"), Seq( - Field(Reference("⌿definitions⌿WaterNeeds⌿amount"), TypeRef(Reference("⌿definitions⌿Plant⌿plant_id"))), - Field(Reference("⌿definitions⌿WaterNeeds⌿period"), TypeRef(Reference("⌿definitions⌿Plant⌿plant_id"))) + Field(Reference("⌿definitions⌿WaterNeeds⌿amount"), Opt(Str(None, TypeMeta(Some("Amount of water to be used."), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿WaterNeeds⌿period"), Opt(Str(None, TypeMeta(Some("How often the plant shall be watered."), List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 2"), List())), - Reference("⌿definitions⌿Plant⌿plant_id") → - Opt(Str(None, TypeMeta(Some("Unique identifier representing a plant."), List())), TypeMeta(None, List())), - Reference("⌿definitions⌿Error⌿code") → - Opt(Intgr(TypeMeta(Some("int32"), List())), TypeMeta(None, List())), Reference("⌿paths⌿/plants/{plant_id}/waterings⌿get⌿plant_id") → Str(None, TypeMeta(None, List())), Reference("⌿paths⌿/users⌿get⌿limit") → diff --git a/play-scala-generator/src/test/scala/model/resources.uber_api_yaml.scala b/play-scala-generator/src/test/scala/model/resources.uber_api_yaml.scala index 74ecfa24..dad964af 100644 --- a/play-scala-generator/src/test/scala/model/resources.uber_api_yaml.scala +++ b/play-scala-generator/src/test/scala/model/resources.uber_api_yaml.scala @@ -15,66 +15,60 @@ object uber_api_yaml extends WithModel { Reference("⌿definitions⌿Activity") → TypeDef(Reference("⌿definitions⌿Activity"), Seq( - Field(Reference("⌿definitions⌿Activity⌿uuid"), TypeRef(Reference("⌿definitions⌿Profile⌿picture"))) + Field(Reference("⌿definitions⌿Activity⌿uuid"), Opt(Str(None, TypeMeta(Some("Unique identifier for the activity"), List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 1"), List())), Reference("⌿definitions⌿PriceEstimate") → TypeDef(Reference("⌿definitions⌿PriceEstimate"), Seq( - Field(Reference("⌿definitions⌿PriceEstimate⌿low_estimate"), TypeRef(Reference("⌿definitions⌿PriceEstimate⌿high_estimate"))), - Field(Reference("⌿definitions⌿PriceEstimate⌿display_name"), TypeRef(Reference("⌿definitions⌿Profile⌿picture"))), - Field(Reference("⌿definitions⌿PriceEstimate⌿estimate"), TypeRef(Reference("⌿definitions⌿Profile⌿picture"))), - Field(Reference("⌿definitions⌿PriceEstimate⌿high_estimate"), TypeRef(Reference("⌿definitions⌿PriceEstimate⌿high_estimate"))), - Field(Reference("⌿definitions⌿PriceEstimate⌿product_id"), TypeRef(Reference("⌿definitions⌿Profile⌿picture"))), - Field(Reference("⌿definitions⌿PriceEstimate⌿currency_code"), TypeRef(Reference("⌿definitions⌿Profile⌿picture"))), - Field(Reference("⌿definitions⌿PriceEstimate⌿surge_multiplier"), TypeRef(Reference("⌿definitions⌿PriceEstimate⌿high_estimate"))) + Field(Reference("⌿definitions⌿PriceEstimate⌿low_estimate"), Opt(BDcml(TypeMeta(Some("Lower bound of the estimated price."), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿PriceEstimate⌿display_name"), Opt(Str(None, TypeMeta(Some("Display name of product."), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿PriceEstimate⌿estimate"), Opt(Str(None, TypeMeta(Some("""Formatted string of estimate in local currency of the start location. Estimate could be a range, a single number (flat rate) or "Metered" for TAXI."""), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿PriceEstimate⌿high_estimate"), Opt(BDcml(TypeMeta(Some("Upper bound of the estimated price."), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿PriceEstimate⌿product_id"), Opt(Str(None, TypeMeta(Some("Unique identifier representing a specific product for a given latitude & longitude. For example, uberX in San Francisco will have a different product_id than uberX in Los Angeles"), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿PriceEstimate⌿currency_code"), Opt(Str(None, TypeMeta(Some("[ISO 4217](http://en.wikipedia.org/wiki/ISO_4217) currency code."), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿PriceEstimate⌿surge_multiplier"), Opt(BDcml(TypeMeta(Some("Expected surge multiplier. Surge is active if surge_multiplier is greater than 1. Price estimate already factors in the surge multiplier."), List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 7"), List())), Reference("⌿definitions⌿Product") → TypeDef(Reference("⌿definitions⌿Product"), Seq( - Field(Reference("⌿definitions⌿Product⌿image"), TypeRef(Reference("⌿definitions⌿Profile⌿picture"))), - Field(Reference("⌿definitions⌿Product⌿description"), TypeRef(Reference("⌿definitions⌿Profile⌿picture"))), - Field(Reference("⌿definitions⌿Product⌿display_name"), TypeRef(Reference("⌿definitions⌿Profile⌿picture"))), - Field(Reference("⌿definitions⌿Product⌿product_id"), TypeRef(Reference("⌿definitions⌿Profile⌿picture"))), - Field(Reference("⌿definitions⌿Product⌿capacity"), TypeRef(Reference("⌿definitions⌿Profile⌿picture"))) + Field(Reference("⌿definitions⌿Product⌿image"), Opt(Str(None, TypeMeta(Some("Image URL representing the product."), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Product⌿description"), Opt(Str(None, TypeMeta(Some("Description of product."), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Product⌿display_name"), Opt(Str(None, TypeMeta(Some("Display name of product."), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Product⌿product_id"), Opt(Str(None, TypeMeta(Some("Unique identifier representing a specific product for a given latitude & longitude. For example, uberX in San Francisco will have a different product_id than uberX in Los Angeles."), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Product⌿capacity"), Opt(Str(None, TypeMeta(Some("Capacity of product. For example, 4 people."), List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 5"), List())), Reference("⌿definitions⌿Profile") → TypeDef(Reference("⌿definitions⌿Profile"), Seq( - Field(Reference("⌿definitions⌿Profile⌿first_name"), TypeRef(Reference("⌿definitions⌿Profile⌿picture"))), - Field(Reference("⌿definitions⌿Profile⌿email"), TypeRef(Reference("⌿definitions⌿Profile⌿picture"))), - Field(Reference("⌿definitions⌿Profile⌿promo_code"), TypeRef(Reference("⌿definitions⌿Profile⌿picture"))), - Field(Reference("⌿definitions⌿Profile⌿last_name"), TypeRef(Reference("⌿definitions⌿Profile⌿picture"))), - Field(Reference("⌿definitions⌿Profile⌿picture"), TypeRef(Reference("⌿definitions⌿Profile⌿picture"))) + Field(Reference("⌿definitions⌿Profile⌿first_name"), Opt(Str(None, TypeMeta(Some("First name of the Uber user."), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Profile⌿email"), Opt(Str(None, TypeMeta(Some("Email address of the Uber user"), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Profile⌿promo_code"), Opt(Str(None, TypeMeta(Some("Promo code of the Uber user."), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Profile⌿last_name"), Opt(Str(None, TypeMeta(Some("Last name of the Uber user."), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Profile⌿picture"), Opt(Str(None, TypeMeta(Some("Image URL of the Uber user."), List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 5"), List())), Reference("⌿definitions⌿Activities") → TypeDef(Reference("⌿definitions⌿Activities"), Seq( - Field(Reference("⌿definitions⌿Activities⌿offset"), TypeRef(Reference("⌿definitions⌿Error⌿code"))), - Field(Reference("⌿definitions⌿Activities⌿limit"), TypeRef(Reference("⌿definitions⌿Error⌿code"))), - Field(Reference("⌿definitions⌿Activities⌿count"), TypeRef(Reference("⌿definitions⌿Error⌿code"))), - Field(Reference("⌿definitions⌿Activities⌿history"), TypeRef(Reference("⌿definitions⌿Activities⌿history"))) + Field(Reference("⌿definitions⌿Activities⌿offset"), Opt(Intgr(TypeMeta(Some("Position in pagination."), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Activities⌿limit"), Opt(Intgr(TypeMeta(Some("Number of items to retrieve (100 max)."), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Activities⌿count"), Opt(Intgr(TypeMeta(Some("Total number of items available."), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Activities⌿history"), Opt(ArrResult(TypeRef(Reference("⌿definitions⌿Activity")), TypeMeta(None, List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 4"), List())), Reference("⌿definitions⌿Error") → TypeDef(Reference("⌿definitions⌿Error"), Seq( - Field(Reference("⌿definitions⌿Error⌿code"), TypeRef(Reference("⌿definitions⌿Error⌿code"))), - Field(Reference("⌿definitions⌿Error⌿message"), TypeRef(Reference("⌿definitions⌿Profile⌿picture"))), - Field(Reference("⌿definitions⌿Error⌿fields"), TypeRef(Reference("⌿definitions⌿Profile⌿picture"))) + Field(Reference("⌿definitions⌿Error⌿code"), Opt(Intgr(TypeMeta(Some("int32"), List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Error⌿message"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))), + Field(Reference("⌿definitions⌿Error⌿fields"), Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List()))) ), TypeMeta(Some("Named types: 3"), List())), - Reference("⌿definitions⌿Activities⌿history") → - Opt(TypeRef(Reference("⌿definitions⌿Activities⌿history⌿Opt")), TypeMeta(None, List())), - Reference("⌿definitions⌿Profile⌿picture") → - Opt(Str(None, TypeMeta(Some("Image URL of the Uber user."), List())), TypeMeta(None, List())), - Reference("⌿definitions⌿Error⌿code") → - Opt(Intgr(TypeMeta(Some("int32"), List())), TypeMeta(None, List())), - Reference("⌿definitions⌿PriceEstimate⌿high_estimate") → - Opt(BDcml(TypeMeta(Some("Upper bound of the estimated price."), List())), TypeMeta(None, List())), Reference("⌿paths⌿/estimates/price⌿get⌿end_latitude") → Dbl(TypeMeta(Some("double"), List())), + Reference("⌿paths⌿/history⌿get⌿limit") → + Opt(Intgr(TypeMeta(Some("int32"), List())), TypeMeta(None, List())), Reference("⌿paths⌿/estimates/time⌿get⌿customer_uuid") → Opt(UUID(TypeMeta(Some("uuid"), List())), TypeMeta(None, List())), - Reference("⌿definitions⌿Activities⌿history⌿Opt") → - ArrResult(TypeRef(Reference("⌿definitions⌿Activity")), TypeMeta(None, List())), + Reference("⌿paths⌿/estimates/time⌿get⌿product_id") → + Opt(Str(None, TypeMeta(None, List())), TypeMeta(None, List())), Reference("⌿paths⌿/products⌿get⌿responses⌿200") → ArrResult(TypeRef(Reference("⌿definitions⌿Product")), TypeMeta(None, List())), Reference("⌿paths⌿/estimates/price⌿get⌿responses⌿200") → @@ -88,12 +82,12 @@ object uber_api_yaml extends WithModel { ParameterRef( Reference("⌿paths⌿/estimates/time⌿get⌿customer_uuid")) → Parameter("customer_uuid", TypeRef(Reference("⌿paths⌿/estimates/time⌿get⌿customer_uuid")), None, None, ".+", encode = true, ParameterPlace.withName("query")), ParameterRef( Reference("⌿paths⌿/estimates/price⌿get⌿end_latitude")) → Parameter("end_latitude", Dbl(TypeMeta(Some("double"), List())), None, None, ".+", encode = true, ParameterPlace.withName("query")), ParameterRef( Reference("⌿paths⌿/estimates/time⌿get⌿start_latitude")) → Parameter("start_latitude", Dbl(TypeMeta(Some("double"), List())), None, None, ".+", encode = true, ParameterPlace.withName("query")), - ParameterRef( Reference("⌿paths⌿/history⌿get⌿limit")) → Parameter("limit", TypeRef(Reference("⌿definitions⌿Error⌿code")), None, None, ".+", encode = true, ParameterPlace.withName("query")), + ParameterRef( Reference("⌿paths⌿/history⌿get⌿limit")) → Parameter("limit", TypeRef(Reference("⌿paths⌿/history⌿get⌿limit")), None, None, ".+", encode = true, ParameterPlace.withName("query")), ParameterRef( Reference("⌿paths⌿/products⌿get⌿longitude")) → Parameter("longitude", Dbl(TypeMeta(Some("double"), List())), None, None, ".+", encode = true, ParameterPlace.withName("query")), ParameterRef( Reference("⌿paths⌿/estimates/price⌿get⌿start_longitude")) → Parameter("start_longitude", Dbl(TypeMeta(Some("double"), List())), None, None, ".+", encode = true, ParameterPlace.withName("query")), - ParameterRef( Reference("⌿paths⌿/estimates/time⌿get⌿product_id")) → Parameter("product_id", TypeRef(Reference("⌿definitions⌿Profile⌿picture")), None, None, ".+", encode = true, ParameterPlace.withName("query")), + ParameterRef( Reference("⌿paths⌿/estimates/time⌿get⌿product_id")) → Parameter("product_id", TypeRef(Reference("⌿paths⌿/estimates/time⌿get⌿product_id")), None, None, ".+", encode = true, ParameterPlace.withName("query")), ParameterRef( Reference("⌿paths⌿/products⌿get⌿latitude")) → Parameter("latitude", Dbl(TypeMeta(Some("double"), List())), None, None, ".+", encode = true, ParameterPlace.withName("query")), - ParameterRef( Reference("⌿paths⌿/history⌿get⌿offset")) → Parameter("offset", TypeRef(Reference("⌿definitions⌿Error⌿code")), None, None, ".+", encode = true, ParameterPlace.withName("query")) + ParameterRef( Reference("⌿paths⌿/history⌿get⌿offset")) → Parameter("offset", TypeRef(Reference("⌿paths⌿/history⌿get⌿limit")), None, None, ".+", encode = true, ParameterPlace.withName("query")) ) def basePath: String = "/v1" def discriminators: DiscriminatorLookupTable = Map[Reference, Reference]( diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 2ab51024..bb4ad1c9 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -46,9 +46,9 @@ class Dependencies(playVersion: String, projectVersion: String, scalaVersion: St val api = Seq(play, playClient) ++ jacksons - val playScalaGenerator = Seq(commonsIO, beard) + val playScalaGenerator = Seq(commonsIO, beard) ++ jacksons val swaggerModel = jsonRef +: jacksons def swaggerParser(scalaVersion: String): Seq[ModuleID] = swaggerModel ++ scalaParserCombinators(scalaVersion) -} \ No newline at end of file +} diff --git a/swagger-parser/src/test/resources/examples/enum.yaml b/swagger-parser/src/test/resources/examples/enum.yaml new file mode 100644 index 00000000..6a695d1d --- /dev/null +++ b/swagger-parser/src/test/resources/examples/enum.yaml @@ -0,0 +1,21 @@ +swagger: "2.0" + +info: + title: Enum API + version: "0.0.1" + +paths: + /test: + get: + parameters: + - name: includes + in: query + type: string + enum: + - option_one + - option_two + responses: + '200': + description: Example response + schema: + type: string diff --git a/swagger-parser/src/test/resources/examples/foodpanda.yaml b/swagger-parser/src/test/resources/examples/foodpanda.yaml new file mode 100644 index 00000000..7691838f --- /dev/null +++ b/swagger-parser/src/test/resources/examples/foodpanda.yaml @@ -0,0 +1,96 @@ +swagger: "2.0" + +info: + title: FoodPanda API for search + description: Provides functionalities to search populated in Elasticsearch instances + version: "0.0.1" + +basePath: /api + +schemes: + - http + - https + +produces: + - application/json + +x-api-first-package: com.foodpanda.popsey.api + +paths: + /vendors: + x-swagger-router-controller: vendor + get: + operationId: searchVendors + description: Common vendor search + parameters: + - name: query + description: Complex query object + in: body + required: true + schema: + $ref: "#/definitions/VendorQuery" + responses: + '200': + description: List of vendors found + schema: + type: integer + format: int32 + +# complex objects have schema definitions +definitions: + + VendorQuery: + type: object + properties: + vendor_codes: + type: array + items: + type: string + includes: + type: string + enum: + - menus + - payments + + VendorsResponse: + type: object + required: + - total_hits + properties: + total_hits: + type: integer + format: int32 + minimum: 0 + vendors: + type: array + items: + $ref: '#/definitions/Vendor' + + Vendor: + type: object + required: + - id + properties: + id: + type: integer + format: int64 + minimum: 1 + location: + $ref: '#/definitions/Location' + + Location: + type: object + required: + - latitude + - longitude + properties: + latitude: + type: number + format: float + minimum: -90 + maximum: 90 + longitude: + type: number + format: float + minimum: -180 + maximum: 180 diff --git a/swagger-parser/src/test/scala/de/zalando/swagger/ModelDumper.scala b/swagger-parser/src/test/scala/de/zalando/swagger/ModelDumper.scala index 63809ebe..e2a4312a 100644 --- a/swagger-parser/src/test/scala/de/zalando/swagger/ModelDumper.scala +++ b/swagger-parser/src/test/scala/de/zalando/swagger/ModelDumper.scala @@ -24,7 +24,7 @@ object ModelDumper extends App with ExpectedResults { val validationFixtures = new File(resourcesPath + "validations").listFiles - def toTest: File => Boolean = f => f.getName.endsWith(".yaml") && f.getName.startsWith("i038") + def toTest: File => Boolean = f => f.getName.endsWith(".yaml") && f.getName.startsWith("enum") def run: Unit = { (modelFixtures ++ exampleFixtures ++ validationFixtures).filter(toTest).foreach { file =>