Mappie has support for reusing mappers in other mappers using the via
operator. Mappie can also apply the via
operator automatically if only one mapper for the source- and target types exist.
Suppose we have a data class Person
containing a reference to a data class Address
data class Person(
val name: String,
val address: Address,
)
data class Address(
val street: String,
)
and we have the data class PersonDto
referencing the data class AddressDto
data class PersonDto(
val name: String,
val addressDto: AddressDto,
)
data class AddressDto(
val street: String,
)
We start by defining a mapper for Address
and AddressDto
object AddressMapper : ObjectMappie<Address, AddressDto>()
we can then reuse AddressMapper
to construct a mapper for Person
and PersonDto
by referencing AddressMapper
using
the operator via
object PersonMapper : ObjectMappie<Person, PersonDto>() {
override fun map(from: Address) = mapping {
to::addressDto fromProperty from::address via AddressMapper
}
}
Do note, that in this case, if PersonDto::addressDto
was named PersonDto::address
the mapping does not have to
be defined explicitly. Mappie will construct an implicit mapping using the via operator.
We can also use via
to map collections. See List & Sets.