Я пишу Plug Parser, который, помимо прочего, декодирует JSON с использованием Poison (я бы предпочел, чтобы Plug.Parsers.JSON
сделал это, но мне нужно прочитать необработанное тело запроса, чтобы проверить его по сигнатуре, так что это не так возможно).
Я использую Poison.decode/2
для декодирования JSON. Это возвращает {:error, ...}
кортеж при ошибке. Как синтаксический анализатор Plug, я думаю, что ожидается повышение Plug.Parsers.ParseError
, если во время синтаксического анализа произошла ошибка. Однако ParseError
ожидает структуру exception
. У меня нет одного из них, у меня есть только кортеж, возвращенный с Poison.decode/2
.
В качестве обходного пути я могу использовать Poison.decode!/2
и rescue
повышенную ошибку, повторно поднимая ее как ParseError
, но это кажется странным, когда без повышения decode/2
есть в наличии.
Итак, мои вопросы в возрастающей абстрактности:
- Как мне вызвать
ParseError
из анализатора без исключения источника?
- Мне нужно поднять
ParseError
, или лучше поднять мое собственное исключение?
- Есть ли вообще лучший способ, позволяющий мне проверять подпись без повторной реализации анализа JSON?