Skip to content

Instantly share code, notes, and snippets.

@steliosfran
Created November 17, 2022 09:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save steliosfran/16dee90b6e6c6061e79869d82e652954 to your computer and use it in GitHub Desktop.
Save steliosfran/16dee90b6e6c6061e79869d82e652954 to your computer and use it in GitHub Desktop.
enum class Role(override val value: Int) : IEnumValue {
Admin(1),
Moderator(2)
}
object GenericEnumFactory {
inline fun <reified T> fromValueOrNull(rawValue: Int?): T? where T : Enum<T>, T : IEnumValue {
return enumValues<T>().firstOrNull { it.value == rawValue }
}
}
class RoleEnumJsonAdapter : JsonAdapter<Role>() {
@FromJson
override fun fromJson(reader: JsonReader): Role? {
return if (reader.peek() != JsonReader.Token.NULL) {
GenericEnumFactory.fromValueOrNull(reader.nextInt())
} else {
reader.nextNull()
}
}
@ToJson
override fun toJson(writer: JsonWriter, value: Role?) {
writer.value(value?.value)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment