codecs.extended.IntRangeJSONCodec.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of fluid-json-coding Show documentation
Show all versions of fluid-json-coding Show documentation
A JSON library written in pure Kotlin (coding extension)
package com.github.fluidsonic.fluid.json
object IntRangeJSONCodec : AbstractJSONCodec() {
override fun JSONDecoder.decode(valueType: JSONCodingType): IntRange {
var endInclusive = 0
var endInclusiveProvided = false
var start = 0
var startProvided = false
readFromMapByElementValue { key ->
when (key) {
Fields.endInclusive -> {
endInclusive = readInt()
endInclusiveProvided = true
}
Fields.start -> {
start = readInt()
startProvided = true
}
else -> skipValue()
}
}
if (!startProvided) missingPropertyError(Fields.start)
if (!endInclusiveProvided) missingPropertyError(Fields.endInclusive)
return start .. endInclusive
}
override fun JSONEncoder.encode(value: IntRange) {
writeIntoMap {
writeMapElement(Fields.start, int = value.first)
writeMapElement(Fields.endInclusive, int = value.last)
}
}
private object Fields {
const val endInclusive = "endInclusive"
const val start = "start"
}
}