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