envelope: Defines generic 'Envelope' type to wrap reponses from a JSON API.

[ bsd3, library, web ] [ Propose Tags ]

Please see README.md


[Skip to Readme]

Modules

[Index]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

  • No Candidates
Versions [RSS] 0.1.0.0, 0.2.0.0, 0.2.0.1, 0.2.1.0, 0.2.2.0
Dependencies aeson (>=0.11), base (>=4.8 && <5), http-api-data (>=0.3), mtl (>=2.2), text (>=1.2) [details]
License BSD-3-Clause
Copyright 2016-2017 Dennis Gosnell
Author Dennis Gosnell
Maintainer cdep.illabout@gmail.com
Category Web
Home page https://github.com/cdepillabout/envelope#readme
Source repo head: git clone git@github.com:cdepillabout/envelope.git
Uploaded by cdepillabout at 2017-04-19T06:24:15Z
Distributions LTSHaskell:0.2.2.0, Stackage:0.2.2.0
Reverse Dependencies 1 direct, 0 indirect [details]
Downloads 3893 total (24 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2017-04-19 [all 1 reports]

Readme for envelope-0.2.2.0

[back to package description]

Web.Envelope

Build Status Hackage Stackage LTS Stackage Nightly BSD3 license

This module exports an Envelope type that can be used to wrap reponses from a JSON REST API. It provides a successful Success response, and a failure Err response.

Here is a small demonstration of returning a success response:

>>> import qualified Data.ByteString.Lazy.Char8 as C8
>>> import Data.Aeson (decode, encode)
>>> let successEnvelope = toSuccessEnvelope 3 :: Envelope Text Int
>>> C8.putStrLn $ encode successEnvelope
{"data":3}
>>> decode "{\"data\":3}" :: Maybe (Envelope Text Int)
Just (EnvelopeSuccess (Success 3))

Your data gets wrapped in an object with a single "data" field:

{
    "data": 3
}

Now lets look at how an error response is encoded and decoded. It is encoded as an object with two members: @"extra"@ and @"error"@.

>>> let errorEnvelope = toErrEnvelope "DB_ERROR" "there was an error in the database" :: Envelope String Int
>>> C8.putStrLn $ encode errorEnvelope
{"extra":"there was an error in the database","error":"DB_ERROR"}
>>> decode "{\"extra\":\"there was an error in the database\",\"error\":\"DB_ERROR\"}" :: Maybe (Envelope String Int)
Just (EnvelopeErr (Err {errErr = "DB_ERROR", errExtra = Just "there was an error in the database"}))

Your error type and extra message get wrapped in an object:

{
    "extra": "there was an error in the database",
    "error": "DB_ERROR"
}