All Downloads are FREE. Search and download functionalities are using the official Maven repository.

codecs.extended.IntRangeJSONCodec.kt Maven / Gradle / Ivy

There is a newer version: 0.9.24
Show newest version
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"
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy