This repository was archived by the owner on Nov 27, 2025. It is now read-only.

Description
Comment moved over from facet-rs/facet#326:
My use case that the serde ecosystem is struggling with is this:
#[derive(serde_derive::Serialize, serde_derive::Deserialize)]
#[serde(tag = "type")]
enum Outer {
OVar1,
#[serde(untagged)]
Inner(Inner),
}
#[derive(serde_derive::Serialize, serde_derive::Deserialize)]
#[serde(tag = "type")]
enum Inner {
IVar1,
IVar2,
}
Which should just work like
Outer::OVar1 ⭤ {"type":"OVar1"}
Outer::Inner(Inner::Ivar1) ⭤ {"type":"Ivar1"} ⭤ Inner::Ivar1
Outer::Inner(Inner::Ivar2) ⭤ {"type":"Ivar2"} ⭤ Inner::Ivar2
But also strange things happen like [0] deserializing to Outer::OVar1.
I feel like we can do better.