Test case
1 generated file · +2 −0test/inputs/json/samples/kitchen-sink.json
Mpikedefault / TopLevel.pmod+2 −0
| @@ -58,9 +58,11 @@ TopLevel TopLevel_from_JSON(mixed json) { | ||
| 58 | 58 | retval.different_things = json["differentThings"]; |
| 59 | 59 | retval.double_value = (float)json["doubleValue"]; |
| 60 | 60 | retval.int_value = json["intValue"]; |
| 61 | + foreach (json["mapValue"]; mixed _; mixed value) if (stringp(value)) error("Unexpected string"); | |
| 61 | 62 | retval.map_value = json["mapValue"]; |
| 62 | 63 | retval.name_with_spaces = json["name with spaces"]; |
| 63 | 64 | retval.null_value = json["nullValue"]; |
| 65 | + foreach (json["nullableMapValue"]; mixed _; mixed value) if (stringp(value)) error("Unexpected string"); | |
| 64 | 66 | retval.nullable_map_value = json["nullableMapValue"]; |
| 65 | 67 | retval.people = json["people"]; |
| 66 | 68 | retval.person = json["person"]; |
Test case
1 generated file · +46 −0test/inputs/schema/class-with-additional.schema
Aschema-kotlindefault / TopLevel.kt+46 −0
| @@ -0,0 +1,46 @@ | ||
| 1 | +// To parse the JSON, install Klaxon and do: | |
| 2 | +// | |
| 3 | +// val topLevel = TopLevel.fromJson(jsonString) | |
| 4 | + | |
| 5 | +package quicktype | |
| 6 | + | |
| 7 | +import com.beust.klaxon.* | |
| 8 | + | |
| 9 | +private fun <T> Klaxon.convert(k: kotlin.reflect.KClass<*>, fromJson: (JsonValue) -> T, toJson: (T) -> String, isUnion: Boolean = false) = | |
| 10 | + this.converter(object: Converter { | |
| 11 | + @Suppress("UNCHECKED_CAST") | |
| 12 | + override fun toJson(value: Any) = toJson(value as T) | |
| 13 | + override fun fromJson(jv: JsonValue) = fromJson(jv) as Any | |
| 14 | + override fun canConvert(cls: Class<*>) = cls == k.java || (isUnion && cls.superclass == k.java) | |
| 15 | + }) | |
| 16 | + | |
| 17 | +private val klaxon = Klaxon() | |
| 18 | + .convert(MapValue::class, { MapValue.fromJson(it) }, { it.toJson() }, true) | |
| 19 | + | |
| 20 | +data class TopLevel ( | |
| 21 | + val map: Map<String, MapValue>? = null | |
| 22 | +) { | |
| 23 | + public fun toJson() = klaxon.toJsonString(this) | |
| 24 | + | |
| 25 | + companion object { | |
| 26 | + public fun fromJson(json: String) = klaxon.parse<TopLevel>(json) | |
| 27 | + } | |
| 28 | +} | |
| 29 | + | |
| 30 | +sealed class MapValue { | |
| 31 | + class BoolValue(val value: Boolean) : MapValue() | |
| 32 | + class DoubleValue(val value: Double) : MapValue() | |
| 33 | + | |
| 34 | + public fun toJson(): String = klaxon.toJsonString(when (this) { | |
| 35 | + is BoolValue -> this.value | |
| 36 | + is DoubleValue -> this.value | |
| 37 | + }) | |
| 38 | + | |
| 39 | + companion object { | |
| 40 | + public fun fromJson(jv: JsonValue): MapValue = when (jv.inside) { | |
| 41 | + is Boolean -> BoolValue(jv.boolean!!) | |
| 42 | + is Double, is Int, is Long -> DoubleValue(jv.double ?: jv.int?.toDouble() ?: jv.longValue?.toDouble()!!) | |
| 43 | + else -> throw IllegalArgumentException() | |
| 44 | + } | |
| 45 | + } | |
| 46 | +} |
Test case
1 generated file · +1 −0test/inputs/schema/vega-lite.schema
Mschema-pikedefault / TopLevel.pmod+1 −0
| @@ -269,6 +269,7 @@ Config Config_from_JSON(mixed json) { | ||
| 269 | 269 | retval.padding = json["padding"]; |
| 270 | 270 | retval.point = json["point"]; |
| 271 | 271 | retval.projection = json["projection"]; |
| 272 | + foreach (json["range"]; mixed _; mixed value) if (stringp(value)) error("Unexpected string"); | |
| 272 | 273 | retval.range = json["range"]; |
| 273 | 274 | retval.rect = json["rect"]; |
| 274 | 275 | retval.rule = json["rule"]; |
No generated files match these filters.