我正在编写一个插件解析器,其中包括使用 Poison 解码 JSON(我更愿意Plug.Parsers.JSON
这样做,但我需要读取原始请求正文以根据签名验证它,所以这是不可能的)。
我Poison.decode/2
用来解码json。{:error, ...}
这会在错误时返回一个元组。Plug.Parsers.ParseError
作为 Plug 解析器,我认为如果在解析过程中出现错误,我应该提出。但是ParseError
需要一个exception
结构。我没有其中之一,我只有从Poison.decode/2
.
作为一种解决方法,我可以使用 usePoison.decode!/2
和rescue
引发的错误,将其重新提升为 a ParseError
,但是当非提升decode/2
可用时,这似乎很奇怪。
所以我的问题是,越来越抽象:
- 如何在
ParseError
没有源异常的情况下从解析器引发? - 我需要提出
ParseError
,还是提出我自己的例外更好? - 有没有更好的方法,允许我在不重新实现 JSON 解析的情况下验证签名?