# `Volt.HMR.Message`
[🔗](https://github.com/elixir-volt/volt/blob/v0.16.0/lib/volt/hmr/message.ex#L1)

JSON message sent over the HMR WebSocket protocol.

Uses `JSONCodec` for struct<->JSON (de)serialization. `Jason` is still used
for the final binary encoding of the dumped map.

## Wire types

  * `update` — an HMR update payload (`path`, `changes`, optional `boundary`, `timestamp`)
  * `error` — a build/runtime error to surface in the overlay
  * `ping` — heartbeat sent by the browser client
  * `pong` — heartbeat reply from the server

# `t`

```elixir
@type t() :: %Volt.HMR.Message{
  payload: term() | nil,
  type: :update | :error | :ping | :pong
}
```

# `decode`

Decodes a JSON string into this struct.

# `decode!`

Decodes a JSON string into this struct, raising on failure.

# `dump`

Dumps this struct into JSON-shaped data, respecting JSON field names.

# `from_map`

Builds this struct from a decoded JSON map.

# `from_map!`

Builds this struct from a decoded JSON map, raising on failure.

# `json_schema`

Returns a JSON Schema-compatible schema map.

# `schema`

Returns a JSON Schema-compatible schema map.

# `to_map`

Converts this struct into a JSON-shaped map.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
