Add more types
This commit is contained in:
@@ -17,23 +17,39 @@ import kotlin.io.path.readText
|
||||
class InputFactory(private val resourceLoader: ResourceLoader) {
|
||||
|
||||
@Csv
|
||||
fun csvIntArray(injectionPoint: InjectionPoint<*>): Input<IntArray> = injectionPoint
|
||||
.read()
|
||||
.split(",")
|
||||
.map { it.toInt() }
|
||||
.toIntArray()
|
||||
.wrap()
|
||||
fun csv(injectionPoint: InjectionPoint<*>): Input<*> =
|
||||
when (val param = injectionPoint.typeNameOfAnnotation<Csv>()) {
|
||||
INT_ARRAY -> injectionPoint
|
||||
.read()
|
||||
.split(",")
|
||||
.map { it.toInt() }
|
||||
.toIntArray()
|
||||
.wrap()
|
||||
LONG_ARRAY -> injectionPoint
|
||||
.read()
|
||||
.split(",")
|
||||
.map { it.toLong() }
|
||||
.toLongArray()
|
||||
.wrap()
|
||||
else -> error("Unsupported type $param")
|
||||
}
|
||||
|
||||
@Lines
|
||||
fun linesIntArray(injectionPoint: InjectionPoint<*>): Input<*> =
|
||||
fun lines(injectionPoint: InjectionPoint<*>): Input<*> =
|
||||
when (val param = injectionPoint.typeNameOfAnnotation<Lines>()) {
|
||||
"int[]" -> injectionPoint
|
||||
INT_ARRAY -> injectionPoint
|
||||
.lines()
|
||||
.map { it.toInt() }
|
||||
.toList()
|
||||
.toIntArray()
|
||||
.wrap()
|
||||
"java.util.List<java.lang.String>" -> injectionPoint
|
||||
LONG_ARRAY -> injectionPoint
|
||||
.lines()
|
||||
.map { it.toLong() }
|
||||
.toList()
|
||||
.toLongArray()
|
||||
.wrap()
|
||||
STRING_LIST -> injectionPoint
|
||||
.lines()
|
||||
.toList()
|
||||
.wrap()
|
||||
@@ -41,7 +57,7 @@ class InputFactory(private val resourceLoader: ResourceLoader) {
|
||||
}
|
||||
|
||||
@Text
|
||||
fun string(injectionPoint: InjectionPoint<*>): Input<String> =
|
||||
fun text(injectionPoint: InjectionPoint<*>): Input<String> =
|
||||
injectionPoint.read().wrap()
|
||||
|
||||
|
||||
@@ -73,4 +89,10 @@ class InputFactory(private val resourceLoader: ResourceLoader) {
|
||||
return dayAnnotation.get().intValue("day").asInt
|
||||
}
|
||||
|
||||
companion object {
|
||||
private const val INT_ARRAY = "int[]"
|
||||
private const val LONG_ARRAY = "long[]"
|
||||
private const val STRING_LIST = "java.util.List<java.lang.String>"
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package be.vandewalleh.aoc.utils.input
|
||||
|
||||
import io.micronaut.context.BeanContext
|
||||
import io.micronaut.context.getBean
|
||||
import io.micronaut.core.annotation.AnnotationMetadataDelegate
|
||||
import io.micronaut.core.annotation.AnnotationMetadataProvider
|
||||
import io.micronaut.core.annotation.AnnotationValue
|
||||
@@ -17,3 +19,5 @@ internal inline fun <reified T : Annotation> AnnotationMetadataProvider.findAnno
|
||||
|
||||
internal inline fun <reified T : Annotation> AnnotationMetadataProvider.hasAnnotation(): Boolean =
|
||||
findAnnotation(T::class.java).isPresent
|
||||
|
||||
inline fun <reified T> createDay() = BeanContext.run().getBean<T>()
|
||||
|
||||
Reference in New Issue
Block a user