Slide 98
Slide 98 text
class BurgerJsonAdapter(
moshi: Moshi
) : JsonAdapter() {
override fun toString(): String = buildString(28) {
append("GeneratedJsonAdapter(").append("Burger").append(')')
}
private val options: JsonReader.Options =
JsonReader.Options.of("name", "price")
private val stringAdapter: JsonAdapter =
moshi.adapter(String::class.java, emptySet(), "name")
private val intAdapter: JsonAdapter =
moshi.adapter(Int::class.java, emptySet(), "price")
override fun fromJson(reader: JsonReader): Burger {
var name: String? = null
var price: Int? = null
reader.beginObject()
while (reader.hasNext()) {
when (reader.selectName(options)) {
0 -> name = stringAdapter.fromJson(reader) ?:
throw Util.unexpectedNull("name", "name", reader)
1 -> price = intAdapter.fromJson(reader) ?:
throw Util.unexpectedNull("price", "price", reader)
-1 -> {
reader.skipName()
reader.skipValue()
}
}
}
reader.endObject()
return Burger(
name = name ?:
throw Util.missingProperty("name", "name", reader),
price = price ?:
throw Util.missingProperty("price", "price", reader)
)
}
override fun toJson(writer: JsonWriter, value: Burger?) {
if (value == null) {
throw NullPointerException(
"value was null! Wrap in .nullSafe() to write nullable values.")
}
writer.beginObject()
writer.name("name")
stringAdapter.toJson(writer, value.name)
writer.name("price")
intAdapter.toJson(writer, value.price)
writer.endObject()
}
}
@zsmb13
Moshi’s generated adapter