Improve the error messaging when an enum is not parsed correctly (#4730)

This commit is contained in:
David Perez
2025-02-17 15:03:05 -06:00
committed by GitHub
parent 359dedc9d7
commit 22931bbd38
20 changed files with 59 additions and 28 deletions

View File

@@ -21,5 +21,7 @@ enum class AuthRequestTypeJson {
}
@Keep
private class AuthRequestTypeSerializer :
BaseEnumeratedIntSerializer<AuthRequestTypeJson>(AuthRequestTypeJson.entries.toTypedArray())
private class AuthRequestTypeSerializer : BaseEnumeratedIntSerializer<AuthRequestTypeJson>(
className = "AuthRequestTypeJson",
values = AuthRequestTypeJson.entries.toTypedArray(),
)

View File

@@ -18,5 +18,7 @@ enum class KdfTypeJson {
}
@Keep
private class KdfTypeSerializer :
BaseEnumeratedIntSerializer<KdfTypeJson>(KdfTypeJson.entries.toTypedArray())
private class KdfTypeSerializer : BaseEnumeratedIntSerializer<KdfTypeJson>(
className = "KdfTypeJson",
values = KdfTypeJson.entries.toTypedArray(),
)

View File

@@ -39,5 +39,7 @@ enum class TwoFactorAuthMethod(val value: UInt) {
}
@Keep
private class TwoFactorAuthMethodSerializer :
BaseEnumeratedIntSerializer<TwoFactorAuthMethod>(TwoFactorAuthMethod.entries.toTypedArray())
private class TwoFactorAuthMethodSerializer : BaseEnumeratedIntSerializer<TwoFactorAuthMethod>(
className = "TwoFactorAuthMethod",
values = TwoFactorAuthMethod.entries.toTypedArray(),
)

View File

@@ -15,6 +15,7 @@ import kotlinx.serialization.encoding.Encoder
*/
@Suppress("UnnecessaryAbstractClass")
abstract class BaseEnumeratedIntSerializer<T : Enum<T>>(
private val className: String,
private val values: Array<T>,
private val default: T? = null,
) : KSerializer<T> {
@@ -29,7 +30,7 @@ abstract class BaseEnumeratedIntSerializer<T : Enum<T>>(
val decodedValue = decoder.decodeInt().toString()
return values.firstOrNull { it.serialNameAnnotation?.value == decodedValue }
?: default
?: throw IllegalArgumentException("Unknown value $decodedValue")
?: throw IllegalArgumentException("Unknown value $decodedValue for $className")
}
override fun serialize(encoder: Encoder, value: T) {

View File

@@ -63,5 +63,7 @@ enum class NotificationType {
}
@Keep
private class NotificationTypeSerializer :
BaseEnumeratedIntSerializer<NotificationType>(NotificationType.entries.toTypedArray())
private class NotificationTypeSerializer : BaseEnumeratedIntSerializer<NotificationType>(
className = "NotificationType",
values = NotificationType.entries.toTypedArray(),
)

View File

@@ -130,5 +130,6 @@ enum class OrganizationEventType {
@Keep
private class OrganizationEventTypeSerializer : BaseEnumeratedIntSerializer<OrganizationEventType>(
className = "OrganizationEventType",
values = OrganizationEventType.entries.toTypedArray(),
)

View File

@@ -91,5 +91,6 @@ data class PasscodeGenerationOptions(
@Keep
private class PasscodeTypeSerializer :
BaseEnumeratedIntSerializer<PasscodeGenerationOptions.PasscodeType>(
PasscodeGenerationOptions.PasscodeType.entries.toTypedArray(),
className = "PasscodeGenerationOptions.PasscodeType",
values = PasscodeGenerationOptions.PasscodeType.entries.toTypedArray(),
)

View File

@@ -122,11 +122,13 @@ data class UsernameGenerationOptions(
@Keep
private class UsernameTypeSerializer :
BaseEnumeratedIntSerializer<UsernameGenerationOptions.UsernameType>(
UsernameGenerationOptions.UsernameType.entries.toTypedArray(),
className = "UsernameGenerationOptions.UsernameType",
values = UsernameGenerationOptions.UsernameType.entries.toTypedArray(),
)
@Keep
private class ForwardedEmailServiceTypeSerializer :
BaseEnumeratedIntSerializer<UsernameGenerationOptions.ForwardedEmailServiceType>(
UsernameGenerationOptions.ForwardedEmailServiceType.entries.toTypedArray(),
className = "UsernameGenerationOptions.ForwardedEmailServiceType",
values = UsernameGenerationOptions.ForwardedEmailServiceType.entries.toTypedArray(),
)

View File

@@ -25,5 +25,6 @@ enum class CipherRepromptTypeJson {
@Keep
private class CipherRepromptTypeSerializer : BaseEnumeratedIntSerializer<CipherRepromptTypeJson>(
CipherRepromptTypeJson.entries.toTypedArray(),
className = "CipherRepromptTypeJson",
values = CipherRepromptTypeJson.entries.toTypedArray(),
)

View File

@@ -42,5 +42,7 @@ enum class CipherTypeJson {
}
@Keep
private class CipherTypeSerializer :
BaseEnumeratedIntSerializer<CipherTypeJson>(CipherTypeJson.entries.toTypedArray())
private class CipherTypeSerializer : BaseEnumeratedIntSerializer<CipherTypeJson>(
className = "CipherTypeJson",
values = CipherTypeJson.entries.toTypedArray(),
)

View File

@@ -36,5 +36,7 @@ enum class FieldTypeJson {
}
@Keep
private class FieldTypeSerializer :
BaseEnumeratedIntSerializer<FieldTypeJson>(FieldTypeJson.entries.toTypedArray())
private class FieldTypeSerializer : BaseEnumeratedIntSerializer<FieldTypeJson>(
className = "FieldTypeJson",
values = FieldTypeJson.entries.toTypedArray(),
)

View File

@@ -19,5 +19,6 @@ enum class FileUploadType {
@Keep
private class FileUploadTypeSerializer : BaseEnumeratedIntSerializer<FileUploadType>(
FileUploadType.entries.toTypedArray(),
className = "FileUploadType",
values = FileUploadType.entries.toTypedArray(),
)

View File

@@ -180,5 +180,7 @@ enum class LinkedIdTypeJson(val value: UInt) {
}
@Keep
private class LinkedIdTypeSerializer :
BaseEnumeratedIntSerializer<LinkedIdTypeJson>(LinkedIdTypeJson.entries.toTypedArray())
private class LinkedIdTypeSerializer : BaseEnumeratedIntSerializer<LinkedIdTypeJson>(
className = "LinkedIdTypeJson",
values = LinkedIdTypeJson.entries.toTypedArray(),
)

View File

@@ -32,5 +32,6 @@ enum class OrganizationStatusType {
@Keep
private class OrganizationStatusTypeSerializer :
BaseEnumeratedIntSerializer<OrganizationStatusType>(
OrganizationStatusType.entries.toTypedArray(),
className = "OrganizationStatusType",
values = OrganizationStatusType.entries.toTypedArray(),
)

View File

@@ -43,5 +43,6 @@ enum class OrganizationType {
@Keep
private class OrganizationTypeSerializer : BaseEnumeratedIntSerializer<OrganizationType>(
OrganizationType.entries.toTypedArray(),
className = "OrganizationType",
values = OrganizationType.entries.toTypedArray(),
)

View File

@@ -100,6 +100,7 @@ enum class PolicyTypeJson {
@Keep
private class PolicyTypeSerializer : BaseEnumeratedIntSerializer<PolicyTypeJson>(
className = "PolicyTypeJson",
values = PolicyTypeJson.entries.toTypedArray(),
default = PolicyTypeJson.UNKNOWN,
)

View File

@@ -18,5 +18,7 @@ enum class SecureNoteTypeJson {
}
@Keep
private class SecureNoteTypeSerializer :
BaseEnumeratedIntSerializer<SecureNoteTypeJson>(SecureNoteTypeJson.entries.toTypedArray())
private class SecureNoteTypeSerializer : BaseEnumeratedIntSerializer<SecureNoteTypeJson>(
className = "SecureNoteTypeJson",
values = SecureNoteTypeJson.entries.toTypedArray(),
)

View File

@@ -24,5 +24,7 @@ enum class SendTypeJson {
}
@Keep
private class SendTypeSerializer :
BaseEnumeratedIntSerializer<SendTypeJson>(SendTypeJson.entries.toTypedArray())
private class SendTypeSerializer : BaseEnumeratedIntSerializer<SendTypeJson>(
className = "SendTypeJson",
values = SendTypeJson.entries.toTypedArray(),
)

View File

@@ -48,5 +48,7 @@ enum class UriMatchTypeJson {
}
@Keep
private class UriMatchTypeSerializer :
BaseEnumeratedIntSerializer<UriMatchTypeJson>(UriMatchTypeJson.entries.toTypedArray())
private class UriMatchTypeSerializer : BaseEnumeratedIntSerializer<UriMatchTypeJson>(
className = "UriMatchTypeJson",
values = UriMatchTypeJson.entries.toTypedArray(),
)

View File

@@ -62,6 +62,7 @@ private enum class TestEnum {
}
private class TestEnumSerializer : BaseEnumeratedIntSerializer<TestEnum>(
className = "TestEnum",
values = TestEnum.entries.toTypedArray(),
default = TestEnum.UNKNOWN,
)