
Annotations enabling compile-time generation of mappers between data models, with property renaming, default values, custom mapping functions, parent-based mapping, opt-ins and visibility control.
This package provides annotation definitions for the AutoMapper KSP Processor, allowing automatic mapping generation between Kotlin classes for Kotlin Multiplatform, Android, and * iOS*.
It includes:
implementation("io.github.the-best-is-best:automapper-annotations:1.0.0-rc.1")
Add KSP processor:
ksp("io.github.the-best-is-best:automapper-processor:1.0.0-rc.1")
./gradlew composeApp:kspCommonMainKotlinMetadata
annotation class AutoMapper(
val to: KClass<*>,
val optIns: Array<String> = [],
val ignoreKeys: Array<String> = [],
val forcePublic: Boolean = false,
val defaultValues: Array<DefaultValue> = [],
val reverse: Boolean = false // available when use reverse version
)annotation class DefaultValue(
val key: String,
val value: String
)
annotation class AutoMapperName(val to: String)
annotation class AutoMapperCustom(
val mapperFunction: String,
val reverseMapperFunction: String = "" // available when use reverse version
)
annotation class AutoMapperCustomFromParent(
val mapperFunction: String,
val reverseMapperFunction: String = "" // available when use reverse version
)
annotation class AutoMapperAddOptIns(val value: Array<String>)
id("com.google.devtools.ksp")
kotlin {
androidTarget {
compilerOptions { jvmTarget.set(JvmTarget.JVM_17) }
}
listOf(iosArm64(), iosSimulatorArm64()).forEach { ios ->
ios.binaries.framework {
baseName = "ComposeApp"
isStatic = true
}
}
sourceSets.named("commonMain").configure {
kotlin.srcDir("build/generated/ksp/metadata/commonMain/kotlin")
}
}
dependencies {
ksp(projects.automapperProcessor)
}
ksp {
// auto mapper
arg("autoMapperVisibility", "false")
}
project.tasks.withType(KotlinCompilationTask::class.java).configureEach {
if (name != "kspCommonMainKotlinMetadata") {
dependsOn("kspCommonMainKotlinMetadata")
}
}project.tasks.withType(KspAATask::class.java).configureEach {
if (name != "kspCommonMainKotlinMetadata") {
if (name == "kspDebugKotlinAndroid") enabled = false
if (name == "kspReleaseKotlinAndroid") enabled = false
if (name == "kspKotlinIosSimulatorArm64") enabled = false
if (name == "kspKotlinIosX64") enabled = false
if (name == "kspKotlinIosArm64") enabled = false
dependsOn("kspCommonMainKotlinMetadata")
}
}
@AutoMapper(
to = UserEntity::class,
reverse: true, // this need use version in the name containe reverse
ignoreKeys = ["internalId"],
forcePublic = true,
optIns = ["kotlin.ExperimentalStdlibApi"],
defaultValues = [
DefaultValue("role", "Role()")
]
)
data class UserDto(
val id: String,
val name: String,
@AutoMapperName(to = "createdAt")
val joinDate: Long,
@AutoMapperCustom(mapperFunction = "mapStatus")
val status: Status,
@AutoMapperCustomFromParent(mapperFunction = "mapRole")
val role: Role
) {
companion object {
fun mapStatus(data: Status) {
// do ur mapper need
}
fun mapRole(data: UserDto) {
}
}
}
UserDtoMapper.toSource(source: UserDto): UserEntity
This package provides annotation definitions for the AutoMapper KSP Processor, allowing automatic mapping generation between Kotlin classes for Kotlin Multiplatform, Android, and * iOS*.
It includes:
implementation("io.github.the-best-is-best:automapper-annotations:1.0.0-rc.1")
Add KSP processor:
ksp("io.github.the-best-is-best:automapper-processor:1.0.0-rc.1")
./gradlew composeApp:kspCommonMainKotlinMetadata
annotation class AutoMapper(
val to: KClass<*>,
val optIns: Array<String> = [],
val ignoreKeys: Array<String> = [],
val forcePublic: Boolean = false,
val defaultValues: Array<DefaultValue> = [],
val reverse: Boolean = false // available when use reverse version
)annotation class DefaultValue(
val key: String,
val value: String
)
annotation class AutoMapperName(val to: String)
annotation class AutoMapperCustom(
val mapperFunction: String,
val reverseMapperFunction: String = "" // available when use reverse version
)
annotation class AutoMapperCustomFromParent(
val mapperFunction: String,
val reverseMapperFunction: String = "" // available when use reverse version
)
annotation class AutoMapperAddOptIns(val value: Array<String>)
id("com.google.devtools.ksp")
kotlin {
androidTarget {
compilerOptions { jvmTarget.set(JvmTarget.JVM_17) }
}
listOf(iosArm64(), iosSimulatorArm64()).forEach { ios ->
ios.binaries.framework {
baseName = "ComposeApp"
isStatic = true
}
}
sourceSets.named("commonMain").configure {
kotlin.srcDir("build/generated/ksp/metadata/commonMain/kotlin")
}
}
dependencies {
ksp(projects.automapperProcessor)
}
ksp {
// auto mapper
arg("autoMapperVisibility", "false")
}
project.tasks.withType(KotlinCompilationTask::class.java).configureEach {
if (name != "kspCommonMainKotlinMetadata") {
dependsOn("kspCommonMainKotlinMetadata")
}
}project.tasks.withType(KspAATask::class.java).configureEach {
if (name != "kspCommonMainKotlinMetadata") {
if (name == "kspDebugKotlinAndroid") enabled = false
if (name == "kspReleaseKotlinAndroid") enabled = false
if (name == "kspKotlinIosSimulatorArm64") enabled = false
if (name == "kspKotlinIosX64") enabled = false
if (name == "kspKotlinIosArm64") enabled = false
dependsOn("kspCommonMainKotlinMetadata")
}
}
@AutoMapper(
to = UserEntity::class,
reverse: true, // this need use version in the name containe reverse
ignoreKeys = ["internalId"],
forcePublic = true,
optIns = ["kotlin.ExperimentalStdlibApi"],
defaultValues = [
DefaultValue("role", "Role()")
]
)
data class UserDto(
val id: String,
val name: String,
@AutoMapperName(to = "createdAt")
val joinDate: Long,
@AutoMapperCustom(mapperFunction = "mapStatus")
val status: Status,
@AutoMapperCustomFromParent(mapperFunction = "mapRole")
val role: Role
) {
companion object {
fun mapStatus(data: Status) {
// do ur mapper need
}
fun mapRole(data: UserDto) {
}
}
}
UserDtoMapper.toSource(source: UserDto): UserEntity