@@ -22,14 +22,13 @@ import com.squareup.moshi.adapters.Rfc3339DateJsonAdapter
2222import dev.zacsweers.moshix.adapters.AdaptedBy
2323import dev.zacsweers.moshix.adapters.JsonString
2424import io.vavr.control.Either
25- import java.lang.reflect.Type
26- import java.util.*
27- import org.http4k.format.EventAdapter
2825import org.http4k.format.ListAdapter
2926import org.http4k.format.MapAdapter
3027import org.http4k.format.ThrowableAdapter
3128import org.http4k.format.asConfigurable
3229import org.http4k.format.withStandardMappings
30+ import java.lang.reflect.Type
31+ import java.util.*
3332
3433open class MoshiReVoman (builder : Moshi .Builder ) {
3534 var moshi: Moshi = builder.build()
@@ -55,10 +54,18 @@ open class MoshiReVoman(builder: Moshi.Builder) {
5554 @OptIn(ExperimentalStdlibApi ::class )
5655 inline fun <reified PojoT : Any > adapter (): JsonAdapter <PojoT > = moshi.adapter<PojoT >()
5756
58- fun <PojoT : Any > lenientAdapter (targetType : Type ): JsonAdapter <PojoT > =
59- adapter<PojoT >(targetType).lenient()
57+ fun <PojoT : Any > lenientAdapter (
58+ targetType : Type ,
59+ serializeNulls : Boolean = false,
60+ ): JsonAdapter <PojoT > =
61+ (if (serializeNulls) adapter<PojoT >(targetType).serializeNulls()
62+ else adapter<PojoT >(targetType))
63+ .lenient()
6064
61- inline fun <reified PojoT : Any > lenientAdapter (): JsonAdapter <PojoT > = adapter<PojoT >().lenient()
65+ inline fun <reified PojoT : Any > lenientAdapter (
66+ serializeNulls : Boolean = false
67+ ): JsonAdapter <PojoT > =
68+ (if (serializeNulls) adapter<PojoT >().serializeNulls() else adapter<PojoT >()).lenient()
6269
6370 fun <PojoT : Any > fromJson (input : String? , targetType : Type = Any : :class.java): PojoT ? =
6471 input?.let { lenientAdapter<PojoT >(targetType).fromJson(it) }
@@ -67,21 +74,25 @@ open class MoshiReVoman(builder: Moshi.Builder) {
6774 input?.let { lenientAdapter<PojoT >().fromJson(it) }
6875
6976 fun <PojoT : Any > toJson (
70- input : PojoT ? ,
77+ input : PojoT ? , serializeNulls : Boolean = false,
7178 sourceType : Type = input?.javaClass ? : Any : :class.java,
72- ): String = lenientAdapter<PojoT >(sourceType).toJson(input)
79+ ): String = lenientAdapter<PojoT >(sourceType, serializeNulls ).toJson(input)
7380
74- inline fun <reified PojoT : Any > toJson (input : PojoT ? ): String =
75- lenientAdapter<PojoT >().toJson(input)
81+ inline fun <reified PojoT : Any > toJson (input : PojoT ? , serializeNulls : Boolean = false ): String =
82+ lenientAdapter<PojoT >(serializeNulls ).toJson(input)
7683
7784 fun <PojoT : Any > toPrettyJson (
7885 input : PojoT ? ,
7986 sourceType : Type = input?.javaClass ? : Any : :class.java,
87+ serializeNulls : Boolean = false,
8088 indent : String = " ",
81- ): String = lenientAdapter<PojoT >(sourceType).indent(indent).toJson(input)
89+ ): String = lenientAdapter<PojoT >(sourceType, serializeNulls ).indent(indent).toJson(input)
8290
83- inline fun <reified PojoT : Any > toPrettyJson (input : PojoT ? , indent : String = " "): String =
84- lenientAdapter<PojoT >().indent(indent).toJson(input)
91+ inline fun <reified PojoT : Any > toPrettyJson (
92+ input : PojoT ? ,
93+ serializeNulls : Boolean = false,
94+ indent : String = " ",
95+ ): String = lenientAdapter<PojoT >(serializeNulls).indent(indent).toJson(input)
8596
8697 fun <PojoT : Any > objToJsonStrToObj (
8798 input : Any? ,
@@ -91,7 +102,8 @@ open class MoshiReVoman(builder: Moshi.Builder) {
91102 inline fun <reified PojoT : Any > objToJsonStrToObj (input : Any? ): PojoT ? =
92103 lenientAdapter<PojoT >().fromJson(toJson(input))
93104
94- fun jsonToObjToPrettyJson (input : String? ): String? = input?.let { toPrettyJson(fromJson(it)) }
105+ fun jsonToObjToPrettyJson (input : String? , serializeNulls : Boolean = false): String? =
106+ input?.let { toPrettyJson(fromJson(it), serializeNulls) }
95107
96108 companion object {
97109 @Synchronized
@@ -123,7 +135,6 @@ open class MoshiReVoman(builder: Moshi.Builder) {
123135 .add(Date ::class .java, Rfc3339DateJsonAdapter ())
124136 .addLast(CaseInsensitiveEnumAdapter .FACTORY )
125137 .addLast(AlwaysSerializeNullsFactory ())
126- .addLast(EventAdapter )
127138 .addLast(ThrowableAdapter )
128139 .addLast(ListAdapter )
129140 .addLast(MapAdapter )
0 commit comments