Current section

Files

Jump to
phoenix lib phoenix socket serializers v2_json_serializer.ex
Raw

lib/phoenix/socket/serializers/v2_json_serializer.ex

defmodule Phoenix.Socket.V2.JSONSerializer do
@moduledoc false
@behaviour Phoenix.Socket.Serializer
alias Phoenix.Socket.{Broadcast, Message, Reply}
def fastlane!(%Broadcast{} = msg) do
data = Phoenix.json_library().encode_to_iodata!([nil, nil, msg.topic, msg.event, msg.payload])
{:socket_push, :text, data}
end
def encode!(%Reply{} = reply) do
data = [
reply.join_ref,
reply.ref,
reply.topic,
"phx_reply",
%{status: reply.status, response: reply.payload}
]
{:socket_push, :text, Phoenix.json_library().encode_to_iodata!(data)}
end
def encode!(%Message{} = msg) do
data = [msg.join_ref, msg.ref, msg.topic, msg.event, msg.payload]
{:socket_push, :text, Phoenix.json_library().encode_to_iodata!(data)}
end
def decode!(raw_message, _opts) do
[join_ref, ref, topic, event, payload | _] = Phoenix.json_library().decode!(raw_message)
%Phoenix.Socket.Message{
topic: topic,
event: event,
payload: payload,
ref: ref,
join_ref: join_ref
}
end
end