# `Phoenix.Socket.Serializer`
[🔗](https://github.com/phoenixframework/phoenix/blob/v1.8.12/lib/phoenix/socket/serializer.ex#L1)

A behaviour that serializes incoming and outgoing socket messages.

By default Phoenix provides a serializer that encodes to JSON and
decodes JSON messages.

Custom serializers may be configured in the socket.

# `decode!`

```elixir
@callback decode!(iodata(), options :: Keyword.t()) :: Phoenix.Socket.Message.t()
```

Decodes iodata into `Phoenix.Socket.Message` struct.

# `encode!`

```elixir
@callback encode!(Phoenix.Socket.Message.t() | Phoenix.Socket.Reply.t()) ::
  {:socket_push, :text, iodata()} | {:socket_push, :binary, iodata()}
```

Encodes `Phoenix.Socket.Message` and `Phoenix.Socket.Reply` structs to push format.

# `fastlane!`

```elixir
@callback fastlane!(Phoenix.Socket.Broadcast.t()) ::
  {:socket_push, :text, iodata()} | {:socket_push, :binary, iodata()}
```

Encodes a `Phoenix.Socket.Broadcast` struct to fastlane format.

---

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