package main data class AddressEntity(var city: String) data class AddressResponse(var city: String) enum EntityState { Active Failed(String) } enum ResponseState { Active Failed(String) Pending } data class AccountEntity( var id: String, var address: *AddressEntity, var labels: List, var state: EntityState ) data class AccountResponse( var address: *AddressResponse, var id: String, var labels: List, var state: ResponseState ) fun main() { val entity = AccountEntity("account-1", AddressEntity("Berlin"), listOf("active"), EntityState::Active) val response = entity.mapTo() println(response.address.city) match (response.state) { ResponseState::Active -> { println("active") } ResponseState::Failed(reason) -> { println(reason) } ResponseState::Pending -> { println("pending") } } }