pushover-0.1.0.1: src/Network/Pushover/Response.hs
{-# LANGUAGE OverloadedStrings #-}
{-| This module defines the 'Response' and 'ResponseSuccess' types.
-}
module Network.Pushover.Response where
import Data.Aeson hiding (Success)
import Data.Text (Text)
import qualified Data.Text as T
-- | Describes a response received to a notification request. This follows the
-- specification at @https://pushover.net/api#response@.
--
-- A request will either be successful or it will be unsuccessful. Where it is
-- successful, an appropriate status indicator is returned. Where unsuccessful,
-- the response will contain an errors key with a list of errors within the
-- request.
--
-- In both cases, a request parameter is returned which uniquely identifies the
-- request leading to the response.
data Response = Response
{ status :: ResponseStatus
, request :: Text
} deriving Show
instance FromJSON Response where
parseJSON (Object v) =
Response
<$> parseJSON (Object v)
<*> v .: "request"
-- | Describes a Pushover response status.
--
-- A request is either successful or unsuccessful. This is reflected in this
-- type. Success has no additional data associated with it; failure has a list
-- of errors associated.
data ResponseStatus
= Success
| Failure [RequestError]
deriving Show
instance FromJSON ResponseStatus where
parseJSON (Object v) = do
status <- v .: "status"
case (status :: Integer) of
1 ->
pure Success
0 ->
Failure <$> v .: "errors"
type RequestError =
Text