Skip to content

Conversation

@the-eater
Copy link
Contributor

This fixed inline value classes not being processed as a ByteString, by checking inside encodeSerializableValue and decodeSerializableValue to see if the current descriptor is marked as inline and with @ByteString

this is as far as I understand the most viable way to do it

@the-eater the-eater force-pushed the cbor/fix-inline-bytestring branch from 6838fd8 to dfee01c Compare October 6, 2023 10:11
@sandwwraith sandwwraith self-requested a review October 18, 2023 14:12

private fun SerialDescriptor.isInlineByteString(): Boolean {
// inline item classes should only have 1 item
return isInline && isByteString(0)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, this is a correct way to do it

@Suppress("UNCHECKED_CAST")
decoder.nextByteString() as T
} else {
decodeByteArrayAsByteString = decodeByteArrayAsByteString || deserializer.descriptor.isInlineByteString()
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks a bit suspicious. If the current descriptor is not a ByteArraySerializer().descriptor and not a value class over @ByteString ByteArray, why we should still try to decode it as ByteArray?

If this is to support cases when value class property is not annotated itself, like this:

@Serializable data class Outer(@ByteString val i: InnerValue)

@Serializable 
@JvmInline value class InnerValue(val b: ByteArray)

Then I don't see tests for it.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

oh good point, yes that was the intended outcome! I'm not sure if that is wanted, but I can see how it might be unwanted? I guess I could probably expose it as an option in the serializer?

I will add the tests anyhow :)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tests added

Copy link
Member

@sandwwraith sandwwraith Oct 18, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure if that is wanted

I'm also unsure because I didn't see any requests for that. At the first look, it sounds reasonable, but I do not use byte strings that often

@the-eater the-eater force-pushed the cbor/fix-inline-bytestring branch from 35e57ef to 6292f2c Compare October 18, 2023 15:07
Copy link
Member

@sandwwraith sandwwraith left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you!

@sandwwraith sandwwraith merged commit bfbe6a9 into Kotlin:dev Oct 20, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants