{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE DeriveGeneric #-}
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
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)
. eitherDecode