# XO0431: a tagged enum's variant whose payload is not an object

An internally tagged enum writes its variant's name under the tag key and the variant's fields beside it, in one object: `{"type":"say","text":"hi"}`. A variant with named fields, or with one field that is a struct, has fields to put there; a variant holding an `Int`, a `Str` or a `List` does not. Give the variant named fields, wrap a struct, or add `content: "KEY"` to the derive, which puts every payload under its own key (`{"type":"count","value":3}`). See core 2.3 and decision 0478.

## Example

```xo
enum Msg {
  Count(from Int)
  Ping
} derive Json(tag: "type")
```

## Fix

```xo
enum Msg {
  Count(n: Int)
  Ping
} derive Json(tag: "type")
```

Run `xo explain XO0431` for this text in a terminal, or see
[section 10.6 of the specification](../../spec/core/#106-diagnostic-codes).

