module Network.Api.Types where
import Data.Text (Text)
import Data.Aeson ((.:), Value(..), FromJSON(..), (.:?))
import Control.Applicative (empty, (<*>))
import Data.Functor ((<$>))
data Error = Error
{ ecode :: Int
, emessage :: Text
} deriving (Eq,Ord,Show)
instance FromJSON Error where
parseJSON (Object v) = Error <$> v .: "code" <*> v .: "message"
parseJSON _ = empty
data Warning = Warning
{ wcode :: Int
, wmessage :: Text
} deriving (Eq,Ord,Show)
instance FromJSON Warning where
parseJSON (Object v) = Warning <$> v .: "code" <*> v .: "message"
parseJSON _ = empty
data TLStatus
= Success
| Failure
deriving (Show,Eq,Ord)
instance FromJSON TLStatus where
parseJSON (String v) =
if (v == "success")
then return Success
else return Failure
parseJSON _ = empty
data TLResponse = TLResponse
{ status :: TLStatus
, warnings :: Maybe [Warning]
, errors :: Maybe [Error]
} deriving (Eq,Ord,Show)
instance FromJSON TLResponse where
parseJSON (Object resp) =
TLResponse <$> resp .: "status" <*> resp .:? "warnings" <*>
resp .:? "errors"
parseJSON _ = empty