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") } } }