{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TypeOperators #-} -- | Auto generated module by json-autotype module Json.SubmitMediaTypes 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 Self = Self { selfHref :: Text } deriving (Show,Eq,GHC.Generics.Generic) instance FromJSON Self where parseJSON (Object v) = Self <$> v .: "href" parseJSON _ = mzero instance ToJSON Self where toJSON (Self {..}) = object ["href" .= selfHref] toEncoding (Self {..}) = pairs ("href" .= selfHref) data Links = Links { linksSelf :: Self } deriving (Show,Eq,GHC.Generics.Generic) instance FromJSON Links where parseJSON (Object v) = Links <$> v .: "self" parseJSON _ = mzero instance ToJSON Links where toJSON (Links {..}) = object ["self" .= linksSelf] toEncoding (Links {..}) = pairs ("self" .= linksSelf) data Metadata = Metadata { } deriving (Show,Eq,GHC.Generics.Generic) instance FromJSON Metadata where parseJSON (Object v) = return Metadata parseJSON _ = mzero instance ToJSON Metadata where toJSON (Metadata {}) = object [] data TopLevel = TopLevel { topLevelStatus :: Text, topLevelMediaId :: Text, topLevelLinks :: Links, topLevelMetadata :: Metadata } deriving (Show,Eq,GHC.Generics.Generic) instance FromJSON TopLevel where parseJSON (Object v) = TopLevel <$> v .: "status" <*> v .: "mediaId" <*> v .: "_links" <*> v .: "metadata" parseJSON _ = mzero instance ToJSON TopLevel where toJSON (TopLevel {..}) = object ["status" .= topLevelStatus, "mediaId" .= topLevelMediaId, "_links" .= topLevelLinks, "metadata" .= topLevelMetadata] toEncoding (TopLevel {..}) = pairs ("status" .= topLevelStatus<>"mediaId" .= topLevelMediaId<>"_links" .= topLevelLinks<>"metadata" .= topLevelMetadata) parse :: ByteString -> Either String TopLevel parse = eitherDecode