Skip to content

Goopher/kotlin-grass

 
 

Repository files navigation

Kotlin-Grass

Kotlin License: Apache License 2.0 CodeFactor CodeFactor

Csv File to Kotlin Data Class Parser
Currently, it requires to have @ExperimentalStdlibApi on the class/method using this Library.
Requires kotlin-csv by doyaaaaaken for reading csv file.

Links

Features

1. Simple And Direct

  • No hard configuration
  • No invasive annotations to data class
  • Custom mapping
  • Nullable Data Types

2. Primitive Types

  • Short
  • Int
  • Long
  • Float
  • Double
  • Boolean
  • String

3. Support for Java 8 Date Time Apis

  • LocalTime
  • LocalDateTime
  • LocalDate
  • Custom Formatting

Usage

Gradle DSL:

//doyaaaaaken's kotlin-csv
implementation("com.github.doyaaaaaken:kotlin-csv-jvm:0.11.0")
//kotlin-grass
implementation("com.vhl.blackmo:kotlin-grass-jvm:0.4.1")

Prior to Kotlin 1.4.0

Please use the following version

//doyaaaaaken's kotlin-csv
implementation("com.github.doyaaaaaken:kotlin-csv-jvm:0.10.4")
//kotlin-grass
implementation("com.vhl.blackmo:kotlin-grass-jvm:0.3.0")

Examples

CSV file

short int long float double boolean string
0 1 2 3.0 4.0 true hello

Declaring data class

    data class PrimitiveTypes(
        val short: Short,
        val int: Int,
        val long: Long,
        val float: Float,
        val double: Double,
        val boolean: Boolean,
        val string: String
    )

Nullable Data Types

If a variable in your data class is a nullable, all you have to do is mark it with ?

    data class NullableData(
        val nullableString: String?,
        val nullableInt: Int? = null,
        ...
    )

Parsing to data class

    val csvContents = csvReader().readAllWithHeader(file)
    val dataClasses = grass<PrimitiveTypes>().harvest(csvContents)

Custom Configuration

Option default value description
dateFormat yyyy-MM-dd date format
timeFormat HH:mm time format
dateTimeSeparator (space) date time separator
trimWhiteSpace true trims white spaces on csv entries
customKeyMap null Map<String,String> custom key mapping

Java Date Time API Support

csv file

time datetime date
12:00 2020-12-31 12:00 2020-12-31

Date and Time Types

    data class DateTimeTypes(
        val time: LocalTime,
        val datetime: LocalDateTime,
        val date: LocalDate,
    )

Customize Formatting

    val grass = grass<DateTimeTypes> {
        dateFormat = "MM-dd-yyyy"
        timeFormat = "HH:mm:ss"
        dateTimeSeparator = "/"
    }

Custom Mapping Support

CSV file

hour birthdate
12:00 2020-12-31

Code

    data class DateTime(
        val time: LocalTime,
        val date: LocalDate,
    )

    val grass = grass<DateTimeTypes> {
        customKeyMap = mapOf("hour" to "time", "birthdate" to "date")
    }

🤝 Contributing

Contributions, issues and feature requests are welcome!
Feel free to check issues page.

Show your support

Give a ⭐️ if this project helped you!

📝 License

Copyright © 2020 blackmo18.
This project is Apache License 2.0 licensed.


This project inspired ❤️ by kotlin-csv

About

Kotlin Csv to Data Class Parser

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Kotlin 100.0%