sitepodmatt
03/06/2019, 8:17 AMfun main() {
val map = mapOf<String, Any?>(
"color" to "red"
)
val parsedColor : Either<MappingError, String> =
Option.fromNullable(map)
.keyMap<String>("color")
.fold({ it }, { color ->
Some(color).map { it.toUpperCase() }.map { "$it - $it" }
})
println(parsedColor)
}
data class MappingError(val error : String)
inline fun <reified T : Any> Option<Map<String,Any?>>.keyMap(key : String) : Either<MappingError,T> {
return when(this) {
is None -> MappingError("no map to pull $key from").left()
is Some<Map<String,Any?>> -> (this.t[key] as? T)?.let { it.right() }
?: MappingError("No key $key of ${T::class.toString()} found}").left()
}
}