I am working on an Elm task to decode the JSON from API. The problem I met is the decoder I've written is not matched the JSON so I want to show the error. But I cannot convert the error message from #Http.Error#
type to #String#
type in Elm with toString
function. Here is the code:
type Model =
Loading
| Failure String
| Success (List WishlistItem)
| NoData
update msg model =
case msg of
GotItems (Ok result) ->
(Success result.data.wish_list_items, Cmd.none)
GotItems (Err errorString) ->
(Failure (toString errorString), Cmd.none)
▔▔▔▔▔▔▔▔
The error was:
NAMING ERROR - I cannot find a
toString
variable:168| (Failure (toString errorString), Cmd.none)
I try with Basics.toString
but it not work. Can anyone help me to point out the problem?
P/s 1: I am using Elm 0.19
P/s 2: And is there another way to find the problem when decoding the JSON with NoRedInk/elm-decode-pipeline
package? I tried with Debug.log
but it just printed the function
and have no idea how to debug. It's really hard to know where is the problem.
If you're getting back an Http.Error
, it will have five possible values:
type Error
= BadUrl String
| Timeout
| NetworkError
| BadStatus Int
| BadBody String
If it's an issue with JSON decoding, it'll be BadBody
, and the String
will be the error message from the JSON decoder. You might want a function like this:
errorToString : Http.Error -> String
errorToString error =
case error of
BadUrl url ->
"The URL " ++ url ++ " was invalid"
Timeout ->
"Unable to reach the server, try again"
NetworkError ->
"Unable to reach the server, check your network connection"
BadStatus 500 ->
"The server had a problem, try again later"
BadStatus 400 ->
"Verify your information and try again"
BadStatus _ ->
"Unknown error"
BadBody errorMessage ->
errorMessage
toString
was removed in Elm 0.19. There is now Debug.toString
, but it cannot be used in production applications (i.e. when --optimize
is passed to elm make
, it will fail when it finds Debug.toString
)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With