Active users by language preference: Java: 198 Kotlin: 213 Python: 197 Rust: 192
// Custom serializer for LocalDateTime object LocalDateTimeSerializer : KSerializer<LocalDateTime> { override val descriptor = PrimitiveSerialDescriptor("LocalDateTime", PrimitiveKind.STRING) override fun serialize(encoder: Encoder, value: LocalDateTime) = encoder.encodeString(value.toString()) override fun deserialize(decoder: Decoder): LocalDateTime = LocalDateTime.parse(decoder.decodeString(), DateTimeFormatter.ISO_DATE_TIME) } fabric-language-kotlin
@Serializable data class User( @SerialName("user_id") val userId: String, @SerialName("full_name") val fullName: String, val email: String, val age: Int, @SerialName("signup_date") val signupDate: LocalDate, @SerialName("is_active") val isActive: Boolean, @SerialName("last_login") val lastLogin: LocalDateTime?, val preferences: Preferences, @SerialName("days_since_last_login") val daysSinceLastLogin: Int? = null ) Active users by language preference: Java: 198 Kotlin:
// 1. Active Kotlin users val activeKotlinUsers = users.filter { it.isActive && it.preferences.language == "Kotlin" } println("\nActive Kotlin users: ${activeKotlinUsers.size}") activeKotlinUsers.take(3).forEach { println(" - ${it.fullName} (${it.email})") } @SerialName("full_name") val fullName: String
fun main() { val json = Json { ignoreUnknownKeys = true isLenient = true coerceInputValues = true serializersModule = SerializersModule { contextual(LocalDate::class, LocalDateSerializer) contextual(LocalDateTime::class, LocalDateTimeSerializer) } }
Average days since last login: 6.2
plugins { kotlin("jvm") version "1.9.22" application } repositories { mavenCentral() }