Skip to content

wowselim/goldfinch

Repository files navigation

Goldfinch

Goldfinch generates kotlin code that lets you iterate over the properties of a class exhaustively.

This can be useful when implementing validation or custom serialization. The compile-time safety when combined with exhaustive when-statements guarantees that no properties are missed.

Getting started

Simply annotate a class with @GenerateProperties to enable code generation:

@GenerateProperties
data class Person(val name: String, val dateOfBirth: LocalDate)

To iterate over the properties of a Person you can use the generated extension property Person#properties like so:

val person = Person("Selim", LocalDate.of(1970, 1, 1))
person.properties
  .forEach { property ->
    val message = when (property) {
      is NameProperty -> "Name: ${property.name}"
      is DateOfBirthProperty -> {
        val currentYear = LocalDate.now()
        "Age: ${property.dateOfBirth.until(currentYear).years}"
      }
    }

    println(message)
  }

To see it in action, check out the example module.

Adding it to your project

Add the JitPack repository to your build script and include the following dependencies:

implementation 'com.github.wowselim.goldfinch:goldfinch-annotation:<latestVersion>'
ksp 'com.github.wowselim.goldfinch:goldfinch-codegen:<latestVersion>'

The latest version can be found in the releases section.