-
-
Notifications
You must be signed in to change notification settings - Fork 173
Closed
Labels
compat-breakerThis PR is good to merge, but breaks compatibility and needs to wait till we prepare a major releaseThis PR is good to merge, but breaks compatibility and needs to wait till we prepare a major release
Description
Given
package foo
sealed trait Bar
case class Qux() extends Bar
case class Baz() extends Bar
We currently serialize Qux()
and Baz()
to
{"$type": "foo.Qux"}
{"$type": "foo.Baz"}
We should instead serialize them to
{"$type": "Qux"}
{"$type": "Baz"}
As long as all the case
s of the sealed trait
are in the same namespace (foo
above), using the short name is safe.
It also has several advantages: it is easier to read, results in more compact JSON, and is more stable in case the pacakge foo
gets renamed to foo2
.
The serialization would still be broken if e.g. Baz
got moved into package sub{ case class Baz() }
, but that is (a) already the case today and (b) this is sufficiently uncommon a refactor that it's probably not worth worrying about
This would be a breaking change in the serialization format and would need to wait for upickle 4.0.0
Metadata
Metadata
Assignees
Labels
compat-breakerThis PR is good to merge, but breaks compatibility and needs to wait till we prepare a major releaseThis PR is good to merge, but breaks compatibility and needs to wait till we prepare a major release