{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE TemplateHaskell #-}
module Network.AWS.Wolf.Types.Ctx where
import Control.Monad.Trans.AWS
import Network.AWS.SWF
import Network.AWS.Wolf.Prelude
import Network.AWS.Wolf.Types.Product
data ConfCtx = ConfCtx
{ _ccStatsCtx :: StatsCtx
, _ccConf :: Conf
}
$(makeClassyConstraints ''ConfCtx [''HasStatsCtx])
instance HasStatsCtx ConfCtx where
statsCtx = ccStatsCtx
instance HasCtx ConfCtx where
ctx = statsCtx . ctx
type MonadConf c m =
( MonadStatsCtx c m
, HasConfCtx c
)
data AmazonCtx = AmazonCtx
{ _acCtx :: Ctx
, _acEnv :: Env
}
$(makeClassyConstraints ''AmazonCtx [''HasCtx, ''HasEnv])
instance HasCtx AmazonCtx where
ctx = acCtx
instance HasEnv AmazonCtx where
environment = acEnv
type MonadAmazon c m =
( MonadCtx c m
, HasAmazonCtx c
, AWSConstraint c m
)
data AmazonStoreCtx = AmazonStoreCtx
{ _ascConfCtx :: ConfCtx
, _ascPrefix :: Text
}
$(makeClassyConstraints ''AmazonStoreCtx [''HasConfCtx])
instance HasConfCtx AmazonStoreCtx where
confCtx = ascConfCtx
instance HasStatsCtx AmazonStoreCtx where
statsCtx = confCtx . statsCtx
instance HasCtx AmazonStoreCtx where
ctx = statsCtx . ctx
type MonadAmazonStore c m =
( MonadConf c m
, HasAmazonStoreCtx c
)
data AmazonWorkCtx = AmazonWorkCtx
{ _awcConfCtx :: ConfCtx
, _awcQueue :: Text
}
$(makeClassyConstraints ''AmazonWorkCtx [''HasConfCtx])
instance HasConfCtx AmazonWorkCtx where
confCtx = awcConfCtx
instance HasStatsCtx AmazonWorkCtx where
statsCtx = confCtx . statsCtx
instance HasCtx AmazonWorkCtx where
ctx = statsCtx . ctx
type MonadAmazonWork c m =
( MonadConf c m
, HasAmazonWorkCtx c
)
data AmazonDecisionCtx = AmazonDecisionCtx
{ _adcConfCtx :: ConfCtx
, _adcPlan :: Plan
, _adcEvents :: [HistoryEvent]
}
$(makeClassyConstraints ''AmazonDecisionCtx [''HasConfCtx])
instance HasConfCtx AmazonDecisionCtx where
confCtx = adcConfCtx
instance HasStatsCtx AmazonDecisionCtx where
statsCtx = confCtx . statsCtx
instance HasCtx AmazonDecisionCtx where
ctx = statsCtx . ctx
type MonadAmazonDecision c m =
( MonadConf c m
, HasAmazonDecisionCtx c
)