Добавить 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
в кодировщике, чтобы получить статус.