How to add customize serializer in phoenix 1.5.1?

I follow this article to add my serializer, seems not correct add the line
serializer: [{GMessage.Serializer.Raw, “~> 1.0.0”}] to channels/user_socket.ex

already googled and search the forum, can not find answer.

setting-up-phoenix-channels-to-use-messagepack-for-serialization

here is my channels/user_socket.ex

defmodule MyApp.UserSocket do
  use Phoenix.Socket

  ## Channels

  channel "message:*", MyAppWeb.DmessageChannel

  serializer: [{MyApp.Serializer.Raw, "~> 1.0.0"}]

@impl true
  def connect(_params, socket, _connect_info) do
    {:ok, socket}
  end

@impl true
  def id(_socket), do: nil
end

here is the serializer from @ hauleth

defmodule MyApp.Serializer.Raw do
  @behaviour Phoenix.Socket.Serializer

  def decode!(iodata, _options) do
    %Phoenix.Socket.Message{payload: List.to_string(iodata)}
  end

  def encode!(%{payload: data}) do
    {:socket_push, :binary, data}
  end

  def fastlane!(%{payload: data}), do: {:socket_push, :binary, data}
end

Try replacing "~> 1.0.0" with "2.0.0" like this:

serializer: [{MyApp.Serializer.Raw, "2.0.0"}]

This worked for me when I built a custom serializer a while back. But, in my case I added the custom serializer to socket in MyApp.Endpoint like so:

socket "/socket", MyApp.UserSocket,
  websocket: [
    serializer: [{MyApp.Serializer.Raw, "2.0.0"}]
  ],
  longpoll: false
2 Likes

It works. The custom serializer triggered.
Thanks!

1 Like