Current section

Files

Jump to
phoenix lib phoenix transports websocket_serializer.ex
Raw

lib/phoenix/transports/websocket_serializer.ex

defmodule Phoenix.Transports.WebSocketSerializer do
@moduledoc false
@behaviour Phoenix.Transports.Serializer
alias Phoenix.Socket.Reply
alias Phoenix.Socket.Message
alias Phoenix.Socket.Broadcast
@doc """
Translates a `Phoenix.Socket.Broadcast` into a `Phoenix.Socket.Message`.
"""
def fastlane!(%Broadcast{} = msg) do
{:socket_push, :text, Poison.encode_to_iodata!(%Message{
topic: msg.topic,
event: msg.event,
payload: msg.payload
})}
end
@doc """
Encodes a `Phoenix.Socket.Message` struct to JSON string.
"""
def encode!(%Reply{} = reply) do
{:socket_push, :text, Poison.encode_to_iodata!(%Message{
topic: reply.topic,
event: "phx_reply",
ref: reply.ref,
payload: %{status: reply.status, response: reply.payload}
})}
end
def encode!(%Message{} = msg) do
{:socket_push, :text, Poison.encode_to_iodata!(msg)}
end
@doc """
Decodes JSON String into `Phoenix.Socket.Message` struct.
"""
def decode!(message, _opts) do
message
|> Poison.decode!()
|> Phoenix.Socket.Message.from_map!()
end
end