{-# LANGUAGE TypeFamilies , MultiParamTypeClasses , FlexibleInstances , OverloadedStrings , TemplateHaskell #-} -- boilerplate minimization for experimental stuff -- also a hub for module re-exports for query commands module Aws.Query.TH ( module Aws.Core , module Aws.Query , Text , UTCTime , FromJSON , queryValueTransactionDef , queryValueTransaction ) where import Language.Haskell.TH import Language.Haskell.TH.Lib import Language.Haskell.TH.Syntax import Data.Text (Text) import Data.Aeson.Types (FromJSON(..)) import Data.Time.Clock (UTCTime) import Aws.Core import Aws.Query queryValueTransactionDef :: Name -> Name -> String -> Name -> Name -> String -> String -> DecsQ queryValueTransactionDef ty cons tag signF version item filterKey = do arg <- newName "arg" [d| instance SignQuery $(conT ty) where type ServiceConfiguration $(conT ty) = QueryAPIConfiguration signQuery ($(conP cons [varP arg])) = $(varE signF) $ [ ("Action", qArg $(stringE $ nameBase ty)) , $(varE version) ] +++ enumerate $(stringE filterKey) $(varE arg) qArg instance ResponseConsumer $(conT ty) Value where type ResponseMetadata Value = QueryMetadata responseConsumer _ = queryResponseConsumer $ valueConsumerOpt (XMLValueOptions $(stringE item)) $(stringE tag) fromJSONConsumer instance Transaction $(conT ty) Value |] queryValueTransaction :: Name -> String -> DecsQ queryValueTransaction ty tag = [d| instance ResponseConsumer $(conT ty) Value where type ResponseMetadata Value = QueryMetadata responseConsumer _ = queryResponseConsumer $ valueConsumer $(stringE tag) fromJSONConsumer instance Transaction $(conT ty) Value |]