github.com/simpleiot/simpleiot@v0.18.3/frontend/src/Api/Data.elm (about)

     1  module Api.Data exposing
     2      ( Data(..)
     3      , errorToString
     4      , expectJson
     5      , toMaybe
     6      )
     7  
     8  import Http
     9  import Json.Decode as Json
    10  
    11  
    12  type Data value
    13      = NotAsked
    14      | Failure Http.Error
    15      | Success value
    16  
    17  
    18  toMaybe : Data value -> Maybe value
    19  toMaybe data =
    20      case data of
    21          Success value ->
    22              Just value
    23  
    24          _ ->
    25              Nothing
    26  
    27  
    28  expectJson : (Data value -> msg) -> Json.Decoder value -> Http.Expect msg
    29  expectJson toMsg decoder =
    30      Http.expectStringResponse (fromResult >> toMsg) <|
    31          \response ->
    32              case response of
    33                  Http.BadUrl_ url ->
    34                      Err (Http.BadUrl url)
    35  
    36                  Http.Timeout_ ->
    37                      Err Http.Timeout
    38  
    39                  Http.NetworkError_ ->
    40                      Err Http.NetworkError
    41  
    42                  Http.BadStatus_ metadata _ ->
    43                      Err (Http.BadStatus metadata.statusCode)
    44  
    45                  Http.GoodStatus_ _ body ->
    46                      case Json.decodeString decoder body of
    47                          Ok value ->
    48                              Ok value
    49  
    50                          Err err ->
    51                              Err (Http.BadBody (Json.errorToString err))
    52  
    53  
    54  fromResult : Result Http.Error value -> Data value
    55  fromResult result =
    56      case result of
    57          Ok value ->
    58              Success value
    59  
    60          Err reasons ->
    61              Failure reasons
    62  
    63  
    64  errorToString : Http.Error -> String
    65  errorToString err =
    66      case err of
    67          Http.BadUrl url ->
    68              "Malformed url: " ++ url
    69  
    70          Http.Timeout ->
    71              "Timeout exceeded"
    72  
    73          Http.NetworkError ->
    74              "Network error"
    75  
    76          Http.BadStatus resp ->
    77              "Bad status: " ++ String.fromInt resp
    78  
    79          Http.BadBody resp ->
    80              "Bad body: " ++ resp