[kotlin][client] bytearray conversion#2166
[kotlin][client] bytearray conversion#2166wing328 merged 4 commits intoOpenAPITools:masterfrom alexnavratil:kotlin-client-bytearray-conversion
Conversation
|
👍 Thanks for opening this issue! The team will review the labels and make any necessary changes. |
|
@alexnavratil great catch! If you have the type adapter, can we use that instead? The issue with changing the default mapping is that although it works, it's not technically correct. A savvy user might notice this, and remap via the |
|
good point, I have added the ByteArrayAdapter as promised. |
jimschubert
left a comment
There was a problem hiding this comment.
Looks excellent, thanks!
The failing CI build on this PR is due to bin/util/ensure-up-to-date failing (meaning the PR is behind master). It's all new code on this PR, so I think it's good to merge as-is. There's a master build queued atm, but I think this can be merged once that's done.
* master: (40 commits) [Python] remove default value from being fallback to example (#2213) Add petstore integration tests to Ruby OAS3 client (#2211) Gradle - make GenerateTask properties optional (#2185) skip bats installation (#2198) Something in the dependencies changed. This switch is no longer needed. (#1850) Use oauth token for basic bearer auth in Rust. (#2161) Fix missing nullable (#2189) Enable error handling in Java WebClient library, fixes #1243 (#1244) [core] fix referenced enum case (#2175) rest-template: allow array parameters in path using collectionFormat (#2177) update go petstore samples Fix string types for cpprestsdk client generator (#1676) update kotline samples Remove API Key Authentication code for go when cookie is used. (#1601) changed the package install instructions to install the .tgz package … (#1989) okhttp-gson: allow array parameters in path using collectionFormat (#2137) [Ruby] Fix regualr expression in error message (#2069) (#2139) [kotlin][client] bytearray conversion (#2166) [rust-server] Added client documentation to rust-server (#2159) [Java] Getter/Setter naming convention not followed in generated models (#2095) ...
* use kotlin.String for ByteArray fields (type: string, format: byte) * revert "use kotlin.String for ByteArray fields (type: string, format: byte)" * add ByteArrayAdapter for string <-> ByteArray conversion with moshi
|
Isn't this wrong? I think he openapi spec specifies that the string must be base64. Also encoding just a random bytearray as UTF-8 is very dangerous. |
PR checklist
./bin/to update Petstore sample so that CIs can verify the change. (For instance, only need to run./bin/{LANG}-petstore.sh,./bin/openapi3/{LANG}-petstore.sh,./bin/security/{LANG}-petstore.shand./bin/openapi3/security/{LANG}-petstore.shif updating the {LANG} (e.g. php, ruby, python, etc) code generator or {LANG} client's mustache templates). Windows batch files can be found in.\bin\windows\.master,. Default:3.4.x,4.0.xmaster.@jimschubert , @dr4ke616
Description of the PR
Moshi doesn't support parsing a base64 encoded string (as defined for fields with type: string, format: byte) to a kotlin.ByteArray. The simplest solution to overcome this limitation was to convert those fields to kotlin.String instead of kotlin.ByteArray. Another solution would be to write a custom type adapter for moshi to support string to ByteArray conversions. I have chosen the first method as this was the simplest for now. If there's something against it, I have already prepared a custom type adapter ;)
PS: There might be problems with converting fields of type number to BigDecimal as well as this isn't supported by moshi as far as I know. For this case, a custom type adapter is the only solution. If you think, it would be good to add this also in this PR, I would implement it.