data class Trainer(
val name: String,
val visibleId: Int,
val secretId: Int
)
interface SaveData {
var trainer: Trainer
}
interface Pokemon {
val trainer: Trainer
}
interface MutablePokemon {
interface Mutator {
fun trainer(value: Trainer): Mutator
}
}
fun example(pokemon: MutablePokemon, saveData: SaveData) {
val trainer = saveData.trainer
// replace only the trainer name
pokemon.mutator.trainer(pokemon.trainer.copy(name = trainer.name))
}