From 6d6284fc7d903caf6a6128634559badcdb1cf5d1 Mon Sep 17 00:00:00 2001 From: Tom Schindl Date: Thu, 25 Jun 2026 19:08:24 +0200 Subject: [PATCH 1/3] 70 - support different errors on same status code --- .../dev/rsdlang/sample/client/RSDError.java | 7 +- .../rsdlang/sample/client/SampleError.java | 2 +- .../rsdlang/sample/client/SampleError2.java | 2 +- .../sample/client/SampleErrorScalarSub.java | 2 +- .../sample/client/SampleErrorWithValue.java | 2 +- .../sample/client/SampleServiceService.java | 2 + .../ScalarSubstition_ServiceService.java | 2 +- .../jdkhttp/impl/BinaryTypesServiceImpl.java | 44 +++- .../impl/ListSampleServiceServiceImpl.java | 27 ++- .../PathParameterTypeServiceServiceImpl.java | 15 ++ .../impl/SampleServiceServiceImpl.java | 220 +++++++++++++----- .../ScalarSubstition_ServiceServiceImpl.java | 18 +- .../client/SampleServiceServiceTest.java | 28 +++ .../server/rest/SampleServiceResource.java | 19 ++ .../SampleServiceResourceResponseBuilder.java | 4 + .../server/service/SampleServiceService.java | 5 + .../sample/MultiErrorSameCodeHandlerImpl.java | 29 +++ .../impl/SampleServiceServiceImpl.java | 19 +- .../cli/src/java-rest-client-jdk/service.ts | 16 +- .../src/SampleServiceService.ts | 1 + .../services/SampleServiceServiceFetchImpl.ts | 55 ++++- .../test-specs/gen-out/openapi/openapi.json | 36 +++ dsl/packages/cli/test/test-specs/sample.json | 69 ++++++ dsl/packages/cli/test/test-specs/sample.rrsd | 8 + dsl/packages/cli/test/test-specs/sample.rsd | 1 + 25 files changed, 545 insertions(+), 88 deletions(-) create mode 100644 dsl/java-test/java-quarkus/src/main/java/dev/rsdlang/sample/server/service/handler/sample/MultiErrorSameCodeHandlerImpl.java diff --git a/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/RSDError.java b/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/RSDError.java index fafdb3ef..ff4cf600 100644 --- a/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/RSDError.java +++ b/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/RSDError.java @@ -42,9 +42,12 @@ public sealed interface E7 permits $GenericError, SampleErrorScalar { public sealed interface E8 permits $GenericError, SampleErrorUnion { } - public sealed interface E9 permits $GenericError, SampleErrorScalarSub { + public sealed interface E9 permits $GenericError, SampleError, SampleError2, SampleErrorWithValue { } - public record $GenericError(Type type, String message, Throwable error) implements RSDError, E1, E2, E3, E4, E5, E6, E7, E8, E9 { + public sealed interface E10 permits $GenericError, SampleErrorScalarSub { + } + + public record $GenericError(Type type, String message, Throwable error) implements RSDError, E1, E2, E3, E4, E5, E6, E7, E8, E9, E10 { } } diff --git a/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/SampleError.java b/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/SampleError.java index dd734c91..e0c2e152 100644 --- a/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/SampleError.java +++ b/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/SampleError.java @@ -1,7 +1,7 @@ // Generated by RSD - Do not modify package dev.rsdlang.sample.client; -public record SampleError(String message) implements RSDError, RSDError.E1, RSDError.E2 { +public record SampleError(String message) implements RSDError, RSDError.E1, RSDError.E2, RSDError.E9 { @Override public Type type() { return Type.SampleError; diff --git a/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/SampleError2.java b/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/SampleError2.java index dc091fba..b37d8087 100644 --- a/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/SampleError2.java +++ b/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/SampleError2.java @@ -1,7 +1,7 @@ // Generated by RSD - Do not modify package dev.rsdlang.sample.client; -public record SampleError2(String message) implements RSDError, RSDError.E2 { +public record SampleError2(String message) implements RSDError, RSDError.E2, RSDError.E9 { @Override public Type type() { return Type.SampleError2; diff --git a/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/SampleErrorScalarSub.java b/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/SampleErrorScalarSub.java index 0009cfdb..742f4c01 100644 --- a/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/SampleErrorScalarSub.java +++ b/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/SampleErrorScalarSub.java @@ -1,7 +1,7 @@ // Generated by RSD - Do not modify package dev.rsdlang.sample.client; -public record SampleErrorScalarSub(String message, MyRange data) implements RSDError, RSDError.E9 { +public record SampleErrorScalarSub(String message, MyRange data) implements RSDError, RSDError.E10 { @Override public Type type() { return Type.SampleErrorScalarSub; diff --git a/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/SampleErrorWithValue.java b/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/SampleErrorWithValue.java index e59b5533..5bfa61b0 100644 --- a/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/SampleErrorWithValue.java +++ b/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/SampleErrorWithValue.java @@ -3,7 +3,7 @@ import dev.rsdlang.sample.client.model.ErrorData; -public record SampleErrorWithValue(String message, ErrorData.Data data) implements RSDError, RSDError.E3 { +public record SampleErrorWithValue(String message, ErrorData.Data data) implements RSDError, RSDError.E3, RSDError.E9 { @Override public Type type() { return Type.SampleErrorWithValue; diff --git a/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/SampleServiceService.java b/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/SampleServiceService.java index 847e5bc9..8b358b3c 100644 --- a/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/SampleServiceService.java +++ b/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/SampleServiceService.java @@ -62,4 +62,6 @@ public interface SampleServiceService extends BaseService { public Result getSimpleErrorUnion(); + public Result multiErrorSameCode(int errorType); + } diff --git a/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/ScalarSubstition_ServiceService.java b/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/ScalarSubstition_ServiceService.java index 37d77123..45472ec5 100644 --- a/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/ScalarSubstition_ServiceService.java +++ b/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/ScalarSubstition_ServiceService.java @@ -82,6 +82,6 @@ public interface ScalarSubstition_ServiceService extends BaseService { public Result headerListOptNull(List range); - public Result fail(); + public Result fail(); } diff --git a/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/jdkhttp/impl/BinaryTypesServiceImpl.java b/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/jdkhttp/impl/BinaryTypesServiceImpl.java index 7024e7fe..0c855847 100644 --- a/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/jdkhttp/impl/BinaryTypesServiceImpl.java +++ b/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/jdkhttp/impl/BinaryTypesServiceImpl.java @@ -83,6 +83,7 @@ private String contentType() { this.lifecycleHook.onSuccess("uploadFile", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("uploadFile", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -124,6 +125,7 @@ private String contentType() { this.lifecycleHook.onSuccess("uploadFileOpt", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("uploadFileOpt", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -168,6 +170,7 @@ private String contentType() { this.lifecycleHook.onSuccess("uploadFileOpt", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("uploadFileOpt", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -212,6 +215,7 @@ private String contentType() { this.lifecycleHook.onSuccess("uploadFileNil", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("uploadFileNil", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -253,6 +257,7 @@ private String contentType() { this.lifecycleHook.onSuccess("uploadFileOptNil", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("uploadFileOptNil", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -300,6 +305,7 @@ private String contentType() { this.lifecycleHook.onSuccess("uploadFileOptNil", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("uploadFileOptNil", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -344,6 +350,7 @@ private String contentType() { this.lifecycleHook.onSuccess("uploadBlob", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("uploadBlob", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -385,6 +392,7 @@ private String contentType() { this.lifecycleHook.onSuccess("uploadBlobOpt", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("uploadBlobOpt", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -429,6 +437,7 @@ private String contentType() { this.lifecycleHook.onSuccess("uploadBlobOpt", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("uploadBlobOpt", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -473,6 +482,7 @@ private String contentType() { this.lifecycleHook.onSuccess("uploadBlobNil", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("uploadBlobNil", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -514,6 +524,7 @@ private String contentType() { this.lifecycleHook.onSuccess("uploadBlobOptNil", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("uploadBlobOptNil", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -561,6 +572,7 @@ private String contentType() { this.lifecycleHook.onSuccess("uploadBlobOptNil", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("uploadBlobOptNil", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -2479,13 +2491,17 @@ public Result downloadFile() { var $rv = JDKHttpClientResponseUtils.mapFile($response); this.lifecycleHook.onSuccess("downloadFile", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); - } else if ($response.statusCode() == 400) { - var $errorData = JDKHttpClientResponseUtils.mapObject($response, ErrorDataDataImpl::of, ErrorData.Data.class); - var $message = $response.headers().firstValue("X-RSD-Error-Message").orElse("Invocation of downloadFile failed"); - var $error = new SampleErrorWithValue($message, $errorData); - this.lifecycleHook.onError("downloadFile", $error, this.client.createResponseAdaptable($response)); - return Result.err($error); } + if ($response.statusCode() == 400) { + if ($response.headers().firstValue("X-RSD-Error-Type").orElse("").equals("SampleErrorWithValue")) { + var $errorData = JDKHttpClientResponseUtils.mapObject($response, ErrorDataDataImpl::of, ErrorData.Data.class); + var $message = $response.headers().firstValue("X-RSD-Error-Message").orElse("Invocation of downloadFile failed"); + var $error = new SampleErrorWithValue($message, $errorData); + this.lifecycleHook.onError("downloadFile", $error, this.client.createResponseAdaptable($response)); + return Result.err($error); + } + } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("downloadFile", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -2520,13 +2536,17 @@ public Result downloadBlob() { var $rv = JDKHttpClientResponseUtils.mapBlob($response); this.lifecycleHook.onSuccess("downloadBlob", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); - } else if ($response.statusCode() == 400) { - var $errorData = JDKHttpClientResponseUtils.mapObject($response, ErrorDataDataImpl::of, ErrorData.Data.class); - var $message = $response.headers().firstValue("X-RSD-Error-Message").orElse("Invocation of downloadBlob failed"); - var $error = new SampleErrorWithValue($message, $errorData); - this.lifecycleHook.onError("downloadBlob", $error, this.client.createResponseAdaptable($response)); - return Result.err($error); } + if ($response.statusCode() == 400) { + if ($response.headers().firstValue("X-RSD-Error-Type").orElse("").equals("SampleErrorWithValue")) { + var $errorData = JDKHttpClientResponseUtils.mapObject($response, ErrorDataDataImpl::of, ErrorData.Data.class); + var $message = $response.headers().firstValue("X-RSD-Error-Message").orElse("Invocation of downloadBlob failed"); + var $error = new SampleErrorWithValue($message, $errorData); + this.lifecycleHook.onError("downloadBlob", $error, this.client.createResponseAdaptable($response)); + return Result.err($error); + } + } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("downloadBlob", $error, this.client.createResponseAdaptable($response)); return Result.err($error); diff --git a/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/jdkhttp/impl/ListSampleServiceServiceImpl.java b/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/jdkhttp/impl/ListSampleServiceServiceImpl.java index b9284749..4eae1600 100644 --- a/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/jdkhttp/impl/ListSampleServiceServiceImpl.java +++ b/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/jdkhttp/impl/ListSampleServiceServiceImpl.java @@ -63,6 +63,7 @@ private String contentType() { this.lifecycleHook.onSuccess("listBoolean", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("listBoolean", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -98,6 +99,7 @@ private String contentType() { this.lifecycleHook.onSuccess("listShort", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("listShort", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -133,6 +135,7 @@ private String contentType() { this.lifecycleHook.onSuccess("listInt", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("listInt", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -168,6 +171,7 @@ private String contentType() { this.lifecycleHook.onSuccess("listLong", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("listLong", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -203,6 +207,7 @@ private String contentType() { this.lifecycleHook.onSuccess("listFloat", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("listFloat", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -238,6 +243,7 @@ private String contentType() { this.lifecycleHook.onSuccess("listDouble", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("listDouble", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -273,6 +279,7 @@ private String contentType() { this.lifecycleHook.onSuccess("listString", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("listString", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -308,6 +315,7 @@ private String contentType() { this.lifecycleHook.onSuccess("listLocalDate", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("listLocalDate", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -343,6 +351,7 @@ private String contentType() { this.lifecycleHook.onSuccess("listLocalDateTime", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("listLocalDateTime", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -378,6 +387,7 @@ private String contentType() { this.lifecycleHook.onSuccess("listLocalTime", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("listLocalTime", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -413,6 +423,7 @@ private String contentType() { this.lifecycleHook.onSuccess("listOffsetDateTime", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("listOffsetDateTime", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -448,6 +459,7 @@ private String contentType() { this.lifecycleHook.onSuccess("listZonedDateTime", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("listZonedDateTime", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -483,6 +495,7 @@ private String contentType() { this.lifecycleHook.onSuccess("listScalar", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("listScalar", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -518,6 +531,7 @@ private String contentType() { this.lifecycleHook.onSuccess("listEnum", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("listEnum", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -553,6 +567,7 @@ private String contentType() { this.lifecycleHook.onSuccess("listSimpleRecord", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("listSimpleRecord", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -587,11 +602,15 @@ public Result, RSDError.E1> listSimpleRecordWithError() var $rv = JDKHttpClientResponseUtils.mapObjects($response, SimpleRecordDataImpl::of, SimpleRecord.Data.class); this.lifecycleHook.onSuccess("listSimpleRecordWithError", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); - } else if ($response.statusCode() == 400) { - var $error = new SampleError(JDKHttpClientResponseUtils.toString($response)); - this.lifecycleHook.onError("listSimpleRecordWithError", $error, this.client.createResponseAdaptable($response)); - return Result.err($error); } + if ($response.statusCode() == 400) { + if ($response.headers().firstValue("X-RSD-Error-Type").orElse("").equals("SampleError")) { + var $error = new SampleError(JDKHttpClientResponseUtils.toString($response)); + this.lifecycleHook.onError("listSimpleRecordWithError", $error, this.client.createResponseAdaptable($response)); + return Result.err($error); + } + } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("listSimpleRecordWithError", $error, this.client.createResponseAdaptable($response)); return Result.err($error); diff --git a/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/jdkhttp/impl/PathParameterTypeServiceServiceImpl.java b/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/jdkhttp/impl/PathParameterTypeServiceServiceImpl.java index 08195a83..0da483e5 100644 --- a/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/jdkhttp/impl/PathParameterTypeServiceServiceImpl.java +++ b/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/jdkhttp/impl/PathParameterTypeServiceServiceImpl.java @@ -61,6 +61,7 @@ private String contentType() { this.lifecycleHook.onSuccess("simpleBooleanPathParam", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("simpleBooleanPathParam", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -97,6 +98,7 @@ private String contentType() { this.lifecycleHook.onSuccess("simpleShortPathParam", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("simpleShortPathParam", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -133,6 +135,7 @@ private String contentType() { this.lifecycleHook.onSuccess("simpleIntPathParam", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("simpleIntPathParam", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -169,6 +172,7 @@ private String contentType() { this.lifecycleHook.onSuccess("simpleLongPathParam", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("simpleLongPathParam", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -205,6 +209,7 @@ private String contentType() { this.lifecycleHook.onSuccess("simpleFloatPathParam", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("simpleFloatPathParam", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -241,6 +246,7 @@ private String contentType() { this.lifecycleHook.onSuccess("simpleDoublePathParam", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("simpleDoublePathParam", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -279,6 +285,7 @@ private String contentType() { this.lifecycleHook.onSuccess("simpleStringPathParam", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("simpleStringPathParam", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -317,6 +324,7 @@ private String contentType() { this.lifecycleHook.onSuccess("simpleLocalDatePathParam", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("simpleLocalDatePathParam", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -355,6 +363,7 @@ private String contentType() { this.lifecycleHook.onSuccess("simpleLocalDateTimePathParam", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("simpleLocalDateTimePathParam", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -393,6 +402,7 @@ private String contentType() { this.lifecycleHook.onSuccess("simpleLocalTimePathParam", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("simpleLocalTimePathParam", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -431,6 +441,7 @@ private String contentType() { this.lifecycleHook.onSuccess("simpleOffsetDateTimePathParam", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("simpleOffsetDateTimePathParam", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -469,6 +480,7 @@ private String contentType() { this.lifecycleHook.onSuccess("simpleZonedDateTimePathParam", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("simpleZonedDateTimePathParam", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -507,6 +519,7 @@ private String contentType() { this.lifecycleHook.onSuccess("simpleScalarPathParam", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("simpleScalarPathParam", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -545,6 +558,7 @@ private String contentType() { this.lifecycleHook.onSuccess("simpleEnumPathParam", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("simpleEnumPathParam", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -584,6 +598,7 @@ private String contentType() { this.lifecycleHook.onSuccess("multiPathParam", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("multiPathParam", $error, this.client.createResponseAdaptable($response)); return Result.err($error); diff --git a/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/jdkhttp/impl/SampleServiceServiceImpl.java b/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/jdkhttp/impl/SampleServiceServiceImpl.java index 515d1734..10d5478f 100644 --- a/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/jdkhttp/impl/SampleServiceServiceImpl.java +++ b/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/jdkhttp/impl/SampleServiceServiceImpl.java @@ -74,6 +74,7 @@ private String contentType() { this.lifecycleHook.onSuccess("getBoolean", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("getBoolean", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -109,6 +110,7 @@ private String contentType() { this.lifecycleHook.onSuccess("getShort", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("getShort", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -144,6 +146,7 @@ private String contentType() { this.lifecycleHook.onSuccess("getInt", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("getInt", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -179,6 +182,7 @@ private String contentType() { this.lifecycleHook.onSuccess("getLong", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("getLong", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -214,6 +218,7 @@ private String contentType() { this.lifecycleHook.onSuccess("getFloat", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("getFloat", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -249,6 +254,7 @@ private String contentType() { this.lifecycleHook.onSuccess("getDouble", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("getDouble", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -284,6 +290,7 @@ private String contentType() { this.lifecycleHook.onSuccess("getString", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("getString", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -319,6 +326,7 @@ private String contentType() { this.lifecycleHook.onSuccess("getLocalDate", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("getLocalDate", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -354,6 +362,7 @@ private String contentType() { this.lifecycleHook.onSuccess("getLocalDateTime", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("getLocalDateTime", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -389,6 +398,7 @@ private String contentType() { this.lifecycleHook.onSuccess("getLocalTime", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("getLocalTime", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -424,6 +434,7 @@ private String contentType() { this.lifecycleHook.onSuccess("getOffsetDateTime", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("getOffsetDateTime", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -459,6 +470,7 @@ private String contentType() { this.lifecycleHook.onSuccess("getZonedDateTime", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("getZonedDateTime", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -494,6 +506,7 @@ private String contentType() { this.lifecycleHook.onSuccess("getScalar", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("getScalar", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -529,6 +542,7 @@ private String contentType() { this.lifecycleHook.onSuccess("getEnum", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("getEnum", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -563,6 +577,7 @@ private String contentType() { this.lifecycleHook.onSuccess("voidOperation", null, this.client.createResponseAdaptable($response)); return Result.ok(null); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("voidOperation", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -596,11 +611,15 @@ public Result errorOperation() { if ($response.statusCode() == 200) { this.lifecycleHook.onSuccess("errorOperation", null, this.client.createResponseAdaptable($response)); return Result.ok(null); - } else if ($response.statusCode() == 400) { - var $error = new SampleError(JDKHttpClientResponseUtils.toString($response)); - this.lifecycleHook.onError("errorOperation", $error, this.client.createResponseAdaptable($response)); - return Result.err($error); } + if ($response.statusCode() == 400) { + if ($response.headers().firstValue("X-RSD-Error-Type").orElse("").equals("SampleError")) { + var $error = new SampleError(JDKHttpClientResponseUtils.toString($response)); + this.lifecycleHook.onError("errorOperation", $error, this.client.createResponseAdaptable($response)); + return Result.err($error); + } + } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("errorOperation", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -634,15 +653,22 @@ public Result multiErrorOperation() { if ($response.statusCode() == 200) { this.lifecycleHook.onSuccess("multiErrorOperation", null, this.client.createResponseAdaptable($response)); return Result.ok(null); - } else if ($response.statusCode() == 400) { - var $error = new SampleError(JDKHttpClientResponseUtils.toString($response)); - this.lifecycleHook.onError("multiErrorOperation", $error, this.client.createResponseAdaptable($response)); - return Result.err($error); - } else if ($response.statusCode() == 401) { - var $error = new SampleError2(JDKHttpClientResponseUtils.toString($response)); - this.lifecycleHook.onError("multiErrorOperation", $error, this.client.createResponseAdaptable($response)); - return Result.err($error); } + if ($response.statusCode() == 400) { + if ($response.headers().firstValue("X-RSD-Error-Type").orElse("").equals("SampleError")) { + var $error = new SampleError(JDKHttpClientResponseUtils.toString($response)); + this.lifecycleHook.onError("multiErrorOperation", $error, this.client.createResponseAdaptable($response)); + return Result.err($error); + } + } + if ($response.statusCode() == 401) { + if ($response.headers().firstValue("X-RSD-Error-Type").orElse("").equals("SampleError2")) { + var $error = new SampleError2(JDKHttpClientResponseUtils.toString($response)); + this.lifecycleHook.onError("multiErrorOperation", $error, this.client.createResponseAdaptable($response)); + return Result.err($error); + } + } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("multiErrorOperation", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -681,6 +707,7 @@ public Result multiErrorOperation() { this.lifecycleHook.onSuccess("getSimpleRecord", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("getSimpleRecord", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -718,11 +745,15 @@ public Result getSimpleRecordWithError(String ke var $rv = JDKHttpClientResponseUtils.mapObject($response, SimpleRecordDataImpl::of, SimpleRecord.Data.class); this.lifecycleHook.onSuccess("getSimpleRecordWithError", $rv, this.client.createResponseAdaptable($response)); return Result.ok($rv); - } else if ($response.statusCode() == 400) { - var $error = new SampleError(JDKHttpClientResponseUtils.toString($response)); - this.lifecycleHook.onError("getSimpleRecordWithError", $error, this.client.createResponseAdaptable($response)); - return Result.err($error); } + if ($response.statusCode() == 400) { + if ($response.headers().firstValue("X-RSD-Error-Type").orElse("").equals("SampleError")) { + var $error = new SampleError(JDKHttpClientResponseUtils.toString($response)); + this.lifecycleHook.onError("getSimpleRecordWithError", $error, this.client.createResponseAdaptable($response)); + return Result.err($error); + } + } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("getSimpleRecordWithError", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -756,13 +787,17 @@ public Result getSimpleErrorWithValue() { if ($response.statusCode() == 204) { this.lifecycleHook.onSuccess("getSimpleErrorWithValue", null, this.client.createResponseAdaptable($response)); return Result.ok(null); - } else if ($response.statusCode() == 400) { - var $errorData = JDKHttpClientResponseUtils.mapObject($response, ErrorDataDataImpl::of, ErrorData.Data.class); - var $message = $response.headers().firstValue("X-RSD-Error-Message").orElse("Invocation of getSimpleErrorWithValue failed"); - var $error = new SampleErrorWithValue($message, $errorData); - this.lifecycleHook.onError("getSimpleErrorWithValue", $error, this.client.createResponseAdaptable($response)); - return Result.err($error); } + if ($response.statusCode() == 400) { + if ($response.headers().firstValue("X-RSD-Error-Type").orElse("").equals("SampleErrorWithValue")) { + var $errorData = JDKHttpClientResponseUtils.mapObject($response, ErrorDataDataImpl::of, ErrorData.Data.class); + var $message = $response.headers().firstValue("X-RSD-Error-Message").orElse("Invocation of getSimpleErrorWithValue failed"); + var $error = new SampleErrorWithValue($message, $errorData); + this.lifecycleHook.onError("getSimpleErrorWithValue", $error, this.client.createResponseAdaptable($response)); + return Result.err($error); + } + } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("getSimpleErrorWithValue", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -796,13 +831,17 @@ public Result getSimpleErrorInt() { if ($response.statusCode() == 204) { this.lifecycleHook.onSuccess("getSimpleErrorInt", null, this.client.createResponseAdaptable($response)); return Result.ok(null); - } else if ($response.statusCode() == 400) { - var $errorData = JDKHttpClientResponseUtils.mapInt($response); - var $message = $response.headers().firstValue("X-RSD-Error-Message").orElse("Invocation of getSimpleErrorInt failed"); - var $error = new SampleErrorInt($message, $errorData); - this.lifecycleHook.onError("getSimpleErrorInt", $error, this.client.createResponseAdaptable($response)); - return Result.err($error); } + if ($response.statusCode() == 400) { + if ($response.headers().firstValue("X-RSD-Error-Type").orElse("").equals("SampleErrorInt")) { + var $errorData = JDKHttpClientResponseUtils.mapInt($response); + var $message = $response.headers().firstValue("X-RSD-Error-Message").orElse("Invocation of getSimpleErrorInt failed"); + var $error = new SampleErrorInt($message, $errorData); + this.lifecycleHook.onError("getSimpleErrorInt", $error, this.client.createResponseAdaptable($response)); + return Result.err($error); + } + } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("getSimpleErrorInt", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -836,13 +875,17 @@ public Result getSimpleErrorBoolean() { if ($response.statusCode() == 204) { this.lifecycleHook.onSuccess("getSimpleErrorBoolean", null, this.client.createResponseAdaptable($response)); return Result.ok(null); - } else if ($response.statusCode() == 400) { - var $errorData = JDKHttpClientResponseUtils.mapBoolean($response); - var $message = $response.headers().firstValue("X-RSD-Error-Message").orElse("Invocation of getSimpleErrorBoolean failed"); - var $error = new SampleErrorBoolean($message, $errorData); - this.lifecycleHook.onError("getSimpleErrorBoolean", $error, this.client.createResponseAdaptable($response)); - return Result.err($error); } + if ($response.statusCode() == 400) { + if ($response.headers().firstValue("X-RSD-Error-Type").orElse("").equals("SampleErrorBoolean")) { + var $errorData = JDKHttpClientResponseUtils.mapBoolean($response); + var $message = $response.headers().firstValue("X-RSD-Error-Message").orElse("Invocation of getSimpleErrorBoolean failed"); + var $error = new SampleErrorBoolean($message, $errorData); + this.lifecycleHook.onError("getSimpleErrorBoolean", $error, this.client.createResponseAdaptable($response)); + return Result.err($error); + } + } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("getSimpleErrorBoolean", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -876,13 +919,17 @@ public Result getSimpleErrorEnum() { if ($response.statusCode() == 204) { this.lifecycleHook.onSuccess("getSimpleErrorEnum", null, this.client.createResponseAdaptable($response)); return Result.ok(null); - } else if ($response.statusCode() == 400) { - var $errorData = JDKHttpClientResponseUtils.mapLiteral($response, SampleEnum::valueOf); - var $message = $response.headers().firstValue("X-RSD-Error-Message").orElse("Invocation of getSimpleErrorEnum failed"); - var $error = new SampleErrorEnum($message, $errorData); - this.lifecycleHook.onError("getSimpleErrorEnum", $error, this.client.createResponseAdaptable($response)); - return Result.err($error); } + if ($response.statusCode() == 400) { + if ($response.headers().firstValue("X-RSD-Error-Type").orElse("").equals("SampleErrorEnum")) { + var $errorData = JDKHttpClientResponseUtils.mapLiteral($response, SampleEnum::valueOf); + var $message = $response.headers().firstValue("X-RSD-Error-Message").orElse("Invocation of getSimpleErrorEnum failed"); + var $error = new SampleErrorEnum($message, $errorData); + this.lifecycleHook.onError("getSimpleErrorEnum", $error, this.client.createResponseAdaptable($response)); + return Result.err($error); + } + } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("getSimpleErrorEnum", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -916,13 +963,17 @@ public Result getSimpleErrorScalar() { if ($response.statusCode() == 204) { this.lifecycleHook.onSuccess("getSimpleErrorScalar", null, this.client.createResponseAdaptable($response)); return Result.ok(null); - } else if ($response.statusCode() == 400) { - var $errorData = JDKHttpClientResponseUtils.mapLiteral($response, ZoneId::of); - var $message = $response.headers().firstValue("X-RSD-Error-Message").orElse("Invocation of getSimpleErrorScalar failed"); - var $error = new SampleErrorScalar($message, $errorData); - this.lifecycleHook.onError("getSimpleErrorScalar", $error, this.client.createResponseAdaptable($response)); - return Result.err($error); } + if ($response.statusCode() == 400) { + if ($response.headers().firstValue("X-RSD-Error-Type").orElse("").equals("SampleErrorScalar")) { + var $errorData = JDKHttpClientResponseUtils.mapLiteral($response, ZoneId::of); + var $message = $response.headers().firstValue("X-RSD-Error-Message").orElse("Invocation of getSimpleErrorScalar failed"); + var $error = new SampleErrorScalar($message, $errorData); + this.lifecycleHook.onError("getSimpleErrorScalar", $error, this.client.createResponseAdaptable($response)); + return Result.err($error); + } + } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("getSimpleErrorScalar", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -956,13 +1007,17 @@ public Result getSimpleErrorUnion() { if ($response.statusCode() == 204) { this.lifecycleHook.onSuccess("getSimpleErrorUnion", null, this.client.createResponseAdaptable($response)); return Result.ok(null); - } else if ($response.statusCode() == 400) { - var $errorData = JDKHttpClientResponseUtils.mapObject($response, UnionDataImpl::of, Union.Data.class); - var $message = $response.headers().firstValue("X-RSD-Error-Message").orElse("Invocation of getSimpleErrorUnion failed"); - var $error = new SampleErrorUnion($message, $errorData); - this.lifecycleHook.onError("getSimpleErrorUnion", $error, this.client.createResponseAdaptable($response)); - return Result.err($error); } + if ($response.statusCode() == 400) { + if ($response.headers().firstValue("X-RSD-Error-Type").orElse("").equals("SampleErrorUnion")) { + var $errorData = JDKHttpClientResponseUtils.mapObject($response, UnionDataImpl::of, Union.Data.class); + var $message = $response.headers().firstValue("X-RSD-Error-Message").orElse("Invocation of getSimpleErrorUnion failed"); + var $error = new SampleErrorUnion($message, $errorData); + this.lifecycleHook.onError("getSimpleErrorUnion", $error, this.client.createResponseAdaptable($response)); + return Result.err($error); + } + } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("getSimpleErrorUnion", $error, this.client.createResponseAdaptable($response)); return Result.err($error); @@ -978,4 +1033,65 @@ public Result getSimpleErrorUnion() { this.lifecycleHook.onFinally("getSimpleErrorUnion"); } } + + public Result multiErrorSameCode(int errorType) { + var $path = "%s/api/samplerecords/multi-error".formatted( + this.baseURI()); + + var $queryParams = new BaseUtils.URLSearchParams(); + $queryParams.append("errorType", errorType); + + var $uri = URI.create($path + $queryParams.toQueryString()); + try(var $clientSupplier = this.client.httpClientSupplier()) { + var $requestBuilder = HttpRequest.newBuilder() + .uri($uri) + .header("Accept", this.contentType()) + .GET(); + this.lifecycleHook.preRequest("multiErrorSameCode", client.createRequestBuilderAdaptable($requestBuilder)); + var $request = $requestBuilder.build(); + + var $response = $clientSupplier.get().send($request, BodyHandlers.ofInputStream()); + if ($response.statusCode() == 204) { + this.lifecycleHook.onSuccess("multiErrorSameCode", null, this.client.createResponseAdaptable($response)); + return Result.ok(null); + } + if ($response.statusCode() == 400) { + if ($response.headers().firstValue("X-RSD-Error-Type").orElse("").equals("SampleError")) { + var $error = new SampleError(JDKHttpClientResponseUtils.toString($response)); + this.lifecycleHook.onError("multiErrorSameCode", $error, this.client.createResponseAdaptable($response)); + return Result.err($error); + } + } + if ($response.statusCode() == 400) { + if ($response.headers().firstValue("X-RSD-Error-Type").orElse("").equals("SampleError2")) { + var $error = new SampleError2(JDKHttpClientResponseUtils.toString($response)); + this.lifecycleHook.onError("multiErrorSameCode", $error, this.client.createResponseAdaptable($response)); + return Result.err($error); + } + } + if ($response.statusCode() == 400) { + if ($response.headers().firstValue("X-RSD-Error-Type").orElse("").equals("SampleErrorWithValue")) { + var $errorData = JDKHttpClientResponseUtils.mapObject($response, ErrorDataDataImpl::of, ErrorData.Data.class); + var $message = $response.headers().firstValue("X-RSD-Error-Message").orElse("Invocation of multiErrorSameCode failed"); + var $error = new SampleErrorWithValue($message, $errorData); + this.lifecycleHook.onError("multiErrorSameCode", $error, this.client.createResponseAdaptable($response)); + return Result.err($error); + } + } + + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); + this.lifecycleHook.onError("multiErrorSameCode", $error, this.client.createResponseAdaptable($response)); + return Result.err($error); + } catch (Exception e) { + if (e instanceof InterruptedException) { + Thread.currentThread().interrupt(); + } + + var $error = new RSDError.$GenericError(RSDError.Type._Native, "Unexpected error while executing operation multiErrorSameCode", e); + this.lifecycleHook.onCatch("multiErrorSameCode", $error); + return Result.err($error); + } finally { + this.lifecycleHook.onFinally("multiErrorSameCode"); + } + } } diff --git a/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/jdkhttp/impl/ScalarSubstition_ServiceServiceImpl.java b/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/jdkhttp/impl/ScalarSubstition_ServiceServiceImpl.java index 75c31487..34be3ad2 100644 --- a/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/jdkhttp/impl/ScalarSubstition_ServiceServiceImpl.java +++ b/dsl/java-test/java-client/src/main/java/dev/rsdlang/sample/client/jdkhttp/impl/ScalarSubstition_ServiceServiceImpl.java @@ -1549,7 +1549,7 @@ private String contentType() { } } - public Result fail() { + public Result fail() { var $path = "%s/api/scalarsubstitution/fail".formatted( this.baseURI()); @@ -1570,13 +1570,17 @@ public Result fail() { if ($response.statusCode() == 200) { this.lifecycleHook.onSuccess("fail", null, this.client.createResponseAdaptable($response)); return Result.ok(null); - } else if ($response.statusCode() == 400) { - var $errorData = JDKHttpClientResponseUtils.mapLiteral($response, MyRange::of); - var $message = $response.headers().firstValue("X-RSD-Error-Message").orElse("Invocation of fail failed"); - var $error = new SampleErrorScalarSub($message, $errorData); - this.lifecycleHook.onError("fail", $error, this.client.createResponseAdaptable($response)); - return Result.err($error); } + if ($response.statusCode() == 400) { + if ($response.headers().firstValue("X-RSD-Error-Type").orElse("").equals("SampleErrorScalarSub")) { + var $errorData = JDKHttpClientResponseUtils.mapLiteral($response, MyRange::of); + var $message = $response.headers().firstValue("X-RSD-Error-Message").orElse("Invocation of fail failed"); + var $error = new SampleErrorScalarSub($message, $errorData); + this.lifecycleHook.onError("fail", $error, this.client.createResponseAdaptable($response)); + return Result.err($error); + } + } + var $error = new RSDError.$GenericError(RSDError.Type._UnknownResponse, String.format("Unsupported Http-Status '%s':\n%s", $response.statusCode(), JDKHttpClientResponseUtils.toString($response)), null); this.lifecycleHook.onError("fail", $error, this.client.createResponseAdaptable($response)); return Result.err($error); diff --git a/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/SampleServiceServiceTest.java b/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/SampleServiceServiceTest.java index a9e12c01..0c8031c1 100644 --- a/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/SampleServiceServiceTest.java +++ b/dsl/java-test/java-client/src/test/java/dev/rsdlang/sample/client/SampleServiceServiceTest.java @@ -274,4 +274,32 @@ public void getSimpleErrorUnion(SampleServiceService service) { default -> fail("Unexpected result type: " + result.getClass().getName()); } } + + @ParameterizedTest + @MethodSource("serviceProvider") + public void multiErrorSameCode(SampleServiceService service) { + var result = service.multiErrorSameCode(0); + switch (result) { + case Result.OK(var value) -> fail("Expected SampleErrorException to be thrown"); + case Result.ERR(SampleError error) -> + assertEquals("This is a sample error from the server", error.message()); + default -> fail("Unexpected result type: " + result.getClass().getName()); + } + result = service.multiErrorSameCode(1); + switch (result) { + case Result.OK(var value) -> fail("Expected SampleErrorException to be thrown"); + case Result.ERR(SampleError2 error) -> + assertEquals("This is a sample error 2 from the server", error.message()); + default -> fail("Unexpected result type: " + result.getClass().getName()); + } + result = service.multiErrorSameCode(2); + switch (result) { + case Result.OK(var value) -> fail("Expected SampleErrorWithValueException to be thrown"); + case Result.ERR(SampleErrorWithValue error) -> { + assertEquals("This is a sample error with value from the server", error.message()); + assertEquals("An error message", error.data().message()); + } + default -> fail("Unexpected result type: " + result.getClass().getName()); + } + } } diff --git a/dsl/java-test/java-quarkus/src/main/java/dev/rsdlang/sample/server/rest/SampleServiceResource.java b/dsl/java-test/java-quarkus/src/main/java/dev/rsdlang/sample/server/rest/SampleServiceResource.java index f68b14ff..df4e2430 100644 --- a/dsl/java-test/java-quarkus/src/main/java/dev/rsdlang/sample/server/rest/SampleServiceResource.java +++ b/dsl/java-test/java-quarkus/src/main/java/dev/rsdlang/sample/server/rest/SampleServiceResource.java @@ -13,6 +13,7 @@ import jakarta.ws.rs.Path; import jakarta.ws.rs.PathParam; import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; import dev.rsdlang.sample.server.service.SampleError2Exception; import dev.rsdlang.sample.server.service.SampleErrorBooleanException; @@ -279,4 +280,22 @@ public Response getSimpleErrorUnion(@HeaderParam("Accept") List $acceptH } } + @GET + @Path("multi-error") + public Response multiErrorSameCode( + @HeaderParam("Accept") List $acceptHeaders, + @QueryParam("errorType") String _errorType) { + var errorType = _RestUtils.parseInt(_errorType); + try { + service.multiErrorSameCode(builderFactory, errorType); + return responseBuilder.multiErrorSameCode(errorType).build(); + } catch (SampleErrorException e) { + return _RestUtils.toResponse(400, e); + } catch (SampleError2Exception e) { + return _RestUtils.toResponse(400, e); + } catch (SampleErrorWithValueException e) { + return _RestUtils.toResponse(400, e); + } + } + } diff --git a/dsl/java-test/java-quarkus/src/main/java/dev/rsdlang/sample/server/rest/SampleServiceResourceResponseBuilder.java b/dsl/java-test/java-quarkus/src/main/java/dev/rsdlang/sample/server/rest/SampleServiceResourceResponseBuilder.java index a7871d75..6a4c8d24 100644 --- a/dsl/java-test/java-quarkus/src/main/java/dev/rsdlang/sample/server/rest/SampleServiceResourceResponseBuilder.java +++ b/dsl/java-test/java-quarkus/src/main/java/dev/rsdlang/sample/server/rest/SampleServiceResourceResponseBuilder.java @@ -134,4 +134,8 @@ public ResponseBuilder getSimpleErrorUnion() { return Response.status(204); } + public ResponseBuilder multiErrorSameCode(int errorType) { + return Response.status(204); + } + } diff --git a/dsl/java-test/java-quarkus/src/main/java/dev/rsdlang/sample/server/service/SampleServiceService.java b/dsl/java-test/java-quarkus/src/main/java/dev/rsdlang/sample/server/service/SampleServiceService.java index 44eacd60..d0e93af5 100644 --- a/dsl/java-test/java-quarkus/src/main/java/dev/rsdlang/sample/server/service/SampleServiceService.java +++ b/dsl/java-test/java-quarkus/src/main/java/dev/rsdlang/sample/server/service/SampleServiceService.java @@ -72,4 +72,9 @@ public void getSimpleErrorScalar(BuilderFactory _factory) public void getSimpleErrorUnion(BuilderFactory _factory) throws SampleErrorUnionException; + public void multiErrorSameCode(BuilderFactory _factory, int errorType) + throws SampleErrorException, + SampleError2Exception, + SampleErrorWithValueException; + } diff --git a/dsl/java-test/java-quarkus/src/main/java/dev/rsdlang/sample/server/service/handler/sample/MultiErrorSameCodeHandlerImpl.java b/dsl/java-test/java-quarkus/src/main/java/dev/rsdlang/sample/server/service/handler/sample/MultiErrorSameCodeHandlerImpl.java new file mode 100644 index 00000000..cd892f67 --- /dev/null +++ b/dsl/java-test/java-quarkus/src/main/java/dev/rsdlang/sample/server/service/handler/sample/MultiErrorSameCodeHandlerImpl.java @@ -0,0 +1,29 @@ +package dev.rsdlang.sample.server.service.handler.sample; + +import dev.rsdlang.sample.server.model.ErrorData; +import dev.rsdlang.sample.server.service.BuilderFactory; +import dev.rsdlang.sample.server.service.SampleError2Exception; +import dev.rsdlang.sample.server.service.SampleErrorException; +import dev.rsdlang.sample.server.service.SampleErrorWithValueException; +import dev.rsdlang.sample.server.service.impl.SampleServiceServiceImpl; +import jakarta.enterprise.context.ApplicationScoped; + +@ApplicationScoped +public class MultiErrorSameCodeHandlerImpl implements SampleServiceServiceImpl.MultiErrorSameCodeHandler { + + @Override + public void multiErrorSameCode(BuilderFactory _factory, int errorType) + throws SampleErrorException, SampleError2Exception, SampleErrorWithValueException { + if (errorType == 0) { + throw new SampleErrorException("This is a sample error from the server"); + } else if (errorType == 1) { + throw new SampleError2Exception("This is a sample error 2 from the server"); + } else if (errorType == 2) { + var data = _factory.builder(ErrorData.DataBuilder.class) + .message("An error message") + .build(); + throw new SampleErrorWithValueException("This is a sample error with value from the server", data); + } + } + +} diff --git a/dsl/java-test/java-quarkus/src/main/java/dev/rsdlang/sample/server/service/impl/SampleServiceServiceImpl.java b/dsl/java-test/java-quarkus/src/main/java/dev/rsdlang/sample/server/service/impl/SampleServiceServiceImpl.java index e5c249ce..03513391 100644 --- a/dsl/java-test/java-quarkus/src/main/java/dev/rsdlang/sample/server/service/impl/SampleServiceServiceImpl.java +++ b/dsl/java-test/java-quarkus/src/main/java/dev/rsdlang/sample/server/service/impl/SampleServiceServiceImpl.java @@ -50,8 +50,9 @@ public class SampleServiceServiceImpl implements SampleServiceService { private final GetSimpleErrorEnumHandler getSimpleErrorEnumHandler; private final GetSimpleErrorScalarHandler getSimpleErrorScalarHandler; private final GetSimpleErrorUnionHandler getSimpleErrorUnionHandler; + private final MultiErrorSameCodeHandler multiErrorSameCodeHandler; - public SampleServiceServiceImpl(GetBooleanHandler getBooleanHandler, GetShortHandler getShortHandler, GetIntHandler getIntHandler, GetLongHandler getLongHandler, GetFloatHandler getFloatHandler, GetDoubleHandler getDoubleHandler, GetStringHandler getStringHandler, GetLocalDateHandler getLocalDateHandler, GetLocalDateTimeHandler getLocalDateTimeHandler, GetLocalTimeHandler getLocalTimeHandler, GetOffsetDateTimeHandler getOffsetDateTimeHandler, GetZonedDateTimeHandler getZonedDateTimeHandler, GetScalarHandler getScalarHandler, GetEnumHandler getEnumHandler, VoidOperationHandler voidOperationHandler, ErrorOperationHandler errorOperationHandler, MultiErrorOperationHandler multiErrorOperationHandler, GetSimpleRecordHandler getSimpleRecordHandler, GetSimpleRecordWithErrorHandler getSimpleRecordWithErrorHandler, GetSimpleErrorWithValueHandler getSimpleErrorWithValueHandler, GetSimpleErrorIntHandler getSimpleErrorIntHandler, GetSimpleErrorBooleanHandler getSimpleErrorBooleanHandler, GetSimpleErrorEnumHandler getSimpleErrorEnumHandler, GetSimpleErrorScalarHandler getSimpleErrorScalarHandler, GetSimpleErrorUnionHandler getSimpleErrorUnionHandler) { + public SampleServiceServiceImpl(GetBooleanHandler getBooleanHandler, GetShortHandler getShortHandler, GetIntHandler getIntHandler, GetLongHandler getLongHandler, GetFloatHandler getFloatHandler, GetDoubleHandler getDoubleHandler, GetStringHandler getStringHandler, GetLocalDateHandler getLocalDateHandler, GetLocalDateTimeHandler getLocalDateTimeHandler, GetLocalTimeHandler getLocalTimeHandler, GetOffsetDateTimeHandler getOffsetDateTimeHandler, GetZonedDateTimeHandler getZonedDateTimeHandler, GetScalarHandler getScalarHandler, GetEnumHandler getEnumHandler, VoidOperationHandler voidOperationHandler, ErrorOperationHandler errorOperationHandler, MultiErrorOperationHandler multiErrorOperationHandler, GetSimpleRecordHandler getSimpleRecordHandler, GetSimpleRecordWithErrorHandler getSimpleRecordWithErrorHandler, GetSimpleErrorWithValueHandler getSimpleErrorWithValueHandler, GetSimpleErrorIntHandler getSimpleErrorIntHandler, GetSimpleErrorBooleanHandler getSimpleErrorBooleanHandler, GetSimpleErrorEnumHandler getSimpleErrorEnumHandler, GetSimpleErrorScalarHandler getSimpleErrorScalarHandler, GetSimpleErrorUnionHandler getSimpleErrorUnionHandler, MultiErrorSameCodeHandler multiErrorSameCodeHandler) { this.getBooleanHandler = getBooleanHandler; this.getShortHandler = getShortHandler; this.getIntHandler = getIntHandler; @@ -77,6 +78,7 @@ public SampleServiceServiceImpl(GetBooleanHandler getBooleanHandler, GetShortHan this.getSimpleErrorEnumHandler = getSimpleErrorEnumHandler; this.getSimpleErrorScalarHandler = getSimpleErrorScalarHandler; this.getSimpleErrorUnionHandler = getSimpleErrorUnionHandler; + this.multiErrorSameCodeHandler = multiErrorSameCodeHandler; } @Override @@ -214,6 +216,14 @@ public void getSimpleErrorUnion(BuilderFactory _factory) getSimpleErrorUnionHandler.getSimpleErrorUnion(_factory); } + @Override + public void multiErrorSameCode(BuilderFactory _factory, int errorType) + throws SampleErrorException, + SampleError2Exception, + SampleErrorWithValueException { + multiErrorSameCodeHandler.multiErrorSameCode(_factory, errorType); + } + public interface GetBooleanHandler { public boolean getBoolean(BuilderFactory _factory); } @@ -324,4 +334,11 @@ public void getSimpleErrorUnion(BuilderFactory _factory) throws SampleErrorUnionException; } + public interface MultiErrorSameCodeHandler { + public void multiErrorSameCode(BuilderFactory _factory, int errorType) + throws SampleErrorException, + SampleError2Exception, + SampleErrorWithValueException; + } + } diff --git a/dsl/packages/cli/src/java-rest-client-jdk/service.ts b/dsl/packages/cli/src/java-rest-client-jdk/service.ts index f099384c..bdf6612e 100644 --- a/dsl/packages/cli/src/java-rest-client-jdk/service.ts +++ b/dsl/packages/cli/src/java-rest-client-jdk/service.ts @@ -722,16 +722,24 @@ function generateResponseDispatch( const BodyHandlers = fqn('java.net.http.HttpResponse.BodyHandlers'); methodBody.append(`var $response = $clientSupplier.get().send($request, ${BodyHandlers}.ofInputStream());`, NL); if (o.meta?.rest?.results.length) { - o.meta.rest.results.forEach((r, idx) => { - methodBody.append(`${idx === 0 ? '' : ' else '}if ($response.statusCode() == ${r.statusCode.toFixed(0)}) {`, NL); + o.meta.rest.results.forEach(r => { + methodBody.append(`if ($response.statusCode() == ${r.statusCode.toFixed(0)}) {`, NL); methodBody.indent(resBlock => { if (r.error === undefined) { handleOkResult(resBlock, o, artifactConfig, fqn); } else { - handleErrorResult(resBlock, o, r.error, artifactConfig, fqn); + const error = r.error; + resBlock.append( + `if ($response.headers().firstValue("X-RSD-Error-Type").orElse("").equals("${error}")) {`, + NL, + ); + resBlock.indent(errBlock => { + handleErrorResult(errBlock, o, error, artifactConfig, fqn); + }); + resBlock.append('}', NL); } }); - methodBody.append('}'); + methodBody.append('}', NL); }); methodBody.appendNewLine(); } else { diff --git a/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client/src/SampleServiceService.ts b/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client/src/SampleServiceService.ts index d73851ba..8fd51ea8 100644 --- a/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client/src/SampleServiceService.ts +++ b/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client/src/SampleServiceService.ts @@ -32,4 +32,5 @@ export interface SampleServiceService { getSimpleErrorEnum(): Promise>; getSimpleErrorScalar(): Promise>; getSimpleErrorUnion(): Promise>; + multiErrorSameCode(errorType: RSDInt): Promise>; } diff --git a/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client/src/services/SampleServiceServiceFetchImpl.ts b/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client/src/services/SampleServiceServiceFetchImpl.ts index 1fd0c671..3eedc8c9 100644 --- a/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client/src/services/SampleServiceServiceFetchImpl.ts +++ b/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client/src/services/SampleServiceServiceFetchImpl.ts @@ -2,7 +2,7 @@ import { decodeResponse, encodingType, safeExecute, type ServiceProps } from './_fetch-type-utils.js'; import { api } from '../index.js'; import { isBoolean, isNumber, isNumeric, isString } from '../_type-utils.js'; -import { isRSDBoolean, isRSDInt, RSDBooleanFromJSON, RSDDoubleFromJSON, RSDFloatFromJSON, RSDIntFromJSON, RSDLocalDateFromJSON, RSDLocalDateTimeFromJSON, RSDLocalTimeFromJSON, RSDLongFromJSON, RSDOffsetDateTimeFromJSON, RSDShortFromJSON, type RSDString, RSDStringFromJSON, RSDZonedDateTimeFromJSON } from '../model/_Builtins.js'; +import { isRSDBoolean, isRSDInt, RSDBooleanFromJSON, RSDDoubleFromJSON, RSDFloatFromJSON, type RSDInt, RSDIntFromJSON, RSDLocalDateFromJSON, RSDLocalDateTimeFromJSON, RSDLocalTimeFromJSON, RSDLongFromJSON, RSDOffsetDateTimeFromJSON, RSDShortFromJSON, type RSDString, RSDStringFromJSON, RSDZonedDateTimeFromJSON } from '../model/_Builtins.js'; export function createSampleServiceService(props: ServiceProps): api.service.SampleServiceService { return { @@ -31,6 +31,7 @@ export function createSampleServiceService(props: ServiceProps): api.service.SampleServiceService['getBoolean'] { @@ -884,3 +885,55 @@ function fnGetSimpleErrorUnion(props: ServiceProps): api. }; } +function fnMultiErrorSameCode(props: ServiceProps): api.service.SampleServiceService['multiErrorSameCode'] { + const { baseUrl, fetchAPI = fetch, lifecycleHandlers = {} } = props; + const { preFetch, onSuccess, onError, onCatch, final } = lifecycleHandlers; + return async (errorType: RSDInt) => { + try { + const $init = (await preFetch?.('multiErrorSameCode')) ?? {}; + const $headers = new Headers($init.headers ?? {}); + $headers.append('Accept', encodingType(props)); + $headers.append('Content-Type', encodingType(props)); + $init.headers = $headers; + + const $param = new URLSearchParams(); + $param.append('errorType', String(errorType)); + const $path = `${baseUrl}/api/samplerecords/multi-error?${$param.toString()}`; + const $response = await fetchAPI($path, { ...$init, method: 'GET' }); + + if ($response.status === 204) { + return safeExecute(api.result.OK(api.result.Void), () => onSuccess?.('multiErrorSameCode', api.result.Void)); + } else if ($response.status === 400) { + const err = { + _type: 'SampleError', + message: await $response.text(), + } as const; + return safeExecute(api.result.ERR(err), () => onError?.('multiErrorSameCode', err)); + } else if ($response.status === 400) { + const err = { + _type: 'SampleError2', + message: await $response.text(), + } as const; + return safeExecute(api.result.ERR(err), () => onError?.('multiErrorSameCode', err)); + } else if ($response.status === 400) { + const $data = await decodeResponse($response, api.utils.isRecord); + const $result = api.model.ErrorDataFromJSON($data); + const err = { + _type: 'SampleErrorWithValue', + data: $result, + } as const; + return safeExecute(api.result.ERR(err), () => onError?.('multiErrorSameCode', err)); + } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; + return api.result.ERR(err); + } catch (e) { + onCatch?.('multiErrorSameCode', e); + const ee = e instanceof Error ? e : new Error('', { cause: e }); + const err = { _type: '_Native', message: ee.message, error: ee } as const; + return api.result.ERR(err); + } finally { + final?.('multiErrorSameCode'); + } + }; +} + diff --git a/dsl/packages/cli/test/test-specs/gen-out/openapi/openapi.json b/dsl/packages/cli/test/test-specs/gen-out/openapi/openapi.json index 7870a791..dae6d92a 100644 --- a/dsl/packages/cli/test/test-specs/gen-out/openapi/openapi.json +++ b/dsl/packages/cli/test/test-specs/gen-out/openapi/openapi.json @@ -672,6 +672,42 @@ } } }, + "/api/samplerecords/multi-error": { + "get": { + "tags": [ + "SampleService" + ], + "description": "", + "operationId": "SampleService_multiErrorSameCode", + "parameters": [ + { + "name": "errorType", + "description": "", + "in": "query", + "required": true, + "schema": { + "type": "number", + "format": "int32" + } + } + ], + "responses": { + "204": { + "description": "success" + }, + "400": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorData" + } + } + } + } + } + } + }, "/api/listsamplerecords/boolean": { "get": { "tags": [ diff --git a/dsl/packages/cli/test/test-specs/sample.json b/dsl/packages/cli/test/test-specs/sample.json index 7fd3b567..1d53b52a 100644 --- a/dsl/packages/cli/test/test-specs/sample.json +++ b/dsl/packages/cli/test/test-specs/sample.json @@ -5241,6 +5241,75 @@ ] } } + }, + { + "@type": "Operation", + "name": "multiErrorSameCode", + "doc": "", + "parameters": [ + { + "@type": "Parameter", + "name": "errorType", + "array": false, + "nullable": false, + "optional": false, + "patch": false, + "variant": "builtin", + "type": "int", + "doc": "", + "meta": { + "rest": { + "name": "errorType", + "source": "query" + } + } + } + ], + "errors": [ + "SampleError", + "SampleError2", + "SampleErrorWithValue" + ], + "operationErrors": [ + { + "@type": "OperationError", + "error": "SampleError", + "doc": "" + }, + { + "@type": "OperationError", + "error": "SampleError2", + "doc": "" + }, + { + "@type": "OperationError", + "error": "SampleErrorWithValue", + "doc": "" + } + ], + "meta": { + "rest": { + "method": "GET", + "path": "multi-error", + "results": [ + { + "statusCode": 204 + }, + { + "statusCode": 400, + "error": "SampleError" + }, + { + "statusCode": 400, + "error": "SampleError2" + }, + { + "statusCode": 400, + "error": "SampleErrorWithValue" + } + ] + } + } } ], "meta": { diff --git a/dsl/packages/cli/test/test-specs/sample.rrsd b/dsl/packages/cli/test/test-specs/sample.rrsd index 1e3ebce2..c6f2fac9 100644 --- a/dsl/packages/cli/test/test-specs/sample.rrsd +++ b/dsl/packages/cli/test/test-specs/sample.rrsd @@ -102,6 +102,14 @@ resource SampleService at '/api/samplerecords' { 204 400: SampleErrorUnion } + GET multiErrorSameCode at 'multi-error' + query-param errorType + => { + 204 + 400: SampleError + 400: SampleError2 + 400: SampleErrorWithValue + } } resource ListSampleService at '/api/listsamplerecords' { diff --git a/dsl/packages/cli/test/test-specs/sample.rsd b/dsl/packages/cli/test/test-specs/sample.rsd index 4c315316..35fe78f8 100644 --- a/dsl/packages/cli/test/test-specs/sample.rsd +++ b/dsl/packages/cli/test/test-specs/sample.rsd @@ -599,6 +599,7 @@ service SampleService { operation getSimpleErrorEnum() throws SampleErrorEnum; operation getSimpleErrorScalar() throws SampleErrorScalar; operation getSimpleErrorUnion() throws SampleErrorUnion; + operation multiErrorSameCode(errorType: int) throws SampleError SampleError2 SampleErrorWithValue; } service ListSampleService { From 4514812d5a6429bb7bc60195c6ee8f2d998f2f5f Mon Sep 17 00:00:00 2001 From: Tom Schindl Date: Thu, 25 Jun 2026 21:22:27 +0200 Subject: [PATCH 2/3] 70 - added js/ts support and fixed open-API generation --- dsl/packages/cli/src/open-api/service.ts | 84 +++++- .../typescript-rest-client-fetch/service.ts | 13 +- .../SampleServiceService.adapter.ts | 55 ++++ .../SampleServiceServiceFetchImpl.test.ts | 20 ++ .../src/.openapi-generator/FILES | 2 + .../src/apis/SampleServiceApi.ts | 56 ++++ .../src/docs/BinaryTypesApi.md | 4 +- .../src/docs/ListSampleServiceApi.md | 2 +- .../src/docs/SampleServiceApi.md | 89 ++++++- ...pleServiceMultiErrorSameCode400Response.md | 34 +++ .../src/docs/ScalarSubstitionServiceApi.md | 2 +- ...pleServiceMultiErrorSameCode400Response.ts | 69 +++++ .../src/models/index.ts | 1 + .../services/BinaryTypesServiceFetchImpl.ts | 48 ++-- .../ListSampleServiceServiceFetchImpl.ts | 31 ++- ...athParameterTypeServiceServiceFetchImpl.ts | 15 ++ .../services/SampleServiceServiceFetchImpl.ts | 243 +++++++++++------- ...calarSubstition_ServiceServiceFetchImpl.ts | 20 +- .../test-specs/gen-out/openapi/openapi.json | 219 +++++++++++++++- 19 files changed, 862 insertions(+), 145 deletions(-) create mode 100644 dsl/packages/cli/test/test-specs/gen-out/client/typescript-client-openapi/src/docs/SampleServiceMultiErrorSameCode400Response.md create mode 100644 dsl/packages/cli/test/test-specs/gen-out/client/typescript-client-openapi/src/models/SampleServiceMultiErrorSameCode400Response.ts diff --git a/dsl/packages/cli/src/open-api/service.ts b/dsl/packages/cli/src/open-api/service.ts index 534822d9..04738ae0 100644 --- a/dsl/packages/cli/src/open-api/service.ts +++ b/dsl/packages/cli/src/open-api/service.ts @@ -1,4 +1,12 @@ -import { isMBuiltinType, isMEnumType, isMRecordType, isMUnionType, MParameter, MResolvedService } from '../model.js'; +import { + isMBuiltinType, + isMEnumType, + isMRecordType, + isMUnionType, + MParameter, + MResolvedOperation, + MResolvedService, +} from '../model.js'; import { generateBuilinProperty, nullableProcessor } from './record.js'; export function generateService(s: MResolvedService): Record { @@ -86,12 +94,23 @@ export function generateService(s: MResolvedService): Record { } }; - if (o.meta.rest.results.length === 0) { + if (o.meta.rest.results.filter(r => r.error === undefined).length === 0) { handleResultType(200); } + const errorsByCode = new Map(); o.meta.rest.results.forEach(r => { if (r.error) { + const errors = errorsByCode.get(r.statusCode) ?? []; + errorsByCode.set(r.statusCode, [...errors, r.error]); + } + }); + + o.meta.rest.results + .filter(r => r.error === undefined) + .forEach(r => { + handleResultType(r.statusCode); + /*if (r.error) { const error = o.resolved.errors.find(e => e.name === r.error); if (error?.resolvedContentType) { if ( @@ -142,9 +161,31 @@ export function generateService(s: MResolvedService): Record { }, }; } - } else { - handleResultType(r.statusCode); - } + }*/ + }); + errorsByCode.forEach((errors, code) => { + responses[code] = { + description: '', + headers: { + 'X-RSD-Error-Type': { + description: 'Contains the type information for the error transferred in the response body', + schema: { + type: 'string', + }, + }, + 'X-RSD-Error-Message': { + description: 'Contains the error message for the error transferred in the response body', + schema: { + type: 'string', + }, + }, + }, + content: { + 'application/json': { + schema: errors.length === 1 ? toErrorType(errors[0], o) : toErrorListType(errors, o), + }, + }, + }; }); let requestBody; @@ -268,6 +309,39 @@ export function generateService(s: MResolvedService): Record { return rv; } +function toErrorType(err: string, o: MResolvedOperation) { + const error = o.resolved.errors.find(e => e.name === err); + if (error?.resolvedContentType) { + if ( + isMRecordType(error.resolvedContentType) || + isMUnionType(error.resolvedContentType) || + isMEnumType(error.resolvedContentType) + ) { + return { + $ref: `#/components/schemas/${error.resolvedContentType.name}`, + }; + } else if (isMBuiltinType(error.resolvedContentType)) { + return generateBuilinProperty(error.resolvedContentType); + } else { + return { + type: 'string', + }; + } + } else { + return { + type: 'string', + }; + } +} + +function toErrorListType(errors: readonly string[], o: MResolvedOperation) { + const errs = new Set(errors.map(err => toErrorType(err, o)).map(e => JSON.stringify(e))); + return { + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + oneOf: Array.from(errs).map(e => JSON.parse(e)), + }; +} + function toType(param: MParameter) { let schema: Record = {}; if (param.variant === 'stream') { diff --git a/dsl/packages/cli/src/typescript-rest-client-fetch/service.ts b/dsl/packages/cli/src/typescript-rest-client-fetch/service.ts index 8b91ed46..2c7b8d8f 100644 --- a/dsl/packages/cli/src/typescript-rest-client-fetch/service.ts +++ b/dsl/packages/cli/src/typescript-rest-client-fetch/service.ts @@ -672,10 +672,7 @@ function generateRemoteInvoke( } if (o.meta.rest.results.length) { - o.meta.rest.results.forEach((r, idx) => { - if (idx !== 0) { - node.append(' else '); - } + o.meta.rest.results.forEach(r => { node.append(`if ($response.status === ${r.statusCode.toFixed()}) {`, NL); if (r.error === undefined) { node.indent(block => { @@ -684,10 +681,14 @@ function generateRemoteInvoke( } else { const err = r.error; node.indent(block => { - block.append(handleErrorResult(o, err, config, fqn)); + block.append(`if($response.headers.get('X-RSD-Error-Type') === '${err}') {`, NL); + block.indent(innerBlock => { + innerBlock.append(handleErrorResult(o, err, config, fqn)); + }); + block.append('}', NL); }); } - node.append('}'); + node.append('}', NL); }); } else { const code = o.resultType ? '200' : '204'; diff --git a/dsl/packages/cli/test/generated-code/openapi-adapter/SampleServiceService.adapter.ts b/dsl/packages/cli/test/generated-code/openapi-adapter/SampleServiceService.adapter.ts index 4fa0cb50..0d407562 100644 --- a/dsl/packages/cli/test/generated-code/openapi-adapter/SampleServiceService.adapter.ts +++ b/dsl/packages/cli/test/generated-code/openapi-adapter/SampleServiceService.adapter.ts @@ -484,4 +484,59 @@ class SampleServiceServiceImpl implements api.service.SampleServiceService { return api.result.ERR(toRSDError(error)); } } + + async multiErrorSameCode( + errorType: api.model.RSDInt, + ): Promise< + api.result.Result< + api.result.VoidType, + | api.service.SampleErrorError + | api.service.SampleError2Error + | api.service.SampleErrorWithValueError + | api.service.StatusRSDError + | api.service.NativeRSDError + > + > { + try { + const response = await this.delegate.sampleServiceMultiErrorSameCodeRaw({ errorType }); + if (response.raw.status === 204) { + return api.result.OK(api.result.Void); + } + return api.result.ERR(toRSDError(new ResponseError(response.raw, await response.raw.text()))); + } catch (error: unknown) { + if (error instanceof ResponseError) { + if (error.response.status === 400) { + if (error.response.headers.get('X-RSD-Error-Type') === 'SampleError') { + const err = { + _type: 'SampleError', + message: await error.response.text(), + } as const; + return api.result.ERR(err); + } + } + if (error.response.status === 400) { + if (error.response.headers.get('X-RSD-Error-Type') === 'SampleError2') { + const err = { + _type: 'SampleError2', + message: await error.response.text(), + } as const; + return api.result.ERR(err); + } + } + + if (error.response.status === 400) { + if (error.response.headers.get('X-RSD-Error-Type') === 'SampleErrorWithValue') { + const result = (await error.response.json()) as Record; + const data = ErrorDataFromJSON(result); + const err = { + _type: 'SampleErrorWithValue', + data, + } as const; + return api.result.ERR(err); + } + } + } + return api.result.ERR(toRSDError(error)); + } + } } diff --git a/dsl/packages/cli/test/generated-code/typescript-rest-client-fetch/SampleServiceServiceFetchImpl.test.ts b/dsl/packages/cli/test/generated-code/typescript-rest-client-fetch/SampleServiceServiceFetchImpl.test.ts index aa874e12..fca9974d 100644 --- a/dsl/packages/cli/test/generated-code/typescript-rest-client-fetch/SampleServiceServiceFetchImpl.test.ts +++ b/dsl/packages/cli/test/generated-code/typescript-rest-client-fetch/SampleServiceServiceFetchImpl.test.ts @@ -448,4 +448,24 @@ describe('SampleServiceServiceFetchImpl', () => { expect(api.service.isSampleErrorScalarError(error)).toBe(true); }); }); + describe('multiErrorSameCode', () => { + test.each([json, msgpack, jsonOpenApi])('sucess with $encoding ', async ({ service }) => { + const [result, error] = await service.multiErrorSameCode(0); + expect(error).not.toBeNull(); + expect(result).toBeUndefined(); + expect(isSampleErrorError(error)).toBe(true); + }); + test.each([json, msgpack, jsonOpenApi])('sucess with $encoding ', async ({ service }) => { + const [result, error] = await service.multiErrorSameCode(1); + expect(error).not.toBeNull(); + expect(result).toBeUndefined(); + expect(isSampleError2Error(error)).toBe(true); + }); + test.each([json, msgpack, jsonOpenApi])('sucess with $encoding ', async ({ service }) => { + const [result, error] = await service.multiErrorSameCode(2); + expect(error).not.toBeNull(); + expect(result).toBeUndefined(); + expect(isSampleErrorWithValueError(error)).toBe(true); + }); + }); }); diff --git a/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client-openapi/src/.openapi-generator/FILES b/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client-openapi/src/.openapi-generator/FILES index 80396ca3..b4f5fdc1 100644 --- a/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client-openapi/src/.openapi-generator/FILES +++ b/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client-openapi/src/.openapi-generator/FILES @@ -319,6 +319,7 @@ docs/RecordWithUnions.md docs/SampleEnum.md docs/SampleEnumWithCustValue.md docs/SampleServiceApi.md +docs/SampleServiceMultiErrorSameCode400Response.md docs/ScalarRecord.md docs/ScalarRecordSubstitution.md docs/ScalarSubstitionServiceApi.md @@ -638,6 +639,7 @@ models/RecordOfRecords.ts models/RecordWithUnions.ts models/SampleEnum.ts models/SampleEnumWithCustValue.ts +models/SampleServiceMultiErrorSameCode400Response.ts models/ScalarRecord.ts models/ScalarRecordSubstitution.ts models/SimpleRecord.ts diff --git a/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client-openapi/src/apis/SampleServiceApi.ts b/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client-openapi/src/apis/SampleServiceApi.ts index 551b6cbc..44661198 100644 --- a/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client-openapi/src/apis/SampleServiceApi.ts +++ b/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client-openapi/src/apis/SampleServiceApi.ts @@ -23,6 +23,11 @@ import { SampleEnumFromJSON, SampleEnumToJSON, } from '../models/SampleEnum.js'; +import { + type SampleServiceMultiErrorSameCode400Response, + SampleServiceMultiErrorSameCode400ResponseFromJSON, + SampleServiceMultiErrorSameCode400ResponseToJSON, +} from '../models/SampleServiceMultiErrorSameCode400Response.js'; import { type SimpleRecord, SimpleRecordFromJSON, @@ -42,6 +47,10 @@ export interface SampleServiceGetSimpleRecordWithErrorRequest { key: string; } +export interface SampleServiceMultiErrorSameCodeRequest { + errorType: number; +} + /** * */ @@ -995,6 +1004,53 @@ export class SampleServiceApi extends runtime.BaseAPI { await this.sampleServiceMultiErrorOperationRaw(initOverrides); } + /** + * Creates request options for sampleServiceMultiErrorSameCode without sending the request + */ + async sampleServiceMultiErrorSameCodeRequestOpts(requestParameters: SampleServiceMultiErrorSameCodeRequest): Promise { + if (requestParameters['errorType'] == null) { + throw new runtime.RequiredError( + 'errorType', + 'Required parameter "errorType" was null or undefined when calling sampleServiceMultiErrorSameCode().' + ); + } + + const queryParameters: any = {}; + + if (requestParameters['errorType'] != null) { + queryParameters['errorType'] = requestParameters['errorType']; + } + + const headerParameters: runtime.HTTPHeaders = {}; + + + let urlPath = `/api/samplerecords/multi-error`; + + return { + path: urlPath, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }; + } + + /** + * + */ + async sampleServiceMultiErrorSameCodeRaw(requestParameters: SampleServiceMultiErrorSameCodeRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + const requestOptions = await this.sampleServiceMultiErrorSameCodeRequestOpts(requestParameters); + const response = await this.request(requestOptions, initOverrides); + + return new runtime.VoidApiResponse(response); + } + + /** + * + */ + async sampleServiceMultiErrorSameCode(requestParameters: SampleServiceMultiErrorSameCodeRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + await this.sampleServiceMultiErrorSameCodeRaw(requestParameters, initOverrides); + } + /** * Creates request options for sampleServiceVoidOperation without sending the request */ diff --git a/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client-openapi/src/docs/BinaryTypesApi.md b/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client-openapi/src/docs/BinaryTypesApi.md index 4c04289f..87f9e364 100644 --- a/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client-openapi/src/docs/BinaryTypesApi.md +++ b/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client-openapi/src/docs/BinaryTypesApi.md @@ -87,7 +87,7 @@ No authorization required | Status code | Description | Response headers | |-------------|-------------|------------------| | **200** | | - | -| **400** | | - | +| **400** | | * X-RSD-Error-Type - Contains the type information for the error transferred in the response body
* X-RSD-Error-Message - Contains the error message for the error transferred in the response body
| [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) @@ -147,7 +147,7 @@ No authorization required | Status code | Description | Response headers | |-------------|-------------|------------------| | **200** | | - | -| **400** | | - | +| **400** | | * X-RSD-Error-Type - Contains the type information for the error transferred in the response body
* X-RSD-Error-Message - Contains the error message for the error transferred in the response body
| [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) diff --git a/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client-openapi/src/docs/ListSampleServiceApi.md b/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client-openapi/src/docs/ListSampleServiceApi.md index 7b4fe06e..60f30d8e 100644 --- a/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client-openapi/src/docs/ListSampleServiceApi.md +++ b/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client-openapi/src/docs/ListSampleServiceApi.md @@ -845,7 +845,7 @@ No authorization required | Status code | Description | Response headers | |-------------|-------------|------------------| | **200** | | - | -| **400** | | - | +| **400** | | * X-RSD-Error-Type - Contains the type information for the error transferred in the response body
* X-RSD-Error-Message - Contains the error message for the error transferred in the response body
| [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) diff --git a/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client-openapi/src/docs/SampleServiceApi.md b/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client-openapi/src/docs/SampleServiceApi.md index 0bd80980..659d4bf6 100644 --- a/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client-openapi/src/docs/SampleServiceApi.md +++ b/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client-openapi/src/docs/SampleServiceApi.md @@ -28,6 +28,7 @@ All URIs are relative to *http://localhost* | [**sampleServiceGetString**](SampleServiceApi.md#sampleservicegetstring) | **GET** /api/samplerecords/string | | | [**sampleServiceGetZonedDateTime**](SampleServiceApi.md#sampleservicegetzoneddatetime) | **GET** /api/samplerecords/zoneddatetime | | | [**sampleServiceMultiErrorOperation**](SampleServiceApi.md#sampleservicemultierroroperation) | **GET** /api/samplerecords/multierroroperation | | +| [**sampleServiceMultiErrorSameCode**](SampleServiceApi.md#sampleservicemultierrorsamecode) | **GET** /api/samplerecords/multi-error | | | [**sampleServiceVoidOperation**](SampleServiceApi.md#sampleservicevoidoperation) | **GET** /api/samplerecords/voidoperation | | @@ -87,7 +88,7 @@ No authorization required | Status code | Description | Response headers | |-------------|-------------|------------------| | **204** | success | - | -| **400** | | - | +| **400** | | * X-RSD-Error-Type - Contains the type information for the error transferred in the response body
* X-RSD-Error-Message - Contains the error message for the error transferred in the response body
| [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) @@ -855,7 +856,7 @@ No authorization required | Status code | Description | Response headers | |-------------|-------------|------------------| | **204** | success | - | -| **400** | | - | +| **400** | | * X-RSD-Error-Type - Contains the type information for the error transferred in the response body
* X-RSD-Error-Message - Contains the error message for the error transferred in the response body
| [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) @@ -915,7 +916,7 @@ No authorization required | Status code | Description | Response headers | |-------------|-------------|------------------| | **204** | success | - | -| **400** | | - | +| **400** | | * X-RSD-Error-Type - Contains the type information for the error transferred in the response body
* X-RSD-Error-Message - Contains the error message for the error transferred in the response body
| [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) @@ -975,7 +976,7 @@ No authorization required | Status code | Description | Response headers | |-------------|-------------|------------------| | **204** | success | - | -| **400** | | - | +| **400** | | * X-RSD-Error-Type - Contains the type information for the error transferred in the response body
* X-RSD-Error-Message - Contains the error message for the error transferred in the response body
| [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) @@ -1035,7 +1036,7 @@ No authorization required | Status code | Description | Response headers | |-------------|-------------|------------------| | **204** | success | - | -| **400** | | - | +| **400** | | * X-RSD-Error-Type - Contains the type information for the error transferred in the response body
* X-RSD-Error-Message - Contains the error message for the error transferred in the response body
| [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) @@ -1095,7 +1096,7 @@ No authorization required | Status code | Description | Response headers | |-------------|-------------|------------------| | **204** | success | - | -| **400** | | - | +| **400** | | * X-RSD-Error-Type - Contains the type information for the error transferred in the response body
* X-RSD-Error-Message - Contains the error message for the error transferred in the response body
| [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) @@ -1155,7 +1156,7 @@ No authorization required | Status code | Description | Response headers | |-------------|-------------|------------------| | **204** | success | - | -| **400** | | - | +| **400** | | * X-RSD-Error-Type - Contains the type information for the error transferred in the response body
* X-RSD-Error-Message - Contains the error message for the error transferred in the response body
| [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) @@ -1290,7 +1291,7 @@ No authorization required | Status code | Description | Response headers | |-------------|-------------|------------------| | **200** | | - | -| **400** | | - | +| **400** | | * X-RSD-Error-Type - Contains the type information for the error transferred in the response body
* X-RSD-Error-Message - Contains the error message for the error transferred in the response body
| [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) @@ -1468,8 +1469,76 @@ No authorization required | Status code | Description | Response headers | |-------------|-------------|------------------| | **204** | success | - | -| **400** | | - | -| **401** | | - | +| **400** | | * X-RSD-Error-Type - Contains the type information for the error transferred in the response body
* X-RSD-Error-Message - Contains the error message for the error transferred in the response body
| +| **401** | | * X-RSD-Error-Type - Contains the type information for the error transferred in the response body
* X-RSD-Error-Message - Contains the error message for the error transferred in the response body
| + +[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) + + +## sampleServiceMultiErrorSameCode + +> sampleServiceMultiErrorSameCode(errorType) + + + + + +### Example + +```ts +import { + Configuration, + SampleServiceApi, +} from ''; +import type { SampleServiceMultiErrorSameCodeRequest } from ''; + +async function example() { + console.log("🚀 Testing SDK..."); + const api = new SampleServiceApi(); + + const body = { + // number | + errorType: 8.14, + } satisfies SampleServiceMultiErrorSameCodeRequest; + + try { + const data = await api.sampleServiceMultiErrorSameCode(body); + console.log(data); + } catch (error) { + console.error(error); + } +} + +// Run the test +example().catch(console.error); +``` + +### Parameters + + +| Name | Type | Description | Notes | +|------------- | ------------- | ------------- | -------------| +| **errorType** | `number` | | [Defaults to `undefined`] | + +### Return type + +`void` (Empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: Not defined +- **Accept**: `application/json` + + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **204** | success | - | +| **400** | | * X-RSD-Error-Type - Contains the type information for the error transferred in the response body
* X-RSD-Error-Message - Contains the error message for the error transferred in the response body
| [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) diff --git a/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client-openapi/src/docs/SampleServiceMultiErrorSameCode400Response.md b/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client-openapi/src/docs/SampleServiceMultiErrorSameCode400Response.md new file mode 100644 index 00000000..1ee360c0 --- /dev/null +++ b/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client-openapi/src/docs/SampleServiceMultiErrorSameCode400Response.md @@ -0,0 +1,34 @@ + +# SampleServiceMultiErrorSameCode400Response + + +## Properties + +Name | Type +------------ | ------------- +`message` | string + +## Example + +```typescript +import type { SampleServiceMultiErrorSameCode400Response } from '' + +// TODO: Update the object below with actual values +const example = { + "message": null, +} satisfies SampleServiceMultiErrorSameCode400Response + +console.log(example) + +// Convert the instance to a JSON string +const exampleJSON: string = JSON.stringify(example) +console.log(exampleJSON) + +// Parse the JSON string back to an object +const exampleParsed = JSON.parse(exampleJSON) as SampleServiceMultiErrorSameCode400Response +console.log(exampleParsed) +``` + +[[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) + + diff --git a/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client-openapi/src/docs/ScalarSubstitionServiceApi.md b/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client-openapi/src/docs/ScalarSubstitionServiceApi.md index 51b58177..1dfb2d09 100644 --- a/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client-openapi/src/docs/ScalarSubstitionServiceApi.md +++ b/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client-openapi/src/docs/ScalarSubstitionServiceApi.md @@ -89,7 +89,7 @@ No authorization required | Status code | Description | Response headers | |-------------|-------------|------------------| | **204** | success | - | -| **400** | | - | +| **400** | | * X-RSD-Error-Type - Contains the type information for the error transferred in the response body
* X-RSD-Error-Message - Contains the error message for the error transferred in the response body
| [[Back to top]](#) [[Back to API list]](../README.md#api-endpoints) [[Back to Model list]](../README.md#models) [[Back to README]](../README.md) diff --git a/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client-openapi/src/models/SampleServiceMultiErrorSameCode400Response.ts b/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client-openapi/src/models/SampleServiceMultiErrorSameCode400Response.ts new file mode 100644 index 00000000..e6337dc8 --- /dev/null +++ b/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client-openapi/src/models/SampleServiceMultiErrorSameCode400Response.ts @@ -0,0 +1,69 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * TBD + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import type { ErrorData } from './ErrorData.js'; +import { + instanceOfErrorData, + ErrorDataFromJSON, + ErrorDataFromJSONTyped, + ErrorDataToJSON, +} from './ErrorData.js'; + +/** + * @type SampleServiceMultiErrorSameCode400Response + * + * @export + */ +export type SampleServiceMultiErrorSameCode400Response = ErrorData | string; + +export function SampleServiceMultiErrorSameCode400ResponseFromJSON(json: any): SampleServiceMultiErrorSameCode400Response { + return SampleServiceMultiErrorSameCode400ResponseFromJSONTyped(json, false); +} + +export function SampleServiceMultiErrorSameCode400ResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): SampleServiceMultiErrorSameCode400Response { + if (json == null) { + return json; + } + if (typeof json !== 'object') { + return json; + } + if (instanceOfErrorData(json)) { + return ErrorDataFromJSONTyped(json, true); + } + if (typeof json === 'string') { + return json; + } + return {} as any; +} + +export function SampleServiceMultiErrorSameCode400ResponseToJSON(json: any): any { + return SampleServiceMultiErrorSameCode400ResponseToJSONTyped(json, false); +} + +export function SampleServiceMultiErrorSameCode400ResponseToJSONTyped(value?: SampleServiceMultiErrorSameCode400Response | null, ignoreDiscriminator: boolean = false): any { + if (value == null) { + return value; + } + if (typeof value !== 'object') { + return value; + } + if (instanceOfErrorData(value)) { + return ErrorDataToJSON(value as ErrorData); + } + if (typeof value === 'string') { + return value; + } + return {}; +} + diff --git a/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client-openapi/src/models/index.ts b/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client-openapi/src/models/index.ts index c8a9806a..2f466079 100644 --- a/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client-openapi/src/models/index.ts +++ b/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client-openapi/src/models/index.ts @@ -299,6 +299,7 @@ export * from './RecordOfRecords.js'; export * from './RecordWithUnions.js'; export * from './SampleEnum.js'; export * from './SampleEnumWithCustValue.js'; +export * from './SampleServiceMultiErrorSameCode400Response.js'; export * from './ScalarRecord.js'; export * from './ScalarRecordSubstitution.js'; export * from './SimpleRecord.js'; diff --git a/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client/src/services/BinaryTypesServiceFetchImpl.ts b/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client/src/services/BinaryTypesServiceFetchImpl.ts index 8ad8d1c3..1dd84ab6 100644 --- a/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client/src/services/BinaryTypesServiceFetchImpl.ts +++ b/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client/src/services/BinaryTypesServiceFetchImpl.ts @@ -55,6 +55,7 @@ function fnUploadFile(props: ServiceProps): api.service.B const $result = RSDIntFromJSON($data); return safeExecute(api.result.OK($result), () => onSuccess?.('uploadFile', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -92,6 +93,7 @@ function fnUploadFileOpt(props: ServiceProps): api.servic const $result = RSDIntFromJSON($data); return safeExecute(api.result.OK($result), () => onSuccess?.('uploadFileOpt', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -129,6 +131,7 @@ function fnUploadFileNil(props: ServiceProps): api.servic const $result = RSDIntFromJSON($data); return safeExecute(api.result.OK($result), () => onSuccess?.('uploadFileNil', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -168,6 +171,7 @@ function fnUploadFileOptNil(props: ServiceProps): api.ser const $result = RSDIntFromJSON($data); return safeExecute(api.result.OK($result), () => onSuccess?.('uploadFileOptNil', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -203,6 +207,7 @@ function fnUploadBlob(props: ServiceProps): api.service.B const $result = RSDIntFromJSON($data); return safeExecute(api.result.OK($result), () => onSuccess?.('uploadBlob', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -240,6 +245,7 @@ function fnUploadBlobOpt(props: ServiceProps): api.servic const $result = RSDIntFromJSON($data); return safeExecute(api.result.OK($result), () => onSuccess?.('uploadBlobOpt', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -277,6 +283,7 @@ function fnUploadBlobNil(props: ServiceProps): api.servic const $result = RSDIntFromJSON($data); return safeExecute(api.result.OK($result), () => onSuccess?.('uploadBlobNil', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -316,6 +323,7 @@ function fnUploadBlobOptNil(props: ServiceProps): api.ser const $result = RSDIntFromJSON($data); return safeExecute(api.result.OK($result), () => onSuccess?.('uploadBlobOptNil', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -979,15 +987,19 @@ function fnDownloadFile(props: ServiceProps): api.service } const $result = new File([$data], fileName, { type: $data.type }); return safeExecute(api.result.OK($result), () => onSuccess?.('downloadFile', $result)); - } else if ($response.status === 400) { - const $data = await decodeResponse($response, api.utils.isRecord); - const $result = api.model.ErrorDataFromJSON($data); - const err = { - _type: 'SampleErrorWithValue', - data: $result, - } as const; - return safeExecute(api.result.ERR(err), () => onError?.('downloadFile', err)); } + if ($response.status === 400) { + if($response.headers.get('X-RSD-Error-Type') === 'SampleErrorWithValue') { + const $data = await decodeResponse($response, api.utils.isRecord); + const $result = api.model.ErrorDataFromJSON($data); + const err = { + _type: 'SampleErrorWithValue', + data: $result, + } as const; + return safeExecute(api.result.ERR(err), () => onError?.('downloadFile', err)); + } + } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -1019,15 +1031,19 @@ function fnDownloadBlob(props: ServiceProps): api.service const $data = await $response.blob(); const $result = $data; return safeExecute(api.result.OK($result), () => onSuccess?.('downloadBlob', $result)); - } else if ($response.status === 400) { - const $data = await decodeResponse($response, api.utils.isRecord); - const $result = api.model.ErrorDataFromJSON($data); - const err = { - _type: 'SampleErrorWithValue', - data: $result, - } as const; - return safeExecute(api.result.ERR(err), () => onError?.('downloadBlob', err)); } + if ($response.status === 400) { + if($response.headers.get('X-RSD-Error-Type') === 'SampleErrorWithValue') { + const $data = await decodeResponse($response, api.utils.isRecord); + const $result = api.model.ErrorDataFromJSON($data); + const err = { + _type: 'SampleErrorWithValue', + data: $result, + } as const; + return safeExecute(api.result.ERR(err), () => onError?.('downloadBlob', err)); + } + } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { diff --git a/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client/src/services/ListSampleServiceServiceFetchImpl.ts b/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client/src/services/ListSampleServiceServiceFetchImpl.ts index b5ca201b..fff9a9af 100644 --- a/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client/src/services/ListSampleServiceServiceFetchImpl.ts +++ b/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client/src/services/ListSampleServiceServiceFetchImpl.ts @@ -43,6 +43,7 @@ function fnListBoolean(props: ServiceProps): api.service. const $result = $data.map(RSDBooleanFromJSON); return safeExecute(api.result.OK($result), () => onSuccess?.('listBoolean', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -75,6 +76,7 @@ function fnListShort(props: ServiceProps): api.service.Li const $result = $data.map(RSDShortFromJSON); return safeExecute(api.result.OK($result), () => onSuccess?.('listShort', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -107,6 +109,7 @@ function fnListInt(props: ServiceProps): api.service.List const $result = $data.map(RSDIntFromJSON); return safeExecute(api.result.OK($result), () => onSuccess?.('listInt', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -139,6 +142,7 @@ function fnListLong(props: ServiceProps): api.service.Lis const $result = $data.map(RSDLongFromJSON); return safeExecute(api.result.OK($result), () => onSuccess?.('listLong', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -171,6 +175,7 @@ function fnListFloat(props: ServiceProps): api.service.Li const $result = $data.map(RSDFloatFromJSON); return safeExecute(api.result.OK($result), () => onSuccess?.('listFloat', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -203,6 +208,7 @@ function fnListDouble(props: ServiceProps): api.service.L const $result = $data.map(RSDDoubleFromJSON); return safeExecute(api.result.OK($result), () => onSuccess?.('listDouble', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -235,6 +241,7 @@ function fnListString(props: ServiceProps): api.service.L const $result = $data.map(RSDStringFromJSON); return safeExecute(api.result.OK($result), () => onSuccess?.('listString', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -267,6 +274,7 @@ function fnListLocalDate(props: ServiceProps): api.servic const $result = $data.map(RSDLocalDateFromJSON); return safeExecute(api.result.OK($result), () => onSuccess?.('listLocalDate', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -299,6 +307,7 @@ function fnListLocalDateTime(props: ServiceProps): api.se const $result = $data.map(RSDLocalDateTimeFromJSON); return safeExecute(api.result.OK($result), () => onSuccess?.('listLocalDateTime', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -331,6 +340,7 @@ function fnListLocalTime(props: ServiceProps): api.servic const $result = $data.map(RSDLocalTimeFromJSON); return safeExecute(api.result.OK($result), () => onSuccess?.('listLocalTime', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -363,6 +373,7 @@ function fnListOffsetDateTime(props: ServiceProps): api.s const $result = $data.map(RSDOffsetDateTimeFromJSON); return safeExecute(api.result.OK($result), () => onSuccess?.('listOffsetDateTime', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -395,6 +406,7 @@ function fnListZonedDateTime(props: ServiceProps): api.se const $result = $data.map(RSDZonedDateTimeFromJSON); return safeExecute(api.result.OK($result), () => onSuccess?.('listZonedDateTime', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -427,6 +439,7 @@ function fnListScalar(props: ServiceProps): api.service.L const $result = $data.map(api.model.ZoneIdFromJSON); return safeExecute(api.result.OK($result), () => onSuccess?.('listScalar', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -459,6 +472,7 @@ function fnListEnum(props: ServiceProps): api.service.Lis const $result = $data.map(api.model.SampleEnumFromJSON); return safeExecute(api.result.OK($result), () => onSuccess?.('listEnum', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -491,6 +505,7 @@ function fnListSimpleRecord(props: ServiceProps): api.ser const $result = $data.map(api.model.SimpleRecordFromJSON); return safeExecute(api.result.OK($result), () => onSuccess?.('listSimpleRecord', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -522,13 +537,17 @@ function fnListSimpleRecordWithError(props: ServiceProps) const $data = await decodeResponse($response, v => api.utils.isTypedArray(v, api.utils.isRecord)); const $result = $data.map(api.model.SimpleRecordFromJSON); return safeExecute(api.result.OK($result), () => onSuccess?.('listSimpleRecordWithError', $result)); - } else if ($response.status === 400) { - const err = { - _type: 'SampleError', - message: await $response.text(), - } as const; - return safeExecute(api.result.ERR(err), () => onError?.('listSimpleRecordWithError', err)); } + if ($response.status === 400) { + if($response.headers.get('X-RSD-Error-Type') === 'SampleError') { + const err = { + _type: 'SampleError', + message: await $response.text(), + } as const; + return safeExecute(api.result.ERR(err), () => onError?.('listSimpleRecordWithError', err)); + } + } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { diff --git a/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client/src/services/PathParameterTypeServiceServiceFetchImpl.ts b/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client/src/services/PathParameterTypeServiceServiceFetchImpl.ts index f56ef38e..f36ba47a 100644 --- a/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client/src/services/PathParameterTypeServiceServiceFetchImpl.ts +++ b/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client/src/services/PathParameterTypeServiceServiceFetchImpl.ts @@ -42,6 +42,7 @@ function fnSimpleBooleanPathParam(props: ServiceProps): a const $result = RSDBooleanFromJSON($data); return safeExecute(api.result.OK($result), () => onSuccess?.('simpleBooleanPathParam', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -74,6 +75,7 @@ function fnSimpleShortPathParam(props: ServiceProps): api const $result = RSDShortFromJSON($data); return safeExecute(api.result.OK($result), () => onSuccess?.('simpleShortPathParam', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -106,6 +108,7 @@ function fnSimpleIntPathParam(props: ServiceProps): api.s const $result = RSDIntFromJSON($data); return safeExecute(api.result.OK($result), () => onSuccess?.('simpleIntPathParam', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -138,6 +141,7 @@ function fnSimpleLongPathParam(props: ServiceProps): api. const $result = RSDLongFromJSON($data); return safeExecute(api.result.OK($result), () => onSuccess?.('simpleLongPathParam', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -170,6 +174,7 @@ function fnSimpleFloatPathParam(props: ServiceProps): api const $result = RSDFloatFromJSON($data); return safeExecute(api.result.OK($result), () => onSuccess?.('simpleFloatPathParam', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -202,6 +207,7 @@ function fnSimpleDoublePathParam(props: ServiceProps): ap const $result = RSDDoubleFromJSON($data); return safeExecute(api.result.OK($result), () => onSuccess?.('simpleDoublePathParam', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -234,6 +240,7 @@ function fnSimpleStringPathParam(props: ServiceProps): ap const $result = RSDStringFromJSON($data); return safeExecute(api.result.OK($result), () => onSuccess?.('simpleStringPathParam', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -266,6 +273,7 @@ function fnSimpleLocalDatePathParam(props: ServiceProps): const $result = RSDLocalDateFromJSON($data); return safeExecute(api.result.OK($result), () => onSuccess?.('simpleLocalDatePathParam', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -298,6 +306,7 @@ function fnSimpleLocalDateTimePathParam(props: ServiceProps onSuccess?.('simpleLocalDateTimePathParam', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -330,6 +339,7 @@ function fnSimpleLocalTimePathParam(props: ServiceProps): const $result = RSDLocalTimeFromJSON($data); return safeExecute(api.result.OK($result), () => onSuccess?.('simpleLocalTimePathParam', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -362,6 +372,7 @@ function fnSimpleOffsetDateTimePathParam(props: ServiceProps onSuccess?.('simpleOffsetDateTimePathParam', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -394,6 +405,7 @@ function fnSimpleZonedDateTimePathParam(props: ServiceProps onSuccess?.('simpleZonedDateTimePathParam', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -426,6 +438,7 @@ function fnSimpleScalarPathParam(props: ServiceProps): ap const $result = api.model.ZoneIdFromJSON($data); return safeExecute(api.result.OK($result), () => onSuccess?.('simpleScalarPathParam', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -458,6 +471,7 @@ function fnSimpleEnumPathParam(props: ServiceProps): api. const $result = api.model.SampleEnumFromJSON($data); return safeExecute(api.result.OK($result), () => onSuccess?.('simpleEnumPathParam', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -490,6 +504,7 @@ function fnMultiPathParam(props: ServiceProps): api.servi const $result = RSDStringFromJSON($data); return safeExecute(api.result.OK($result), () => onSuccess?.('multiPathParam', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { diff --git a/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client/src/services/SampleServiceServiceFetchImpl.ts b/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client/src/services/SampleServiceServiceFetchImpl.ts index 3eedc8c9..49e6df2a 100644 --- a/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client/src/services/SampleServiceServiceFetchImpl.ts +++ b/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client/src/services/SampleServiceServiceFetchImpl.ts @@ -53,6 +53,7 @@ function fnGetBoolean(props: ServiceProps): api.service.S const $result = RSDBooleanFromJSON($data); return safeExecute(api.result.OK($result), () => onSuccess?.('getBoolean', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -85,6 +86,7 @@ function fnGetShort(props: ServiceProps): api.service.Sam const $result = RSDShortFromJSON($data); return safeExecute(api.result.OK($result), () => onSuccess?.('getShort', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -117,6 +119,7 @@ function fnGetInt(props: ServiceProps): api.service.Sampl const $result = RSDIntFromJSON($data); return safeExecute(api.result.OK($result), () => onSuccess?.('getInt', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -149,6 +152,7 @@ function fnGetLong(props: ServiceProps): api.service.Samp const $result = RSDLongFromJSON($data); return safeExecute(api.result.OK($result), () => onSuccess?.('getLong', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -181,6 +185,7 @@ function fnGetFloat(props: ServiceProps): api.service.Sam const $result = RSDFloatFromJSON($data); return safeExecute(api.result.OK($result), () => onSuccess?.('getFloat', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -213,6 +218,7 @@ function fnGetDouble(props: ServiceProps): api.service.Sa const $result = RSDDoubleFromJSON($data); return safeExecute(api.result.OK($result), () => onSuccess?.('getDouble', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -245,6 +251,7 @@ function fnGetString(props: ServiceProps): api.service.Sa const $result = RSDStringFromJSON($data); return safeExecute(api.result.OK($result), () => onSuccess?.('getString', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -277,6 +284,7 @@ function fnGetLocalDate(props: ServiceProps): api.service const $result = RSDLocalDateFromJSON($data); return safeExecute(api.result.OK($result), () => onSuccess?.('getLocalDate', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -309,6 +317,7 @@ function fnGetLocalDateTime(props: ServiceProps): api.ser const $result = RSDLocalDateTimeFromJSON($data); return safeExecute(api.result.OK($result), () => onSuccess?.('getLocalDateTime', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -341,6 +350,7 @@ function fnGetLocalTime(props: ServiceProps): api.service const $result = RSDLocalTimeFromJSON($data); return safeExecute(api.result.OK($result), () => onSuccess?.('getLocalTime', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -373,6 +383,7 @@ function fnGetOffsetDateTime(props: ServiceProps): api.se const $result = RSDOffsetDateTimeFromJSON($data); return safeExecute(api.result.OK($result), () => onSuccess?.('getOffsetDateTime', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -405,6 +416,7 @@ function fnGetZonedDateTime(props: ServiceProps): api.ser const $result = RSDZonedDateTimeFromJSON($data); return safeExecute(api.result.OK($result), () => onSuccess?.('getZonedDateTime', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -437,6 +449,7 @@ function fnGetScalar(props: ServiceProps): api.service.Sa const $result = api.model.ZoneIdFromJSON($data); return safeExecute(api.result.OK($result), () => onSuccess?.('getScalar', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -469,6 +482,7 @@ function fnGetEnum(props: ServiceProps): api.service.Samp const $result = api.model.SampleEnumFromJSON($data); return safeExecute(api.result.OK($result), () => onSuccess?.('getEnum', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -499,6 +513,7 @@ function fnVoidOperation(props: ServiceProps): api.servic if ($response.status === 204) { return safeExecute(api.result.OK(api.result.Void), () => onSuccess?.('voidOperation', api.result.Void)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -528,13 +543,17 @@ function fnErrorOperation(props: ServiceProps): api.servi if ($response.status === 200) { return safeExecute(api.result.OK(api.result.Void), () => onSuccess?.('errorOperation', api.result.Void)); - } else if ($response.status === 400) { - const err = { - _type: 'SampleError', - message: await $response.text(), - } as const; - return safeExecute(api.result.ERR(err), () => onError?.('errorOperation', err)); } + if ($response.status === 400) { + if($response.headers.get('X-RSD-Error-Type') === 'SampleError') { + const err = { + _type: 'SampleError', + message: await $response.text(), + } as const; + return safeExecute(api.result.ERR(err), () => onError?.('errorOperation', err)); + } + } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -564,19 +583,26 @@ function fnMultiErrorOperation(props: ServiceProps): api. if ($response.status === 200) { return safeExecute(api.result.OK(api.result.Void), () => onSuccess?.('multiErrorOperation', api.result.Void)); - } else if ($response.status === 400) { - const err = { - _type: 'SampleError', - message: await $response.text(), - } as const; - return safeExecute(api.result.ERR(err), () => onError?.('multiErrorOperation', err)); - } else if ($response.status === 401) { - const err = { - _type: 'SampleError2', - message: await $response.text(), - } as const; - return safeExecute(api.result.ERR(err), () => onError?.('multiErrorOperation', err)); } + if ($response.status === 400) { + if($response.headers.get('X-RSD-Error-Type') === 'SampleError') { + const err = { + _type: 'SampleError', + message: await $response.text(), + } as const; + return safeExecute(api.result.ERR(err), () => onError?.('multiErrorOperation', err)); + } + } + if ($response.status === 401) { + if($response.headers.get('X-RSD-Error-Type') === 'SampleError2') { + const err = { + _type: 'SampleError2', + message: await $response.text(), + } as const; + return safeExecute(api.result.ERR(err), () => onError?.('multiErrorOperation', err)); + } + } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -609,6 +635,7 @@ function fnGetSimpleRecord(props: ServiceProps): api.serv const $result = api.model.SimpleRecordFromJSON($data); return safeExecute(api.result.OK($result), () => onSuccess?.('getSimpleRecord', $result)); } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -640,13 +667,17 @@ function fnGetSimpleRecordWithError(props: ServiceProps): const $data = await decodeResponse($response, api.utils.isRecord); const $result = api.model.SimpleRecordFromJSON($data); return safeExecute(api.result.OK($result), () => onSuccess?.('getSimpleRecordWithError', $result)); - } else if ($response.status === 400) { - const err = { - _type: 'SampleError', - message: await $response.text(), - } as const; - return safeExecute(api.result.ERR(err), () => onError?.('getSimpleRecordWithError', err)); } + if ($response.status === 400) { + if($response.headers.get('X-RSD-Error-Type') === 'SampleError') { + const err = { + _type: 'SampleError', + message: await $response.text(), + } as const; + return safeExecute(api.result.ERR(err), () => onError?.('getSimpleRecordWithError', err)); + } + } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -676,15 +707,19 @@ function fnGetSimpleErrorWithValue(props: ServiceProps): if ($response.status === 204) { return safeExecute(api.result.OK(api.result.Void), () => onSuccess?.('getSimpleErrorWithValue', api.result.Void)); - } else if ($response.status === 400) { - const $data = await decodeResponse($response, api.utils.isRecord); - const $result = api.model.ErrorDataFromJSON($data); - const err = { - _type: 'SampleErrorWithValue', - data: $result, - } as const; - return safeExecute(api.result.ERR(err), () => onError?.('getSimpleErrorWithValue', err)); } + if ($response.status === 400) { + if($response.headers.get('X-RSD-Error-Type') === 'SampleErrorWithValue') { + const $data = await decodeResponse($response, api.utils.isRecord); + const $result = api.model.ErrorDataFromJSON($data); + const err = { + _type: 'SampleErrorWithValue', + data: $result, + } as const; + return safeExecute(api.result.ERR(err), () => onError?.('getSimpleErrorWithValue', err)); + } + } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -714,14 +749,18 @@ function fnGetSimpleErrorInt(props: ServiceProps): api.se if ($response.status === 204) { return safeExecute(api.result.OK(api.result.Void), () => onSuccess?.('getSimpleErrorInt', api.result.Void)); - } else if ($response.status === 400) { - const $result = await decodeResponse($response, isRSDInt); - const err = { - _type: 'SampleErrorInt', - data: $result, - } as const; - return safeExecute(api.result.ERR(err), () => onError?.('getSimpleErrorInt', err)); } + if ($response.status === 400) { + if($response.headers.get('X-RSD-Error-Type') === 'SampleErrorInt') { + const $result = await decodeResponse($response, isRSDInt); + const err = { + _type: 'SampleErrorInt', + data: $result, + } as const; + return safeExecute(api.result.ERR(err), () => onError?.('getSimpleErrorInt', err)); + } + } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -751,14 +790,18 @@ function fnGetSimpleErrorBoolean(props: ServiceProps): ap if ($response.status === 204) { return safeExecute(api.result.OK(api.result.Void), () => onSuccess?.('getSimpleErrorBoolean', api.result.Void)); - } else if ($response.status === 400) { - const $result = await decodeResponse($response, isRSDBoolean); - const err = { - _type: 'SampleErrorBoolean', - data: $result, - } as const; - return safeExecute(api.result.ERR(err), () => onError?.('getSimpleErrorBoolean', err)); } + if ($response.status === 400) { + if($response.headers.get('X-RSD-Error-Type') === 'SampleErrorBoolean') { + const $result = await decodeResponse($response, isRSDBoolean); + const err = { + _type: 'SampleErrorBoolean', + data: $result, + } as const; + return safeExecute(api.result.ERR(err), () => onError?.('getSimpleErrorBoolean', err)); + } + } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -788,14 +831,18 @@ function fnGetSimpleErrorEnum(props: ServiceProps): api.s if ($response.status === 204) { return safeExecute(api.result.OK(api.result.Void), () => onSuccess?.('getSimpleErrorEnum', api.result.Void)); - } else if ($response.status === 400) { - const $result = await decodeResponse($response, api.model.isSampleEnum); - const err = { - _type: 'SampleErrorEnum', - data: $result, - } as const; - return safeExecute(api.result.ERR(err), () => onError?.('getSimpleErrorEnum', err)); } + if ($response.status === 400) { + if($response.headers.get('X-RSD-Error-Type') === 'SampleErrorEnum') { + const $result = await decodeResponse($response, api.model.isSampleEnum); + const err = { + _type: 'SampleErrorEnum', + data: $result, + } as const; + return safeExecute(api.result.ERR(err), () => onError?.('getSimpleErrorEnum', err)); + } + } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -825,15 +872,19 @@ function fnGetSimpleErrorScalar(props: ServiceProps): api if ($response.status === 204) { return safeExecute(api.result.OK(api.result.Void), () => onSuccess?.('getSimpleErrorScalar', api.result.Void)); - } else if ($response.status === 400) { - const $data = await decodeResponse($response, api.utils.isString); - const $result = api.model.ZoneIdFromJSON($data); - const err = { - _type: 'SampleErrorScalar', - data: $result, - } as const; - return safeExecute(api.result.ERR(err), () => onError?.('getSimpleErrorScalar', err)); } + if ($response.status === 400) { + if($response.headers.get('X-RSD-Error-Type') === 'SampleErrorScalar') { + const $data = await decodeResponse($response, api.utils.isString); + const $result = api.model.ZoneIdFromJSON($data); + const err = { + _type: 'SampleErrorScalar', + data: $result, + } as const; + return safeExecute(api.result.ERR(err), () => onError?.('getSimpleErrorScalar', err)); + } + } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -863,15 +914,19 @@ function fnGetSimpleErrorUnion(props: ServiceProps): api. if ($response.status === 204) { return safeExecute(api.result.OK(api.result.Void), () => onSuccess?.('getSimpleErrorUnion', api.result.Void)); - } else if ($response.status === 400) { - const $data = await decodeResponse($response, api.utils.isRecord); - const $result = api.model.UnionFromJSON($data); - const err = { - _type: 'SampleErrorUnion', - data: $result, - } as const; - return safeExecute(api.result.ERR(err), () => onError?.('getSimpleErrorUnion', err)); } + if ($response.status === 400) { + if($response.headers.get('X-RSD-Error-Type') === 'SampleErrorUnion') { + const $data = await decodeResponse($response, api.utils.isRecord); + const $result = api.model.UnionFromJSON($data); + const err = { + _type: 'SampleErrorUnion', + data: $result, + } as const; + return safeExecute(api.result.ERR(err), () => onError?.('getSimpleErrorUnion', err)); + } + } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { @@ -903,27 +958,37 @@ function fnMultiErrorSameCode(props: ServiceProps): api.s if ($response.status === 204) { return safeExecute(api.result.OK(api.result.Void), () => onSuccess?.('multiErrorSameCode', api.result.Void)); - } else if ($response.status === 400) { - const err = { - _type: 'SampleError', - message: await $response.text(), - } as const; - return safeExecute(api.result.ERR(err), () => onError?.('multiErrorSameCode', err)); - } else if ($response.status === 400) { - const err = { - _type: 'SampleError2', - message: await $response.text(), - } as const; - return safeExecute(api.result.ERR(err), () => onError?.('multiErrorSameCode', err)); - } else if ($response.status === 400) { - const $data = await decodeResponse($response, api.utils.isRecord); - const $result = api.model.ErrorDataFromJSON($data); - const err = { - _type: 'SampleErrorWithValue', - data: $result, - } as const; - return safeExecute(api.result.ERR(err), () => onError?.('multiErrorSameCode', err)); } + if ($response.status === 400) { + if($response.headers.get('X-RSD-Error-Type') === 'SampleError') { + const err = { + _type: 'SampleError', + message: await $response.text(), + } as const; + return safeExecute(api.result.ERR(err), () => onError?.('multiErrorSameCode', err)); + } + } + if ($response.status === 400) { + if($response.headers.get('X-RSD-Error-Type') === 'SampleError2') { + const err = { + _type: 'SampleError2', + message: await $response.text(), + } as const; + return safeExecute(api.result.ERR(err), () => onError?.('multiErrorSameCode', err)); + } + } + if ($response.status === 400) { + if($response.headers.get('X-RSD-Error-Type') === 'SampleErrorWithValue') { + const $data = await decodeResponse($response, api.utils.isRecord); + const $result = api.model.ErrorDataFromJSON($data); + const err = { + _type: 'SampleErrorWithValue', + data: $result, + } as const; + return safeExecute(api.result.ERR(err), () => onError?.('multiErrorSameCode', err)); + } + } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { diff --git a/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client/src/services/ScalarSubstition_ServiceServiceFetchImpl.ts b/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client/src/services/ScalarSubstition_ServiceServiceFetchImpl.ts index 95a7cf42..ffd57dc6 100644 --- a/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client/src/services/ScalarSubstition_ServiceServiceFetchImpl.ts +++ b/dsl/packages/cli/test/test-specs/gen-out/client/typescript-client/src/services/ScalarSubstition_ServiceServiceFetchImpl.ts @@ -961,15 +961,19 @@ function fnFail(props: ServiceProps): api.service.ScalarS if ($response.status === 200) { return safeExecute(api.result.OK(api.result.Void), () => onSuccess?.('fail', api.result.Void)); - } else if ($response.status === 400) { - const $data = await decodeResponse($response, api.utils.isString); - const $result = api.model.RangeFromJSON($data); - const err = { - _type: 'SampleErrorScalarSub', - data: $result, - } as const; - return safeExecute(api.result.ERR(err), () => onError?.('fail', err)); } + if ($response.status === 400) { + if($response.headers.get('X-RSD-Error-Type') === 'SampleErrorScalarSub') { + const $data = await decodeResponse($response, api.utils.isString); + const $result = api.model.RangeFromJSON($data); + const err = { + _type: 'SampleErrorScalarSub', + data: $result, + } as const; + return safeExecute(api.result.ERR(err), () => onError?.('fail', err)); + } + } + const err = { _type: '_Status', message: await $response.text(), status: $response.status } as const; return api.result.ERR(err); } catch (e) { diff --git a/dsl/packages/cli/test/test-specs/gen-out/openapi/openapi.json b/dsl/packages/cli/test/test-specs/gen-out/openapi/openapi.json index dae6d92a..6800f84d 100644 --- a/dsl/packages/cli/test/test-specs/gen-out/openapi/openapi.json +++ b/dsl/packages/cli/test/test-specs/gen-out/openapi/openapi.json @@ -401,6 +401,20 @@ }, "400": { "description": "", + "headers": { + "X-RSD-Error-Type": { + "description": "Contains the type information for the error transferred in the response body", + "schema": { + "type": "string" + } + }, + "X-RSD-Error-Message": { + "description": "Contains the error message for the error transferred in the response body", + "schema": { + "type": "string" + } + } + }, "content": { "application/json": { "schema": { @@ -426,6 +440,20 @@ }, "400": { "description": "", + "headers": { + "X-RSD-Error-Type": { + "description": "Contains the type information for the error transferred in the response body", + "schema": { + "type": "string" + } + }, + "X-RSD-Error-Message": { + "description": "Contains the error message for the error transferred in the response body", + "schema": { + "type": "string" + } + } + }, "content": { "application/json": { "schema": { @@ -436,6 +464,20 @@ }, "401": { "description": "", + "headers": { + "X-RSD-Error-Type": { + "description": "Contains the type information for the error transferred in the response body", + "schema": { + "type": "string" + } + }, + "X-RSD-Error-Message": { + "description": "Contains the error message for the error transferred in the response body", + "schema": { + "type": "string" + } + } + }, "content": { "application/json": { "schema": { @@ -510,6 +552,20 @@ }, "400": { "description": "", + "headers": { + "X-RSD-Error-Type": { + "description": "Contains the type information for the error transferred in the response body", + "schema": { + "type": "string" + } + }, + "X-RSD-Error-Message": { + "description": "Contains the error message for the error transferred in the response body", + "schema": { + "type": "string" + } + } + }, "content": { "application/json": { "schema": { @@ -535,6 +591,20 @@ }, "400": { "description": "", + "headers": { + "X-RSD-Error-Type": { + "description": "Contains the type information for the error transferred in the response body", + "schema": { + "type": "string" + } + }, + "X-RSD-Error-Message": { + "description": "Contains the error message for the error transferred in the response body", + "schema": { + "type": "string" + } + } + }, "content": { "application/json": { "schema": { @@ -560,6 +630,20 @@ }, "400": { "description": "", + "headers": { + "X-RSD-Error-Type": { + "description": "Contains the type information for the error transferred in the response body", + "schema": { + "type": "string" + } + }, + "X-RSD-Error-Message": { + "description": "Contains the error message for the error transferred in the response body", + "schema": { + "type": "string" + } + } + }, "content": { "application/json": { "schema": { @@ -586,6 +670,20 @@ }, "400": { "description": "", + "headers": { + "X-RSD-Error-Type": { + "description": "Contains the type information for the error transferred in the response body", + "schema": { + "type": "string" + } + }, + "X-RSD-Error-Message": { + "description": "Contains the error message for the error transferred in the response body", + "schema": { + "type": "string" + } + } + }, "content": { "application/json": { "schema": { @@ -611,6 +709,20 @@ }, "400": { "description": "", + "headers": { + "X-RSD-Error-Type": { + "description": "Contains the type information for the error transferred in the response body", + "schema": { + "type": "string" + } + }, + "X-RSD-Error-Message": { + "description": "Contains the error message for the error transferred in the response body", + "schema": { + "type": "string" + } + } + }, "content": { "application/json": { "schema": { @@ -636,6 +748,20 @@ }, "400": { "description": "", + "headers": { + "X-RSD-Error-Type": { + "description": "Contains the type information for the error transferred in the response body", + "schema": { + "type": "string" + } + }, + "X-RSD-Error-Message": { + "description": "Contains the error message for the error transferred in the response body", + "schema": { + "type": "string" + } + } + }, "content": { "application/json": { "schema": { @@ -661,6 +787,20 @@ }, "400": { "description": "", + "headers": { + "X-RSD-Error-Type": { + "description": "Contains the type information for the error transferred in the response body", + "schema": { + "type": "string" + } + }, + "X-RSD-Error-Message": { + "description": "Contains the error message for the error transferred in the response body", + "schema": { + "type": "string" + } + } + }, "content": { "application/json": { "schema": { @@ -697,10 +837,31 @@ }, "400": { "description": "", + "headers": { + "X-RSD-Error-Type": { + "description": "Contains the type information for the error transferred in the response body", + "schema": { + "type": "string" + } + }, + "X-RSD-Error-Message": { + "description": "Contains the error message for the error transferred in the response body", + "schema": { + "type": "string" + } + } + }, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorData" + "oneOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/ErrorData" + } + ] } } } @@ -1120,6 +1281,20 @@ }, "400": { "description": "", + "headers": { + "X-RSD-Error-Type": { + "description": "Contains the type information for the error transferred in the response body", + "schema": { + "type": "string" + } + }, + "X-RSD-Error-Message": { + "description": "Contains the error message for the error transferred in the response body", + "schema": { + "type": "string" + } + } + }, "content": { "application/json": { "schema": { @@ -15391,6 +15566,20 @@ }, "400": { "description": "", + "headers": { + "X-RSD-Error-Type": { + "description": "Contains the type information for the error transferred in the response body", + "schema": { + "type": "string" + } + }, + "X-RSD-Error-Message": { + "description": "Contains the error message for the error transferred in the response body", + "schema": { + "type": "string" + } + } + }, "content": { "application/json": { "schema": { @@ -15424,6 +15613,20 @@ }, "400": { "description": "", + "headers": { + "X-RSD-Error-Type": { + "description": "Contains the type information for the error transferred in the response body", + "schema": { + "type": "string" + } + }, + "X-RSD-Error-Message": { + "description": "Contains the error message for the error transferred in the response body", + "schema": { + "type": "string" + } + } + }, "content": { "application/json": { "schema": { @@ -16321,6 +16524,20 @@ }, "400": { "description": "", + "headers": { + "X-RSD-Error-Type": { + "description": "Contains the type information for the error transferred in the response body", + "schema": { + "type": "string" + } + }, + "X-RSD-Error-Message": { + "description": "Contains the error message for the error transferred in the response body", + "schema": { + "type": "string" + } + } + }, "content": { "application/json": { "schema": { From e27968a73f995f0d58d74e34ade4e874dcb34c6b Mon Sep 17 00:00:00 2001 From: Tom Schindl Date: Thu, 25 Jun 2026 21:53:58 +0200 Subject: [PATCH 3/3] 70 - remove dead code --- dsl/packages/cli/src/open-api/service.ts | 52 ------------------------ 1 file changed, 52 deletions(-) diff --git a/dsl/packages/cli/src/open-api/service.ts b/dsl/packages/cli/src/open-api/service.ts index 04738ae0..c7db5cc9 100644 --- a/dsl/packages/cli/src/open-api/service.ts +++ b/dsl/packages/cli/src/open-api/service.ts @@ -110,58 +110,6 @@ export function generateService(s: MResolvedService): Record { .filter(r => r.error === undefined) .forEach(r => { handleResultType(r.statusCode); - /*if (r.error) { - const error = o.resolved.errors.find(e => e.name === r.error); - if (error?.resolvedContentType) { - if ( - isMRecordType(error.resolvedContentType) || - isMUnionType(error.resolvedContentType) || - isMEnumType(error.resolvedContentType) - ) { - responses[r.statusCode] = { - description: '', - content: { - 'application/json': { - schema: { - $ref: `#/components/schemas/${error.resolvedContentType.name}`, - }, - }, - }, - }; - } else if (isMBuiltinType(error.resolvedContentType)) { - responses[r.statusCode] = { - description: '', - content: { - 'application/json': { - schema: generateBuilinProperty(error.resolvedContentType), - }, - }, - }; - } else { - responses[r.statusCode] = { - description: '', - content: { - 'application/json': { - schema: { - type: 'string', - }, - }, - }, - }; - } - } else { - responses[r.statusCode] = { - description: '', - content: { - 'application/json': { - schema: { - type: 'string', - }, - }, - }, - }; - } - }*/ }); errorsByCode.forEach((errors, code) => { responses[code] = {