25 lines
621 B
Kotlin
25 lines
621 B
Kotlin
package com.infendro.cli.parser
|
|
|
|
import com.infendro.cli.error.Error
|
|
import com.infendro.cli.error.InvalidValue
|
|
import kotlin.reflect.KClass
|
|
|
|
abstract class Parser<T : Any>(
|
|
val type: KClass<T>,
|
|
) {
|
|
sealed class Result<T : Any> {
|
|
data class Success<T : Any>(
|
|
val value: T,
|
|
) : Result<T>()
|
|
|
|
data class Failure<T : Any>(
|
|
val error: Error,
|
|
) : Result<T>()
|
|
}
|
|
|
|
protected fun success(value: T) = Result.Success(value)
|
|
protected fun failure(text: String) = Result.Failure<T>(InvalidValue(text, type))
|
|
|
|
abstract fun parse(text: String): Result<T>
|
|
}
|