{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TypeOperators #-} -- | Auto generated module by json-autotype module Json.ProgressTypes where import Control.Applicative import Control.Monad (forM_, join, mzero) import Data.Aeson (FromJSON (..), ToJSON (..), Value (..), eitherDecode, object, pairs, (.:), (.:?), (.=)) import Data.Aeson.AutoType.Alternative import Data.ByteString.Lazy import qualified Data.ByteString.Lazy.Char8 as BSL import Data.Monoid import Data.Text (Text) import qualified GHC.Generics import System.Environment (getArgs) import System.Exit (exitFailure, exitSuccess) import System.IO (hPutStrLn, stderr) -- | Workaround for https://github.com/bos/aeson/issues/287. o .:?? val = fmap join (o .:? val) data Tasks = Tasks { } deriving (Show,Eq,GHC.Generics.Generic) instance FromJSON Tasks where parseJSON (Object v) = return Tasks parseJSON _ = mzero instance ToJSON Tasks where toJSON (Tasks {}) = object [] data Progress = Progress { progressStatus :: Text, progressJobId :: Text, progressTasks :: Tasks } deriving (Show,Eq,GHC.Generics.Generic) instance FromJSON Progress where parseJSON (Object v) = Progress <$> v .: "status" <*> v .: "jobId" <*> v .: "tasks" parseJSON _ = mzero instance ToJSON Progress where toJSON (Progress {..}) = object ["status" .= progressStatus, "jobId" .= progressJobId, "tasks" .= progressTasks] toEncoding (Progress {..}) = pairs ("status" .= progressStatus<>"jobId" .= progressJobId<>"tasks" .= progressTasks) data TopLevel = TopLevel { topLevelStatus :: Text, topLevelProgress :: Progress, topLevelMediaId :: Text } deriving (Show,Eq,GHC.Generics.Generic) instance FromJSON TopLevel where parseJSON (Object v) = TopLevel <$> v .: "status" <*> v .: "progress" <*> v .: "mediaId" parseJSON _ = mzero instance ToJSON TopLevel where toJSON (TopLevel {..}) = object ["status" .= topLevelStatus, "progress" .= topLevelProgress, "mediaId" .= topLevelMediaId] toEncoding (TopLevel {..}) = pairs ("status" .= topLevelStatus<>"progress" .= topLevelProgress<>"mediaId" .= topLevelMediaId) parse :: ByteString -> Either String TopLevel parse = eitherDecode