{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE TemplateHaskell   #-}

-- | Various product types.
--
module Network.AWS.Loup.Types.Product
  ( module Network.AWS.Loup.Types.Product
  , ActivityType
  , atName
  , atVersion
  , TaskList
  , tlName
  ) where

import Data.Aeson.TH
import Network.AWS.Loup.Prelude
import Network.AWS.Loup.Types.Alias
import Network.AWS.SWF

-- | Task
--
-- Activity and Decision task.
--
data Task = Task
  { _tActivityType :: ActivityType
    -- ^ Activity type.
  , _tTaskList     :: TaskList
    -- ^ Task list.
  } deriving (Show, Eq)

$(makeLenses ''Task)
$(deriveJSON spinalOptions ''Task)

-- | Plan
--
-- Group of tasks.
--
data Plan = Plan
  { _pDecisionTask :: Task
    -- ^ Decision task.
  , _pActivityTask :: Task
    -- ^ Activity task.
  } deriving (Show, Eq)

$(makeLenses ''Plan)
$(deriveJSON spinalOptions ''Plan)

-- | Pool
--
-- Pool of workers associated with a task.
--
data Pool = Pool
  { _pTask    :: Task
    -- ^ Workers task.
  , _pWorkers :: InputMap
    -- ^ Workers input map.
  } deriving (Show, Eq)

$(makeLenses ''Pool)
$(deriveJSON spinalOptions ''Pool)