{-# LANGUAGE DeriveGeneric, OverloadedStrings, RecordWildCards #-} module System.CloudFoundry.Environment.Internal.VcapApplicationDecoder ( VcapApplication(..) , decode ) where import GHC.Generics import Data.Aeson ((.:)) import qualified Data.Aeson as Aeson import qualified Data.ByteString.Lazy.Char8 as LazyByteString import System.CloudFoundry.Environment.Internal.Types data VcapApplication = VcapApplication { appId :: String , applicationUris :: [String] , cfApi :: String , host :: String , instanceId :: String , index :: Int , limits :: Limits , appName :: String -- , port :: Int , spaceId :: String , spaceName :: String , version :: String } deriving (Eq, Show, Generic) instance Aeson.FromJSON VcapApplication where parseJSON = Aeson.withObject "VcapApplication" $ \o -> do appId <- o .: "application_id" applicationUris <- o .: "application_uris" cfApi <- o .: "cf_api" host <- o .: "host" instanceId <- o .: "instance_id" index <- o .: "instance_index" limits <- o .: "limits" appName <- o .: "name" spaceId <- o .: "space_id" spaceName <- o .: "space_name" version <- o .: "version" return VcapApplication{..} decode :: String -> Either String VcapApplication decode = Aeson.eitherDecode . LazyByteString.pack