From 9694eb6d293f680bb07cbd43d608541a5c2dffdc Mon Sep 17 00:00:00 2001
From: Hui Yu <ityuhui@gmail.com>
Date: Mon, 1 Nov 2021 14:01:36 +0800
Subject: [PATCH 1/4] Does not recognize the type "ByteArray" as "String"

---
 .../openapitools/codegen/IJsonSchemaValidationProperties.java   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/IJsonSchemaValidationProperties.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/IJsonSchemaValidationProperties.java
index eb95821d6f3..9e9372b811f 100644
--- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/IJsonSchemaValidationProperties.java
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/IJsonSchemaValidationProperties.java
@@ -170,7 +170,7 @@ public interface IJsonSchemaValidationProperties {
         } else if (ModelUtils.isStringSchema(p)) {
             setIsString(true);
             if (ModelUtils.isByteArraySchema(p)) {
-                ;
+                setIsString(false);
             } else if (ModelUtils.isBinarySchema(p)) {
                 // openapi v3 way of representing binary + file data
                 // for backward compatibility with 2.x file type
-- 
GitLab


From 808d4eb42c58b78b59dd38f65eea1e50c4c17fd0 Mon Sep 17 00:00:00 2001
From: Hui Yu <ityuhui@gmail.com>
Date: Mon, 1 Nov 2021 14:43:55 +0800
Subject: [PATCH 2/4] Change in default codegen

---
 .../src/main/java/org/openapitools/codegen/DefaultCodegen.java | 3 +++
 .../openapitools/codegen/IJsonSchemaValidationProperties.java  | 2 +-
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java
index 2c530aeaffe..dc67303aa9b 100644
--- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java
@@ -3336,6 +3336,7 @@ public class DefaultCodegen implements CodegenConfig {
 
     protected void updatePropertyForString(CodegenProperty property, Schema p) {
         if (ModelUtils.isByteArraySchema(p)) {
+            property.setIsString(false);
             property.isByteArray = true;
         } else if (ModelUtils.isBinarySchema(p)) {
             property.isBinary = true;
@@ -4277,6 +4278,7 @@ public class DefaultCodegen implements CodegenConfig {
             } else if (ModelUtils.isUUIDSchema(responseSchema)) {
                 r.isUuid = true;
             } else if (ModelUtils.isByteArraySchema(responseSchema)) {
+                r.setIsString(false);
                 r.isByteArray = true;
             } else if (ModelUtils.isBinarySchema(responseSchema)) {
                 r.isFile = true; // file = binary in OAS3
@@ -6529,6 +6531,7 @@ public class DefaultCodegen implements CodegenConfig {
     protected void updateRequestBodyForString(CodegenParameter codegenParameter, Schema schema, Set<String> imports, String bodyParameterName) {
         updateRequestBodyForPrimitiveType(codegenParameter, schema, bodyParameterName, imports);
         if (ModelUtils.isByteArraySchema(schema)) {
+            codegenParameter.setIsString(false);
             codegenParameter.isByteArray = true;
         } else if (ModelUtils.isBinarySchema(schema)) {
             codegenParameter.isBinary = true;
diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/IJsonSchemaValidationProperties.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/IJsonSchemaValidationProperties.java
index 9e9372b811f..eb95821d6f3 100644
--- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/IJsonSchemaValidationProperties.java
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/IJsonSchemaValidationProperties.java
@@ -170,7 +170,7 @@ public interface IJsonSchemaValidationProperties {
         } else if (ModelUtils.isStringSchema(p)) {
             setIsString(true);
             if (ModelUtils.isByteArraySchema(p)) {
-                setIsString(false);
+                ;
             } else if (ModelUtils.isBinarySchema(p)) {
                 // openapi v3 way of representing binary + file data
                 // for backward compatibility with 2.x file type
-- 
GitLab


From 3111c21ab5d61ecbc46d8ebcbd7532ba53fcc94c Mon Sep 17 00:00:00 2001
From: Justin Black <justin.a.black@gmail.com>
Date: Mon, 1 Nov 2021 09:24:36 -0700
Subject: [PATCH 3/4] Removes redundant updateRequestBodyForString

---
 .../codegen/languages/RustServerCodegen.java  | 32 -------------------
 1 file changed, 32 deletions(-)

diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RustServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RustServerCodegen.java
index cc8db68a316..a522c48d60a 100644
--- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RustServerCodegen.java
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RustServerCodegen.java
@@ -1686,38 +1686,6 @@ public class RustServerCodegen extends DefaultCodegen implements CodegenConfig {
         }
     }
 
-    @Override
-    protected void updateRequestBodyForString(CodegenParameter codegenParameter, Schema schema, Set<String> imports, String bodyParameterName) {
-        /**
-         * we have a custom version of this function to set isString to false for isByteArray
-         */
-        updateRequestBodyForPrimitiveType(codegenParameter, schema, bodyParameterName, imports);
-        if (ModelUtils.isByteArraySchema(schema)) {
-            codegenParameter.isByteArray = true;
-            // custom code
-            codegenParameter.setIsString(false);
-        } else if (ModelUtils.isBinarySchema(schema)) {
-            codegenParameter.isBinary = true;
-            codegenParameter.isFile = true; // file = binary in OAS3
-        } else if (ModelUtils.isUUIDSchema(schema)) {
-            codegenParameter.isUuid = true;
-        } else if (ModelUtils.isURISchema(schema)) {
-            codegenParameter.isUri = true;
-        } else if (ModelUtils.isEmailSchema(schema)) {
-            codegenParameter.isEmail = true;
-        } else if (ModelUtils.isDateSchema(schema)) { // date format
-            codegenParameter.setIsString(false); // for backward compatibility with 2.x
-            codegenParameter.isDate = true;
-        } else if (ModelUtils.isDateTimeSchema(schema)) { // date-time format
-            codegenParameter.setIsString(false); // for backward compatibility with 2.x
-            codegenParameter.isDateTime = true;
-        } else if (ModelUtils.isDecimalSchema(schema)) { // type: string, format: number
-            codegenParameter.isDecimal = true;
-            codegenParameter.setIsString(false);
-        }
-        codegenParameter.pattern = toRegularExpression(schema.getPattern());
-    }
-
     @Override
     protected void updateParameterForString(CodegenParameter codegenParameter, Schema parameterSchema){
         /**
-- 
GitLab


From 6637e3731ea43ca4d6f5df9e4e0ba0bc13c0d651 Mon Sep 17 00:00:00 2001
From: Justin Black <justin.a.black@gmail.com>
Date: Mon, 1 Nov 2021 09:53:24 -0700
Subject: [PATCH 4/4] Adds testByteArrayTypeInSchemas

---
 .../codegen/DefaultCodegenTest.java           | 25 ++++++++++
 .../src/test/resources/3_0/issue_10725.yaml   | 46 +++++++++++++++++++
 2 files changed, 71 insertions(+)
 create mode 100644 modules/openapi-generator/src/test/resources/3_0/issue_10725.yaml

diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java
index 83917da4eba..f1e0cd6b9b6 100644
--- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java
+++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java
@@ -3846,4 +3846,29 @@ public class DefaultCodegenTest {
         cp = co.queryParams.get(0);
         assertTrue(cp.getIsAnyType());
     }
+
+    @Test
+    public void testByteArrayTypeInSchemas() {
+        DefaultCodegen codegen = new DefaultCodegen();
+        final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/issue_10725.yaml");
+        codegen.setOpenAPI(openAPI);
+        String path;
+        CodegenOperation co;
+        CodegenParameter cp;
+
+        path = "/TxRxByteArray";
+        co = codegen.fromOperation(path, "POST", openAPI.getPaths().get(path).getPost(), null);
+        cp = co.bodyParam;
+        assertTrue(cp.isByteArray);
+        assertFalse(cp.getIsString());
+        CodegenResponse cr = co.responses.get(0);
+        assertTrue(cr.isByteArray);
+        assertFalse(cr.getIsString());
+
+        String modelName = "ObjectContainingByteArray";
+        CodegenModel m = codegen.fromModel(modelName, openAPI.getComponents().getSchemas().get(modelName));
+        CodegenProperty pr = m.vars.get(0);
+        assertTrue(pr.isByteArray);
+        assertFalse(pr.getIsString());
+    }
 }
diff --git a/modules/openapi-generator/src/test/resources/3_0/issue_10725.yaml b/modules/openapi-generator/src/test/resources/3_0/issue_10725.yaml
new file mode 100644
index 00000000000..780965111f9
--- /dev/null
+++ b/modules/openapi-generator/src/test/resources/3_0/issue_10725.yaml
@@ -0,0 +1,46 @@
+openapi: 3.0.1
+info:
+  title: OpenAPI Petstore
+  description: "byteArray schema isX type checks"
+  license:
+    name: Apache-2.0
+    url: https://www.apache.org/licenses/LICENSE-2.0.html
+  version: 1.0.0
+servers:
+  - url: http://petstore.swagger.io:80/v2
+tags: []
+paths:
+  /TxRxByteArray:
+    post:
+      requestBody:
+        required: true
+        content:
+          application/json:
+            schema:
+              type: string
+              format: byte
+      responses:
+        '200':
+          description: ComposedObject
+          content:
+            application/json:
+              schema:
+                type: string
+                format: byte
+  /RxRefObjectContainingByteArray:
+    get:
+      responses:
+        '200':
+          description: ComposedNumber
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ObjectContainingByteArray'
+components:
+  schemas:
+    ObjectContainingByteArray:
+      type: object
+      properties:
+        byteArray:
+          type: string
+          format: byte
-- 
GitLab