Skip to content

Commit 875e15c

Browse files
committed
Release 0.7.8
Serialize nulls when sending to http request Signed-off-by: Gopal S Akshintala <[email protected]>
1 parent 71560ca commit 875e15c

File tree

5 files changed

+30
-19
lines changed

5 files changed

+30
-19
lines changed

README.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ endif::[]
1818
:pmtemplates: src/integrationTest/resources/pm-templates
1919
:imagesdir: docs/images
2020
:prewrap!:
21-
:revoman-version: 0.7.7
21+
:revoman-version: 0.7.8
2222

2323
'''
2424

buildSrc/src/main/kotlin/Config.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@
66
* ************************************************************************************************
77
*/
88
const val GROUP_ID = "com.salesforce.revoman"
9-
const val VERSION = "0.7.7"
9+
const val VERSION = "0.7.8"
1010
const val ARTIFACT_ID = "revoman"
1111
const val STAGING_PROFILE_ID = "1ea0a23e61ba7d"

src/integrationTest/resources/pm-templates/restfulapidev/restful-api.dev.postman_collection.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@
7171
"header": [],
7272
"body": {
7373
"mode": "raw",
74-
"raw": "{\n \"name\": \"{{$randomProduct}}\", // Dynamic variable\n \"data\": {\n \"year\": {{$currentYear}}, // Variable set via Pre-req\n \"price\": {{$randomPrice}} // Variable set via Pre-req\n }\n}",
74+
"raw": "{\n \"name\": \"{{$randomProduct}}\", // Dynamic variable\n \"data\": {\n \"year\": {{$currentYear}}, // Variable set via Pre-req\n \"price\": {{$randomPrice}}, // Variable set via Pre-req\n \"CPU model\": null\n }\n}",
7575
"options": {
7676
"raw": {
7777
"language": "json"

src/main/kotlin/com/salesforce/revoman/internal/json/MoshiReVoman.kt

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,13 @@ import com.squareup.moshi.adapters.Rfc3339DateJsonAdapter
2222
import dev.zacsweers.moshix.adapters.AdaptedBy
2323
import dev.zacsweers.moshix.adapters.JsonString
2424
import io.vavr.control.Either
25-
import java.lang.reflect.Type
26-
import java.util.*
27-
import org.http4k.format.EventAdapter
2825
import org.http4k.format.ListAdapter
2926
import org.http4k.format.MapAdapter
3027
import org.http4k.format.ThrowableAdapter
3128
import org.http4k.format.asConfigurable
3229
import org.http4k.format.withStandardMappings
30+
import java.lang.reflect.Type
31+
import java.util.*
3332

3433
open 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)

src/main/kotlin/com/salesforce/revoman/internal/postman/template/Template.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ data class Request(
6666
contentTypeHeader?.value == null ||
6767
(APPLICATION_JSON.value.equals(contentTypeHeader.value, true) &&
6868
containsComments(it)) -> {
69-
runCatching { moshiReVoman?.jsonToObjToPrettyJson(it) ?: it }
69+
runCatching { moshiReVoman?.jsonToObjToPrettyJson(it, true) ?: it }
7070
.onSuccess {
7171
if (contentTypeHeader == null) {
7272
logger.info {

0 commit comments

Comments
 (0)