moko-network icon indicating copy to clipboard operation
moko-network copied to clipboard

Improper error handling for method with no return type

Open dalewking opened this issue 2 years ago • 5 comments

We have a delete call for an endpoint. So in the apI it is defined as a delete call so the key parts of the swagger are:

      "delete" : {
         ...
        "produces" : [ "application/json" ],
        "parameters" : [ {
          "name" : "deviceToken",
          "in" : "query",
          "description" : "Device token for app.",
          "required" : true,
          "type" : "string"
        } ],
        "responses" : {
          "204" : {
            "description" : "Success was deleted"
          },
          "400" : {
            "description" : "The request could not be understood by the server due to malformed syntax.",
            "schema" : {
              "$ref" : "#/definitions/ErrorBody"
            },
            "x-inin-error-codes" : {
              "bad.request" : "The request could not be understood by the server due to malformed syntax.",
              "response.entity.too.large" : "The response is over the size limit. Reduce pageSize or expand list to reduce response size if applicable"
            }
          },

So there is no actual data returned on success just a 204 status code. Errors can have a body though

The code that is generated looks something like this:

    override public open suspend fun deleteFoo(deviceToken: kotlin.String) : kotlin.Unit {
        try {
            deleteNotificationsPushRegistrationsResponse(deviceToken)
        } catch (pipeline: ReceivePipelineException) {
            throw pipeline.cause
        }
    }

    override public open suspend fun deleteFooResponse(deviceToken: kotlin.String) : kotlin.Unit {
        val builder = HttpRequestBuilder()

        .../

        with(builder.headers) {
            append("Accept", "application/json")
        }

        val response = _httpClient.request(builder)

    }

My initial complaint is that generates a warning when compiled about Variable 'response' is never used

But in reality isn't this code not going to handle error codes? Won't it eat the error and just always return unit?

Shouldn't the Response method return a NetworkResponse<Unit>? The end of the response method could be something like:

        val response = _httpClient.request(builder)

        return NetworkResponse(
            httpResponse = response,
            bodyReader = { Unit }
        )

dalewking avatar Jul 27 '23 19:07 dalewking

Can I try to work on this?

Code-indomitus avatar Oct 11 '23 15:10 Code-indomitus

Can I try to work on this?

Yes! Please :)

Alex009 avatar Oct 11 '23 16:10 Alex009

Hi, I forked the repository and opened it in android studio. After building the project for some reason the platform and iOS-related imports are all marked red and "could not resolve reference" any idea how can I solve this? I am new to kotlin multiplatform actually.

Code-indomitus avatar Nov 14 '23 01:11 Code-indomitus

Hi, I forked the repository and opened it in android studio. After building the project for some reason the platform and iOS-related imports are all marked red and "could not resolve reference" any idea how can I solve this? I am new to kotlin multiplatform actually.

KMP iOS binding are currently only available on MacOS

H4kt avatar Jul 25 '24 13:07 H4kt

Any chance on this getting fixed?

H4kt avatar Jul 25 '24 13:07 H4kt