使用RemoteData解码非JSON响应

时间:2018-04-01 16:28:21

标签: http elm

我想使用RemoteData来表示一些不是JSON的数据,我无法弄清楚自定义解码器的位置。我有这些类型:

Http.getString : String -> Request String
RemoteData.sendRequest : Request a -> Cmd (WebData a)
Foo.decode : String -> Result String (List Foo)

现在我想要一条ReceiveFoos (RemoteData String (List Foo))消息来接收已经解码(或失败)的响应。我该怎么做?

或者,一般情况下,我可以以某种方式将String -> Something解码器提供给Http.get,类似于开箱即用的JSON解码案例吗?

1 个答案:

答案 0 :(得分:6)

您可以使用expectStringResponse使用自定义解码器构建自定义请求。

例如,这里是Http.get的变体,它允许您指定接收完整字符串响应正文的解码器:

getStringResponse : String -> (Http.Response String -> Result String a) -> Http.Request a
getStringResponse url decoder =
  Http.request
    { method = "GET"
    , headers = []
    , url = url
    , body = Http.emptyBody
    , expect = Http.expectStringResponse decoder
    , timeout = Nothing
    , withCredentials = False
    }

(请注意,这看起来很像implementation of the JSON version, Http.get