Добавить HTTP-статус в JSON в кодировке Poison перед отправкой

Есть ли способ поместить статус HTTP в определенную структуру, прежде чем она будет закодирована Poison?

Я предполагаю, что более общий вопрос будет ли я получить доступ к conn на уровне моего кодера encode функционировать? Я пытаюсь создать API, похожий на то, что указано здесь: http://jsonapi.org/examples/

В моей функции контроллера у меня есть это, которое прозрачно ставит статус HTTP, прежде чем запрос будет отправлен за дверь. Однако, если какой-либо плагин изменяет статус HTTP по конвейеру, то любой статус, который я установил при создании ApiMessage, также необходимо обновить.

conn |> put_status(:forbidden) |> json(%ApiMessage{ status: 403, message: "Nope" })

Это структура, которую я хочу закодировать:

defmodule MyApp.ApiMessage do
  @enforce_keys [:message]

  defstruct message: nil, success: false, status: 422
end

Я хочу использовать пользовательский кодировщик, чтобы поставить статус HTTP до кодирования структуры, что-то вроде этого:

defimpl Poison.Encoder, for: [MyApp.ApiMessage] do
  def encode(t, _options) do
    # get conn here somehow and set the status to current
    # conn status
  end
end

Возможно ли это сделать в Фениксе? Я думаю, что мне нужно только выяснить, как получить финал conn в кодировщике, чтобы получить статус.

0 ответов

Другие вопросы по тегам