mirror of
https://github.com/fankes/moshi.git
synced 2025-10-19 16:09:21 +08:00
Added codegen support for inline classes (#923)
* Added codegen support for inline classes * moved to DualKotlinTest * added test class consuming inline class
This commit is contained in:
committed by
Zac Sweers
parent
ae8b62b3ee
commit
b4e6715248
@@ -117,6 +117,7 @@
|
|||||||
<args>
|
<args>
|
||||||
<arg>-Werror</arg>
|
<arg>-Werror</arg>
|
||||||
<arg>-Xuse-experimental=kotlin.ExperimentalStdlibApi</arg>
|
<arg>-Xuse-experimental=kotlin.ExperimentalStdlibApi</arg>
|
||||||
|
<arg>-XXLanguage:+InlineClasses</arg>
|
||||||
</args>
|
</args>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
|
@@ -252,4 +252,36 @@ class DualKotlinTest(useReflection: Boolean) {
|
|||||||
assertThat(decoded.a).isEqualTo(null)
|
assertThat(decoded.a).isEqualTo(null)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test fun inlineClass() {
|
||||||
|
val adapter = moshi.adapter<InlineClass>()
|
||||||
|
|
||||||
|
val inline = InlineClass(5)
|
||||||
|
|
||||||
|
val expectedJson = """{"i":5}"""
|
||||||
|
assertThat(adapter.toJson(inline)).isEqualTo(expectedJson)
|
||||||
|
|
||||||
|
val testJson = """{"i":6}"""
|
||||||
|
val result = adapter.fromJson(testJson)!!
|
||||||
|
assertThat(result.i).isEqualTo(6)
|
||||||
|
}
|
||||||
|
|
||||||
|
@JsonClass(generateAdapter = true)
|
||||||
|
data class InlineConsumer(val inline: InlineClass)
|
||||||
|
|
||||||
|
@Test fun inlineClassConsumer() {
|
||||||
|
val adapter = moshi.adapter<InlineConsumer>()
|
||||||
|
|
||||||
|
val consumer = InlineConsumer(InlineClass(23))
|
||||||
|
|
||||||
|
val expectedJson= """{"inline":{"i":23}}"""
|
||||||
|
assertThat(adapter.toJson(consumer)).isEqualTo(expectedJson)
|
||||||
|
|
||||||
|
val testJson = """{"inline":{"i":42}}"""
|
||||||
|
val result = adapter.fromJson(testJson)!!
|
||||||
|
assertThat(result.inline.i).isEqualTo(42)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Has to be outside since inline classes are only allowed on top level
|
||||||
|
@JsonClass(generateAdapter = true)
|
||||||
|
inline class InlineClass(val i: Int)
|
||||||
|
Reference in New Issue
Block a user