ansman/kotshi

Cannot provide custom adapters for primitives and string types.

Closed this issue · 3 comments

@JsonSerializable
data class StringEnvelope(val value: String)

@Test
fun allowsCustomAdapters() {
    val adapter = Moshi.Builder()
        .add(String::class.java, object : JsonAdapter<String>() {
            override fun fromJson(reader: JsonReader): String {
                return reader.nextString().toUpperCase(Locale.US)
            }

            override fun toJson(writer: JsonWriter, value: String?) {
                writer.value(value!!.toLowerCase())
            }
        })
        .add(KotshiTestFactory())
        .build()
        .adapter(StringEnvelope::class.java)
    val envelope = StringEnvelope("HELLO, WORLD!")
    val json = """{"value":"hello, world!"}"""
    assertEquals(envelope, adapter.fromJson(json))
    assertEquals(json, adapter.toJson(envelope))
}

fails.

Is there a reason Property.shouldUseAdapter should ever be false?

Exactly what @JakeWharton said, you opt in by using the useAdaptersForPrimitives option

Ah, I see. Sorry, missed that option. thx.