Skip to content

Default case class values are memoized #1055

@jwcarvana

Description

@jwcarvana

zio-json is memoizing a variable's default in case classes even when the default is a method.

Here is a Scala 2 example. I'd expect each deserialization to create a unique UUID.

import zio.json._

import java.util.UUID

case class MyCaseClass(id: UUID = UUID.randomUUID, name: String)

object MyCaseClass {
  implicit val decoder: JsonDecoder[MyCaseClass] = DeriveJsonDecoder.gen[MyCaseClass]
  implicit val encoder: JsonEncoder[MyCaseClass] = DeriveJsonEncoder.gen[MyCaseClass]
}

val str = """{"name": "david"}"""

val a = str.fromJson[MyCaseClass].toOption.get
val b = str.fromJson[MyCaseClass].toOption.get
val c = str.fromJson[MyCaseClass].toOption.get

println(a) // MyCaseClass(36fd6b6a-5d9b-4939-a98a-7924d4ed259c,david)
println(b) // MyCaseClass(36fd6b6a-5d9b-4939-a98a-7924d4ed259c,david)
println(c) // MyCaseClass(36fd6b6a-5d9b-4939-a98a-7924d4ed259c,david)

val d = MyCaseClass(name = "david")
val e = MyCaseClass(name = "david")
val f = MyCaseClass(name = "david")

println(d) // MyCaseClass(9157e22f-80af-44ee-81e9-b6d0acd397e0,david)
println(e) // MyCaseClass(9a6ecb29-b02b-41d7-822d-9d4ad3865838,david)
println(f) // MyCaseClass(1027c46c-329c-44d4-b59a-a783076fd872,david)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions