Skip to content

Commit a1c4a29

Browse files
committed
Set TENTATIVE as deprecated, use MAYBE instead
1 parent eb64d76 commit a1c4a29

3 files changed

Lines changed: 58 additions & 6 deletions

File tree

src/main/kotlin/com/nylas/models/EventStatus.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ enum class EventStatus {
1212
@Json(name = "maybe")
1313
MAYBE,
1414

15+
@Deprecated(
16+
message = "Use MAYBE instead. TENTATIVE is a legacy alias and will be removed in a future release.",
17+
replaceWith = ReplaceWith("MAYBE"),
18+
)
1519
@Json(name = "tentative")
1620
TENTATIVE,
1721

src/main/kotlin/com/nylas/util/EventStatusJsonAdapter.kt

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,33 @@ import com.squareup.moshi.FromJson
55
import com.squareup.moshi.JsonReader
66
import com.squareup.moshi.JsonWriter
77
import com.squareup.moshi.ToJson
8-
import com.squareup.moshi.adapters.EnumJsonAdapter
98

109
/**
11-
* Handles EventStatus values without failing deserialization when the API returns a new status.
10+
* Normalizes legacy event status values and avoids failing deserialization on new values.
1211
*/
1312
class EventStatusJsonAdapter {
14-
private val delegate = EnumJsonAdapter.create(EventStatus::class.java).withUnknownFallback(null)
15-
1613
@FromJson
17-
fun fromJson(reader: JsonReader): EventStatus? = delegate.fromJson(reader)
14+
fun fromJson(reader: JsonReader): EventStatus? {
15+
if (reader.peek() == JsonReader.Token.NULL) {
16+
return reader.nextNull()
17+
}
18+
19+
return when (reader.nextString()) {
20+
"confirmed" -> EventStatus.CONFIRMED
21+
"maybe", "tentative" -> EventStatus.MAYBE
22+
"cancelled" -> EventStatus.CANCELLED
23+
else -> null
24+
}
25+
}
1826

1927
@ToJson
28+
@Suppress("DEPRECATION")
2029
fun toJson(writer: JsonWriter, value: EventStatus?) {
21-
delegate.toJson(writer, value)
30+
when (value) {
31+
null -> writer.nullValue()
32+
EventStatus.CONFIRMED -> writer.value("confirmed")
33+
EventStatus.MAYBE, EventStatus.TENTATIVE -> writer.value("maybe")
34+
EventStatus.CANCELLED -> writer.value("cancelled")
35+
}
2236
}
2337
}

src/test/kotlin/com/nylas/resources/EventsTests.kt

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,31 @@ class EventsTests {
248248
assertEquals(EventStatus.MAYBE, event.status)
249249
}
250250

251+
@Test
252+
fun `Event deserializes tentative status as maybe`() {
253+
val adapter = JsonHelper.moshi().adapter(Event::class.java)
254+
val jsonBuffer =
255+
Buffer().writeUtf8(
256+
"""
257+
{
258+
"id": "5d3qmne77v32r8l4phyuksl2x",
259+
"grant_id": "41009df5-bf11-4c97-aa18-b285b5f2e386",
260+
"calendar_id": "7d93zl2palhxqdy6e5qinsakt",
261+
"object": "event",
262+
"status": "tentative",
263+
"when": {
264+
"date": "2024-06-18",
265+
"object": "date"
266+
}
267+
}
268+
""".trimIndent(),
269+
)
270+
271+
val event = adapter.fromJson(jsonBuffer)!!
272+
273+
assertEquals(EventStatus.MAYBE, event.status)
274+
}
275+
251276
@Test
252277
fun `Event deserializes unknown status as null`() {
253278
val adapter = JsonHelper.moshi().adapter(Event::class.java)
@@ -273,6 +298,15 @@ class EventsTests {
273298
assertEquals(null, event.status)
274299
}
275300

301+
@Suppress("DEPRECATION")
302+
@Test
303+
fun `Event status serializes tentative as maybe`() {
304+
val adapter = JsonHelper.moshi().adapter(EventStatus::class.java)
305+
306+
assertEquals("\"maybe\"", adapter.toJson(EventStatus.MAYBE))
307+
assertEquals("\"maybe\"", adapter.toJson(EventStatus.TENTATIVE))
308+
}
309+
276310
@Test
277311
fun `CreateEventAutoConferencingProvider serializes properly`() {
278312
val adapter = JsonHelper.moshi().adapter(CreateEventAutoConferencingProvider::class.java)

0 commit comments

Comments
 (0)