From a327192bd8557faa52063e3328a2577030021fff Mon Sep 17 00:00:00 2001 From: "i.petriaev" Date: Tue, 21 Feb 2017 14:13:20 +0100 Subject: [PATCH] No aliases for containers fix parser inlude types remove types for arr and opt fix seq and opt debugging tests fix fixtures remove debug minor fixes fix deduplicator remove unnecessary fixes update validation and form fixtures update test data fixture update recursive type generation fix recursive container update tests fixture update fixtures update fixtures fix controller types fix controllers fix fixtures Rename methods and add a test for TypeAnalyzer Move Field back change test split replaceType code style Fix replaceContainerType Fix echo test Fxi parameters, types. Update tests update core test results Fix flattener, update fixtures Fix validation Fix enums Remove duplicated code Fix writable_name added test cleanup fix typo update tests update tests --- .../de/zalando/apifirst/TypeFlattener.scala | 143 ++++++-- .../scala/de/zalando/apifirst/naming.scala | 3 +- .../apifirst/ParameterDereferencerTest.scala | 24 +- .../zalando/apifirst/TypeAnalyzerTest.scala | 66 ++++ .../apifirst/TypeDeduplicatorTest.scala | 1 - .../TypeFlattenerIntegrationTest.scala | 13 +- .../zalando/apifirst/TypeFlattenerTest.scala | 49 ++- .../scala/model/resources.enum_yaml.scala | 71 ++++ .../model/resources.foodpanda_yaml.scala | 92 +++++ .../scala/model/resources.hackweek_yaml.scala | 108 +++--- .../generators/AstScalaPlayEnricher.scala | 10 +- .../apifirst/generators/CallTestsStep.scala | 2 +- .../generators/DataGeneratorsStep.scala | 2 +- .../apifirst/generators/MarshallersStep.scala | 3 +- .../apifirst/generators/commonDataSteps.scala | 16 +- .../apifirst/generators/controllersStep.scala | 6 +- .../apifirst/generators/modelSteps.scala | 33 +- .../apifirst/generators/validationSteps.scala | 15 +- .../basic_polymorphism_yaml.base.scala | 8 +- .../base_controllers/echo_api_yaml.base.scala | 4 +- .../base_controllers/enum_yaml.base.scala | 71 ++++ .../expanded_polymorphism_yaml.base.scala | 6 +- .../foodpanda_yaml.base.scala | 76 ++++ .../form_data_yaml.base.scala | 14 +- .../full_petstore_api_yaml.base.scala | 76 ++-- .../heroku_petstore_api_yaml.base.scala | 8 +- .../instagram_api_yaml.base.scala | 72 ++-- .../base_controllers/nakadi_yaml.base.scala | 28 +- .../security_api_yaml.base.scala | 6 +- .../simple_petstore_api_yaml.base.scala | 6 +- .../split_petstore_api_yaml.base.scala | 76 ++-- .../string_formats_yaml.base.scala | 10 +- .../type_deduplication_yaml.base.scala | 36 +- .../base_controllers/uber_api_yaml.base.scala | 14 +- .../wrong_field_name_yaml.base.scala | 6 +- .../controllers/all_of_imports_yaml.scala | 5 +- .../controllers/basic_auth_api_yaml.scala | 5 +- .../controllers/basic_polymorphism_yaml.scala | 5 +- .../cross_spec_references_yaml.scala | 5 +- .../controllers/echo_api_yaml.scala | 12 +- .../controllers/enum_yaml.scala | 45 +++ .../controllers/error_in_array_yaml.scala | 5 +- .../expanded_polymorphism_yaml.scala | 9 +- .../controllers/foodpanda_yaml.scala | 45 +++ .../controllers/form_data_yaml.scala | 9 +- .../controllers/full_petstore_api_yaml.scala | 35 +- .../controllers/hackweek_yaml.scala | 5 +- .../heroku_petstore_api_yaml.scala | 11 +- .../i038_invalid_enum_members_yaml.scala | 5 +- .../controllers/instagram_api_yaml.scala | 55 +-- .../controllers/minimal_api_yaml.scala | 5 +- .../controllers/nakadi_yaml.scala | 17 +- .../controllers/security_api_yaml.scala | 5 +- .../simple_petstore_api_yaml.scala | 14 +- .../controllers/split_petstore_api_yaml.scala | 35 +- .../controllers/string_formats_yaml.scala | 5 +- .../controllers/type_deduplication_yaml.scala | 45 +-- .../controllers/uber_api_yaml.scala | 9 +- .../controllers/wrong_field_name_yaml.scala | 5 +- .../form_parsers/echo_api_yaml.scala | 8 +- .../form_parsers/form_data_yaml.scala | 24 +- .../form_parsers/full_petstore_api_yaml.scala | 2 +- .../split_petstore_api_yaml.scala | 2 +- .../marshallers/foodpanda_yaml.scala | 62 ++++ .../marshallers/form_data_yaml.scala | 10 +- .../marshallers/full_petstore_api_yaml.scala | 70 ++-- .../heroku_petstore_api_yaml.scala | 24 +- .../marshallers/instagram_api_yaml.scala | 68 ++-- .../marshallers/nakadi_yaml.scala | 32 +- .../marshallers/security_api_yaml.scala | 16 +- .../simple_petstore_api_yaml.scala | 60 +-- .../marshallers/split_petstore_api_yaml.scala | 70 ++-- .../marshallers/string_formats_yaml.scala | 12 +- .../marshallers/type_deduplication_yaml.scala | 56 +-- .../marshallers/uber_api_yaml.scala | 22 +- .../model/additional_properties_yaml.scala | 3 +- .../model/basic_polymorphism_yaml.scala | 5 +- .../model/cross_spec_references_yaml.scala | 39 +- .../model/echo_api_yaml.scala | 3 +- .../expected_results/model/enum_yaml.scala | 41 +++ .../model/error_in_array_yaml.scala | 56 ++- .../model/expanded_polymorphism_yaml.scala | 13 +- .../model/foodpanda_yaml.scala | 48 +++ .../model/form_data_yaml.scala | 9 +- .../model/full_petstore_api_yaml.scala | 39 +- .../model/hackweek_yaml.scala | 56 ++- .../model/heroku_petstore_api_yaml.scala | 8 +- .../model/instagram_api_yaml.scala | 115 +++--- .../expected_results/model/nakadi_yaml.scala | 31 +- .../model/nested_arrays_validation_yaml.scala | 18 +- .../model/nested_arrays_yaml.scala | 13 +- .../nested_objects_validation_yaml.scala | 18 +- .../model/nested_objects_yaml.scala | 14 +- .../nested_options_validation_yaml.scala | 8 +- .../model/nested_options_yaml.scala | 6 +- .../model/numbers_validation_yaml.scala | 4 - .../expected_results/model/options_yaml.scala | 4 +- .../model/security_api_yaml.scala | 5 +- .../model/simple_petstore_api_yaml.scala | 14 +- .../model/split_petstore_api_yaml.scala | 29 +- .../string_formats_validation_yaml.scala | 8 +- .../model/string_formats_yaml.scala | 8 +- .../model/type_deduplication_yaml.scala | 40 +- .../model/uber_api_yaml.scala | 22 +- .../model/wrong_field_name_yaml.scala | 1 - .../full_petstore_api_yaml.extractor.scala | 2 +- .../security/full_petstore_api_yaml.scala | 2 +- .../split_petstore_api_yaml.extractor.scala | 2 +- .../security/split_petstore_api_yaml.scala | 2 +- .../additional_properties_yaml.scala | 4 +- .../test_data/basic_polymorphism_yaml.scala | 10 +- .../cross_spec_references_yaml.scala | 102 ++---- .../test_data/echo_api_yaml.scala | 8 +- .../test_data/enum_yaml.scala | 31 ++ .../test_data/error_in_array_yaml.scala | 78 ++-- .../expanded_polymorphism_yaml.scala | 20 +- .../test_data/foodpanda_yaml.scala | 51 +++ .../test_data/form_data_yaml.scala | 28 +- .../test_data/full_petstore_api_yaml.scala | 94 ++--- .../test_data/hackweek_yaml.scala | 78 ++-- .../test_data/heroku_petstore_api_yaml.scala | 16 +- .../test_data/instagram_api_yaml.scala | 292 ++++++--------- .../test_data/nakadi_yaml.scala | 56 ++- .../test_data/nested_arrays_yaml.scala | 30 +- .../test_data/nested_objects_yaml.scala | 42 +-- .../test_data/nested_options_yaml.scala | 18 +- .../test_data/options_yaml.scala | 12 +- .../test_data/security_api_yaml.scala | 12 +- .../test_data/simple_petstore_api_yaml.scala | 26 +- .../test_data/split_petstore_api_yaml.scala | 106 +++--- .../test_data/string_formats_yaml.scala | 20 +- .../test_data/type_deduplication_yaml.scala | 90 +++-- .../test_data/uber_api_yaml.scala | 78 ++-- .../test_data/wrong_field_name_yaml.scala | 4 +- .../tests/basic_polymorphism_yaml.scala | 8 +- .../tests/echo_api_yaml.scala | 12 +- .../expected_results/tests/enum_yaml.scala | 169 +++++++++ .../tests/expanded_polymorphism_yaml.scala | 12 +- .../tests/foodpanda_yaml.scala | 176 +++++++++ .../tests/form_data_yaml.scala | 34 +- .../tests/full_petstore_api_yaml.scala | 54 +-- .../tests/heroku_petstore_api_yaml.scala | 8 +- .../expected_results/tests/nakadi_yaml.scala | 56 +-- .../tests/nested_arrays_validation_yaml.scala | 8 +- .../tests/numbers_validation_yaml.scala | 20 +- .../tests/simple_petstore_api_yaml.scala | 12 +- .../tests/split_petstore_api_yaml.scala | 54 +-- .../string_formats_validation_yaml.scala | 30 +- .../tests/string_formats_yaml.scala | 24 +- .../tests/type_deduplication_yaml.scala | 72 ++-- .../tests/uber_api_yaml.scala | 26 +- .../tests/wrong_field_name_yaml.scala | 8 +- .../validation/basic_polymorphism_yaml.scala | 4 +- .../cross_spec_references_yaml.scala | 149 +++++--- .../validation/echo_api_yaml.scala | 4 +- .../validation/enum_yaml.scala | 36 ++ .../validation/error_in_array_yaml.scala | 133 ++++--- .../expanded_polymorphism_yaml.scala | 14 +- .../validation/foodpanda_yaml.scala | 59 +++ .../validation/form_data_yaml.scala | 12 +- .../validation/full_petstore_api_yaml.scala | 276 ++++++++++---- .../validation/hackweek_yaml.scala | 133 ++++--- .../validation/heroku_petstore_api_yaml.scala | 8 +- .../validation/instagram_api_yaml.scala | 124 +++---- .../validation/nakadi_yaml.scala | 76 +++- .../nested_arrays_validation_yaml.scala | 90 ++--- .../nested_objects_validation_yaml.scala | 20 +- .../nested_options_validation_yaml.scala | 8 +- .../validation/numbers_validation_yaml.scala | 10 +- .../validation/security_api_yaml.scala | 8 +- .../validation/simple_petstore_api_yaml.scala | 32 +- .../validation/split_petstore_api_yaml.scala | 294 +++++++++++---- .../string_formats_validation_yaml.scala | 16 +- .../validation/string_formats_yaml.scala | 14 +- .../validation/type_deduplication_yaml.scala | 218 +++++++++-- .../validation/uber_api_yaml.scala | 34 +- .../validation/wrong_field_name_yaml.scala | 4 +- .../scala/de/zalando/ExpectedResults.scala | 2 + .../generators/ScalaGeneratorsTest.scala | 62 ++-- .../generators/ScalaModelGeneratorTest.scala | 27 +- ...alaPlayTestsGeneratorIntegrationTest.scala | 4 +- ...calaTestDataGeneratorIntegrationTest.scala | 4 +- ...resources.additional_properties_yaml.scala | 4 +- .../resources.basic_polymorphism_yaml.scala | 6 +- ...resources.cross_spec_references_yaml.scala | 136 +++---- .../scala/model/resources.echo_api_yaml.scala | 4 +- .../scala/model/resources.enum_yaml.scala | 70 ++++ .../model/resources.error_in_array_yaml.scala | 94 ++--- ...resources.expanded_polymorphism_yaml.scala | 8 +- .../model/resources.foodpanda_yaml.scala | 92 +++++ .../model/resources.form_data_yaml.scala | 20 +- .../resources.full_petstore_api_yaml.scala | 74 ++-- .../scala/model/resources.hackweek_yaml.scala | 94 ++--- .../resources.heroku_petstore_api_yaml.scala | 8 +- .../model/resources.instagram_api_yaml.scala | 344 ++++++++---------- .../scala/model/resources.nakadi_yaml.scala | 34 +- ...ources.nested_arrays_validation_yaml.scala | 26 +- .../model/resources.nested_arrays_yaml.scala | 26 +- ...urces.nested_objects_validation_yaml.scala | 30 +- .../model/resources.nested_objects_yaml.scala | 30 +- ...urces.nested_options_validation_yaml.scala | 10 +- .../model/resources.nested_options_yaml.scala | 12 +- .../scala/model/resources.options_yaml.scala | 10 +- .../model/resources.security_api_yaml.scala | 4 +- .../resources.simple_petstore_api_yaml.scala | 14 +- .../resources.split_petstore_api_yaml.scala | 110 +++--- .../resources.type_deduplication_yaml.scala | 58 ++- .../scala/model/resources.uber_api_yaml.scala | 70 ++-- project/Dependencies.scala | 4 +- .../src/test/resources/examples/enum.yaml | 21 ++ .../test/resources/examples/foodpanda.yaml | 96 +++++ .../de/zalando/swagger/ModelDumper.scala | 2 +- 212 files changed, 4860 insertions(+), 3409 deletions(-) create mode 100644 api-first-core/src/test/scala/de/zalando/apifirst/TypeAnalyzerTest.scala create mode 100644 api-first-core/src/test/scala/model/resources.enum_yaml.scala create mode 100644 api-first-core/src/test/scala/model/resources.foodpanda_yaml.scala create mode 100644 play-scala-generator/src/test/resources/expected_results/base_controllers/enum_yaml.base.scala create mode 100644 play-scala-generator/src/test/resources/expected_results/base_controllers/foodpanda_yaml.base.scala create mode 100644 play-scala-generator/src/test/resources/expected_results/controllers/enum_yaml.scala create mode 100644 play-scala-generator/src/test/resources/expected_results/controllers/foodpanda_yaml.scala create mode 100644 play-scala-generator/src/test/resources/expected_results/marshallers/foodpanda_yaml.scala create mode 100644 play-scala-generator/src/test/resources/expected_results/model/enum_yaml.scala create mode 100644 play-scala-generator/src/test/resources/expected_results/model/foodpanda_yaml.scala create mode 100644 play-scala-generator/src/test/resources/expected_results/test_data/enum_yaml.scala create mode 100644 play-scala-generator/src/test/resources/expected_results/test_data/foodpanda_yaml.scala create mode 100644 play-scala-generator/src/test/resources/expected_results/tests/enum_yaml.scala create mode 100644 play-scala-generator/src/test/resources/expected_results/tests/foodpanda_yaml.scala create mode 100644 play-scala-generator/src/test/resources/expected_results/validation/enum_yaml.scala create mode 100644 play-scala-generator/src/test/resources/expected_results/validation/foodpanda_yaml.scala create mode 100644 play-scala-generator/src/test/scala/model/resources.enum_yaml.scala create mode 100644 play-scala-generator/src/test/scala/model/resources.foodpanda_yaml.scala create mode 100644 swagger-parser/src/test/resources/examples/enum.yaml create mode 100644 swagger-parser/src/test/resources/examples/foodpanda.yaml 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 =>