speechmatics-0.3.1.0: src/Speechmatics/JSON/PeekJob.hs
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE DeriveGeneric #-}
-- | Generated from json response, now it's type safe, see the tests
module Speechmatics.JSON.PeekJob where
import System.Exit (exitFailure, exitSuccess)
import System.IO (stderr, hPutStrLn)
import qualified Data.ByteString.Lazy.Char8 as BSL
import System.Environment (getArgs)
import Control.Monad (forM_, mzero, join)
import Control.Applicative
import Data.Aeson.AutoType.Alternative
import Data.Aeson(decode, Value(..), FromJSON(..), ToJSON(..),
pairs, eitherDecode ,
(.:), (.:?), (.=), object)
import Data.Monoid
import Data.Text (Text)
import Data.Bifunctor
import qualified GHC.Generics
-- | Workaround for https://github.com/bos/aeson/issues/287.
o .:?? val = fmap join (o .:? val)
data Job = Job {
jobCheckWait :: (Maybe Integer)
} deriving (Show,Eq,GHC.Generics.Generic)
instance FromJSON Job where
parseJSON (Object v) = Job <$> v .:?? "check_wait"
parseJSON _ = mzero
data TopLevel = TopLevel {
topLevelJob :: Job
} deriving (Show,Eq,GHC.Generics.Generic)
instance FromJSON TopLevel where
parseJSON (Object v) = TopLevel <$> v .: "job"
parseJSON _ = mzero
parse :: BSL.ByteString -> Either String Job
parse = (second topLevelJob) -- get rid of toplevel
. eitherDecode