Как указать собственный сериализатор Phoenix Channel JSON? - PullRequest
0 голосов
/ 09 мая 2020

В моей конечной точке у меня есть что-то вроде:

  socket "/socket", MarsWeb.UserSocket,
    websocket: [transport: Phoenix.Transports.WebSocket, serializer: {MarsWeb.JsonCamelSerializer, "~>2.0"}],

Я пытаюсь заменить сериализатор JSON своим собственным (который кодирует верблюжий регистр в исходящих сообщениях).

Я знаю, что этот синтаксис неверен; как это должно выглядеть?

Обновление:

Итак, с целью тестирования я настроил его так:

  socket "/socket", MarsWeb.UserSocket,
       websocket: [transport: Phoenix.Transports.Websocket, serializer: 
       Phoenix.Socket.V2.JSONSerializer]

Но на самом деле это не работает:

** (FunctionClauseError) no function clause matching in Phoenix.Socket.negotiate_serializer/2
    (phoenix 1.4.15) lib/phoenix/socket.ex:613: Phoenix.Socket.negotiate_serializer(Phoenix.Socket.V2.JSONSerializer, "2.0.0")

Я думаю, что есть дополнительная проблема с номером версии, и, глядя в исходный код, похоже, что ему нужен кортеж ...

1 Ответ

1 голос
/ 09 мая 2020

В конце вам нужно вставить список кортежей.

Мое решение было:

  socket "/socket", MarsWeb.UserSocket,
    websocket: [transport: Phoenix.Transports.Websocket, serializer: [{Phoenix.Socket.V1.JSONSerializer, "~> 1.0.0"}, {MarsWeb.JsonCamelSerializer, "~> 2.0.0"}]]
...