Cannot provide custom adapters for primitives and string types.
Closed this issue · 3 comments
NightlyNexus commented
@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?
JakeWharton commented
You have to opt into this because it's rare to customize these without a
qualifier. It likely adds a good amount of overhead to always delegate.
…On Fri, Jan 19, 2018, 6:27 PM Eric Cochran ***@***.***> wrote:
@JsonSerializabledata class StringEnvelope(val value: String)
@testfun 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?
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
<#51>, or mute the thread
<https://github.com/notifications/unsubscribe-auth/AAEEEd7Fpk55rk9o2T1WGRMA7TXkn2Zxks5tMSTIgaJpZM4RlLvp>
.
ansman commented
Exactly what @JakeWharton said, you opt in by using the useAdaptersForPrimitives
option
NightlyNexus commented
Ah, I see. Sorry, missed that option. thx.