Подтвердить что ты не робот

Как я могу получить сообщение об ошибке из Http.Error?

Я пытаюсь выполнить упражнение в учебнике Elm 0.17 для HTTP. Если выборка gif не удалась, я хотел бы сообщить пользователю, почему она не сгенерирована с сообщением об ошибке.

Я изменил свою модель:

type alias Model =
  { topic : String
  , gifUrl : String
  , errorMessage : String
  }

И получить сбой при обновлении:

FetchFail error ->
  (Model model.topic model.gifUrl (errorMessage error), Cmd.none)

Где функция errorMessage выглядит следующим образом:

errorMessage : Http.Error -> String
errorMessage error =
  case error of
    Http.Timeout ->
      "Timeout"
    Http.NetworkError  ->
      "Network Error"
    Http.UnexpectedPayload _ ->
      "UnexpectedPayload"
    Http.BadResponse _ _ ->
      "BadResponse"

Вышеуказанная функция кажется мне ненужной котельной. Есть ли способ, с помощью которого я могу напрямую преобразовать Http.Error в строку?

4b9b3361

Ответ 1

Вы можете преобразовать что угодно в строку, используя toString. Это даст вам почти тот же результат, что и ваши аргументы case:

toString Timeout == "Timeout"
toString NetworkError == "NetworkError"
toString (UnexpectedPayload "Error") == "UnexpectedPayload \"Error\"" 
toString (BadResponse 500 "Error") == "BadResponse 500 \"Error\""

Просто замените вызов на errorMessage на toString и вы можете полностью избавиться от errorMessage:

FetchFail error ->
  (Model model.topic model.gifUrl (toString error), Cmd.none)