Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/cdepillabout/envelope
Envelope type used to return responses from a JSON API for Haskell
https://github.com/cdepillabout/envelope
envelope haskell json json-api response wrapper
Last synced: about 1 month ago
JSON representation
Envelope type used to return responses from a JSON API for Haskell
- Host: GitHub
- URL: https://github.com/cdepillabout/envelope
- Owner: cdepillabout
- License: bsd-3-clause
- Created: 2016-04-06T07:24:27.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2017-04-19T06:25:10.000Z (over 7 years ago)
- Last Synced: 2024-04-24T22:02:39.542Z (8 months ago)
- Topics: envelope, haskell, json, json-api, response, wrapper
- Language: Haskell
- Homepage: https://hackage.haskell.org/package/envelope
- Size: 18.6 KB
- Stars: 4
- Watchers: 4
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
Web.Envelope
============[![Build Status](https://secure.travis-ci.org/cdepillabout/envelope.svg)](http://travis-ci.org/cdepillabout/envelope)
[![Hackage](https://img.shields.io/hackage/v/envelope.svg)](https://hackage.haskell.org/package/envelope)
[![Stackage LTS](http://stackage.org/package/envelope/badge/lts)](http://stackage.org/lts/package/envelope)
[![Stackage Nightly](http://stackage.org/package/envelope/badge/nightly)](http://stackage.org/nightly/package/envelope)
![BSD3 license](https://img.shields.io/badge/license-BSD3-blue.svg)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:
```haskell
>>> 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:
```json
{
"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\"@.```haskell
>>> 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:
```json
{
"extra": "there was an error in the database",
"error": "DB_ERROR"
}
```