jinjor/elm-req/1.1.0

NOTE: the latest version is 3.0.0

Rerouted (retagged, needs approval). The tag now points at a different commit than when this version was published. The Lamdera package server serves a copy recovered from https://github.com/jinjor/elm-req.

What we checked: Tag 1.1.0 is still on github.com/jinjor/elm-req; its commit dddb0d30ed61 is from 2018-12-01 18:17 UTC, after the version was published (2018-12-01 17:33 UTC); elm.json is byte-identical to package.elm-lang.org's; the exposed modules match docs.json; the zip's SHA-1 is not the published one and nothing else confirms its contents.

We could not verify this copy against what was published, so the Lamdera compiler asks before using it (y/n). Without a terminal, as in CI, it stops with an error unless approved:

  • lamdera make --auto-approve-package-rerouting approves rerouted versions for that run,
  • LAMDERA_AUTO_APPROVE_PACKAGE_REROUTING=1 does the same for every run in that environment,
  • LAMDERA_CACHE=off skips the Lamdera package server altogether: packages come from package.elm-lang.org and GitHub only, as with elm, and a rerouted version then fails to download.

Details · package.elm-lang.org's zip: https://github.com/jinjor/elm-req/zipball/1.1.0/

elm-req

An experimental alternative for elm/http.

Warning: Not fully tested yet

Motivation

  • Use Tasks more.
  • Use put patch and delete.
  • Build options one by one.
  • Get full information in requests/responses to describe errors.
  • Switch from Cmd to Task gradually (and vice versa).
  • Switch from Http.Error to custom error gradually.
  • Explicitly say what is risky.

Examples

Create a task that works just like get.

getUserSimple : String -> Task Http.Error User
getUserSimple userName =
    Req.get ("https://api.github.com/users/" ++ userName)
        |> Req.stringTask (Req.simplyResolveJson userDecoder)

Use Req.Error instead of Http.Error to get more information.

type Error a
    = BadUrl String
    | Timeout
    | NetworkError
    | BadStatus Http.Metadata a
    | BadBody Http.Metadata String


getRepo : String -> String -> Task (Req.Error ErrorInfo) Repo
getRepo userName repoName =
    Req.get ("https://api.github.com/repos/" ++ userName ++ "/" ++ repoName)
        |> Req.stringTask
            (Req.resolveJson
                { decoder = repoDecoder, errorDecoder = errorDecoder }
            )

Use Req.ReqWithError to get full information of the request.

type alias ReqWithError a =
    { request : Req
    , error : Error a
    }


getRepo : String -> String -> Task (Req.ReqWithError ErrorInfo) Repo
getRepo userName repoName =
    Req.get ("https://api.github.com/repos/" ++ userName ++ "/" ++ repoName)
        |> Req.stringTask
            (Req.resolveJsonWithReq
                { decoder = repoDecoder, errorDecoder = errorDecoder }
            )