From dc4160ca7348cc3f585872e36c97649ad59ab53c Mon Sep 17 00:00:00 2001 From: Hubert Van De Walle Date: Wed, 2 Dec 2020 02:36:21 +0100 Subject: [PATCH] Add more types --- days/src/main/kotlin/Day01.kt | 12 ++---- .../aoc/utils/input/InputFactory.kt | 42 ++++++++++++++----- .../aoc/utils/input/MicronautExtensions.kt | 4 ++ utils/src/test/kotlin/input/DayTest.kt | 4 -- 4 files changed, 40 insertions(+), 22 deletions(-) diff --git a/days/src/main/kotlin/Day01.kt b/days/src/main/kotlin/Day01.kt index ab015e2..24acd5f 100644 --- a/days/src/main/kotlin/Day01.kt +++ b/days/src/main/kotlin/Day01.kt @@ -1,12 +1,9 @@ -@file:Suppress("unused") - package be.vandewalleh.aoc.days import be.vandewalleh.aoc.utils.input.Day import be.vandewalleh.aoc.utils.input.Input import be.vandewalleh.aoc.utils.input.Lines -import io.micronaut.context.BeanContext -import io.micronaut.context.getBean +import be.vandewalleh.aoc.utils.input.createDay @Day(1) class Day01(@Lines input: Input) { @@ -34,8 +31,7 @@ class Day01(@Lines input: Input) { } -fun main() { - val day = BeanContext.run().getBean() - println(day.part1()) - println(day.part2()) +fun main() = with(createDay()) { + println(part1()) + println(part2()) } diff --git a/utils/src/main/kotlin/be/vandewalleh/aoc/utils/input/InputFactory.kt b/utils/src/main/kotlin/be/vandewalleh/aoc/utils/input/InputFactory.kt index 7904ec2..3ff983a 100644 --- a/utils/src/main/kotlin/be/vandewalleh/aoc/utils/input/InputFactory.kt +++ b/utils/src/main/kotlin/be/vandewalleh/aoc/utils/input/InputFactory.kt @@ -17,23 +17,39 @@ import kotlin.io.path.readText class InputFactory(private val resourceLoader: ResourceLoader) { @Csv - fun csvIntArray(injectionPoint: InjectionPoint<*>): Input = injectionPoint - .read() - .split(",") - .map { it.toInt() } - .toIntArray() - .wrap() + fun csv(injectionPoint: InjectionPoint<*>): Input<*> = + when (val param = injectionPoint.typeNameOfAnnotation()) { + 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()) { - "int[]" -> injectionPoint + INT_ARRAY -> injectionPoint .lines() .map { it.toInt() } .toList() .toIntArray() .wrap() - "java.util.List" -> 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 = + fun text(injectionPoint: InjectionPoint<*>): Input = 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" + } + } diff --git a/utils/src/main/kotlin/be/vandewalleh/aoc/utils/input/MicronautExtensions.kt b/utils/src/main/kotlin/be/vandewalleh/aoc/utils/input/MicronautExtensions.kt index f7b00ad..e58205b 100644 --- a/utils/src/main/kotlin/be/vandewalleh/aoc/utils/input/MicronautExtensions.kt +++ b/utils/src/main/kotlin/be/vandewalleh/aoc/utils/input/MicronautExtensions.kt @@ -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 AnnotationMetadataProvider.findAnno internal inline fun AnnotationMetadataProvider.hasAnnotation(): Boolean = findAnnotation(T::class.java).isPresent + +inline fun createDay() = BeanContext.run().getBean() diff --git a/utils/src/test/kotlin/input/DayTest.kt b/utils/src/test/kotlin/input/DayTest.kt index 826b295..19cff5a 100644 --- a/utils/src/test/kotlin/input/DayTest.kt +++ b/utils/src/test/kotlin/input/DayTest.kt @@ -1,9 +1,7 @@ package be.vandewalleh.aoc.utils.input import com.google.common.jimfs.Jimfs -import io.micronaut.context.BeanContext import io.micronaut.context.annotation.Replaces -import io.micronaut.context.getBean import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.Test import javax.inject.Singleton @@ -55,8 +53,6 @@ class DayTest { @Day(4) class StringLinesExample(@Lines val input: Input>) - private inline fun createDay() = BeanContext.run().getBean() - @Test fun `check @Text String`() { val day = createDay()