data class Report(val measures: List<IntOrMeasure>)
@JsonDeserialize(using=IntOrMeasureDeserializer::class)
sealed class IntOrMeasure {
data class MeasureDefinition(val collection : DataMappingHttpService.RakamCollection, val name : String) : IntOrMeasure()
data class MeasureId(val id : Int) : IntOrMeasure()
}
class IntOrMeasureDeserializer : JsonDeserializer<IntOrMeasure>() {
override fun deserialize(p: JsonParser?, ctxt: DeserializationContext?): IntOrMeasure {
return if(p!!.currentToken().isNumeric) {
p.readValueAs(IntOrMeasure.MeasureId::class.java)
} else {
p.readValueAs(IntOrMeasure.MeasureDefinition::class.java)
}
}
}