Web Analytics

konvert

⭐ 156 stars Spanish by mcarleio

Konvert

[![Maven Central][maven-image]][maven-url] [![License][license-image]](LICENSE) [![Code Coverage][codecov-image]][codecov-url]

Este es Konvert, un generador de código de mapeo para Kotlin que utiliza Kotlin Symbol Processing (KSP). Diseñado específicamente para Kotlin y sus características, Konvert soporta una amplia gama de casos de uso.

Características principales:

> ℹ️ Este README ofrece una visión básica, para más detalles consulte la documentación.

Uso

Hay tres maneras diferentes de usar Konvert:

   @KonvertTo(PersonDto::class)
   data class Person(val firstName: String, val lastName: String)
   data class PersonDto(val firstName: String, val lastName: String)
   ``
   Esto generará la siguiente función de extensión
   `kotlin
   fun Person.toPersonDto(): PersonDto =
      PersonDto(firstName = firstName, lastName = lastName)
   `

  • Usando @KonvertFrom (especialmente útil si no puedes cambiar el código de la clase fuente)
`kotlin class Person(val firstName: String, val lastName: String) { @KonvertFrom(PersonDto::class) companion object } class PersonDto(val firstName: String, val lastName: String) ` Esto generará la siguiente función de extensión `kotlin fun Person.Companion.fromPersonDto(personDto: PersonDto): Person = Person(firstName = personDto.firstName, lastName = personDto.lastName) `

  • Usando @Konverter:
`kotlin class Person(val firstName: String, val lastName: String) data class PersonDto(val firstName: String, val lastName: String)

@Konverter interface PersonMapper { fun toDto(person: Person): PersonDto } ` Esto generará el siguiente objeto `kotlin object PersonMapperImpl: PersonMapper { override fun toDto(person: Person): PersonDto = PersonDto(firstName = person.firstName, lastName = person.lastName) } ` Para un proyecto de ejemplo simple, eche un vistazo al directorio de ejemplo.

Mapeos de tipos

Para mapeos de tipos simples, como de Instant a Date, ya existe un convertidor de tipos proporcionado con Konvert:

kotlin @KonvertTo(PersonDto::class) class Person(val name: String, val birthday: Instant) class PersonDto(val name: String, val birthday: Date)

Esto generará la siguiente función de extensión
kotlin fun Person.toPersonDto(): PersonDto = PersonDto( name = name, birthday = birthday.let { java.util.Date.from(it) } )

Echa un vistazo a la documentación para una lista de convertidores de tipo proporcionados.

🛈: También puedes crear tu propia biblioteca de convertidores de tipo implementando TypeConverter y registrarla usando SPI.

Ajuste fino

La mayoría de las veces, las clases origen y destino pueden no tener los mismos nombres y tipos de propiedades. Puedes configurar mapeos específicos y renombrar la función de extensión generada así:

kotlin @KonvertTo( PersonDto::class, mappings = [ Mapping(source = "firstName", target = "givenName"), Mapping(source = "lastName", target = "familyName") ], mapFunctionName = "asDto" ) class Person(val firstName: String, val lastName: String) class PersonDto(val givenName: String, val familyName: String)

Esto generará la siguiente función de extensión
kotlin fun Person.asDto(): PersonDto = PersonDto( givenName = firstName, familyName = lastName )
`

Para más funcionalidades, consulta la documentación los KDocs de las anotaciones, el proyecto de ejemplo o las pruebas.

Configuración de Gradle

Para usar Konvert con Gradle, debes realizar los siguientes pasos:

`kotlin dependencies { implementation("io.mcarle:konvert-api:$konvertVersion") } `
  • Agregue el complemento KSP:
`kotlin plugins { id("com.google.devtools.ksp").version("2.3.5") } `

`kotlin dependencies { ksp("io.mcarle:konvert:$konvertVersion") } `

Configuración de Maven

Para usar Konvert con Maven, debes realizar los siguientes pasos:

`xml io.mcarle konvert-api ${konvert.version} ` `xml io.mcarle ksp-maven-plugin 2.3.5-1 ksp io.mcarle konvert ${konvert.version} `

Más información

  • Konvert se compila y prueba principalmente con JDK >=17. También debería funcionar con cualquier versión inferior a JDK 17, pero no está garantizado.
  • Konvert es capaz de convertir clases desde y hacia clases escritas en Java (y probablemente también en otros lenguajes JVM).

Alternativas

Hay algunas alternativas a Konvert que quizás quieras revisar:

Mappie no usa KSP, sino que es un plugin de compilador para Kotlin. Utiliza reflexión en lugar de referencias de String para definir los mapeos, pero reemplaza el código de reflexión durante el tiempo de compilación con código idiomático Kotlin.

MapStruct es una conocida biblioteca de mapeo Java que usa procesamiento de anotaciones (ver kapt). Puede usarse en proyectos Kotlin, pero no soporta características específicas de Kotlin.

kMapper también es un procesador KSP, pero parece soportar solo mapeo entre clases de datos Kotlin.

ShapeShift usa reflexión en tiempo de ejecución para mapear entre clases.

  • Codifica tú mismo (con soporte de IA)
De hecho, a veces puede ser más rápido, fácil y flexible escribir código de mapeo manualmente. Con la ayuda de herramientas de IA hoy en día, esta tarea repetitiva puede automatizarse hasta cierto punto.

Construcción

Gradle

Para construir el proyecto, simplemente ejecuta

gradle build

#### Ejecutar todas las pruebas

Por defecto, solo se ejecuta un subconjunto de las pruebas disponibles, que deberían verificar la mayoría de la funcionalidad de Konvert. Para ejecutar todas las pruebas, añade la propiedad runAllTests, por ejemplo:

gradle test -PrunAllTests

Documentación

Para servir el sitio Jekyll localmente, simplemente ejecuta el siguiente comando dentro de docs`:

docker run --rm -it -v "$PWD":/site -p 4000:4000 bretfisher/jekyll-serve

CI

GitHub Actions se usan para:

Registro de cambios

El registro de cambios contiene todos los cambios notables.

Licencia

Copyright 2023 Marcel Carlé

Licenciado bajo la Licencia Apache, Versión 2.0 (la "Licencia"); no puedes usar este archivo excepto en conformidad con la Licencia. Puedes obtener una copia de la Licencia en

http://www.apache.org/licenses/LICENSE-2.0

A menos que lo exija la ley aplicable o se acuerde por escrito, el software distribuido bajo la Licencia se distribuye "TAL CUAL", SIN GARANTÍAS NI CONDICIONES DE NINGÚN TIPO, ya sean expresas o implícitas. Consulte la Licencia para conocer el idioma específico que rige los permisos y limitaciones bajo la Licencia.

[maven-image]: https://img.shields.io/maven-central/v/io.mcarle/konvert.svg

[maven-url]: https://central.sonatype.com/artifact/io.mcarle/konvert/

[license-image]: https://img.shields.io/github/license/mcarleio/konvert.svg

[codecov-image]: https://img.shields.io/codecov/c/github/mcarleio/konvert.svg

[codecov-url]: https://codecov.io/gh/mcarleio/konvert

--- Tranlated By Open Ai Tx | Last indexed: 2026-04-08 ---