module Temporal.Activity.Types where

import Data.Map (Map)
import Data.Text (Text)
import Data.Time.Clock.System (SystemTime)
import Data.Vector (Vector)
import Data.Word (Word32)
import Temporal.Common
import Temporal.Duration
import Temporal.Payload


{- | 'ActivityInfo' provides information about the currently executing activity.

It can be used for logging, introspection, etc.
-}
data ActivityInfo = ActivityInfo
  { ActivityInfo -> Namespace
workflowNamespace :: Namespace
  , ActivityInfo -> WorkflowType
workflowType :: WorkflowType
  , ActivityInfo -> WorkflowId
workflowId :: WorkflowId
  , ActivityInfo -> RunId
runId :: RunId
  , ActivityInfo -> ActivityId
activityId :: ActivityId
  , ActivityInfo -> Text
activityType :: Text
  , ActivityInfo -> Map Text Payload
headerFields :: Map Text Payload
  , -- input
    ActivityInfo -> Vector Payload
heartbeatDetails :: Vector Payload
  , ActivityInfo -> SystemTime
scheduledTime :: SystemTime
  , ActivityInfo -> SystemTime
currentAttemptScheduledTime :: SystemTime
  , ActivityInfo -> SystemTime
startedTime :: SystemTime
  , ActivityInfo -> Word32
attempt :: Word32
  , -- TODO, are we in charge of honoring these timeouts?
    -- Or does the server send cancel requests if we don't?
    ActivityInfo -> Maybe Duration
scheduleToCloseTimeout :: Maybe Duration
  , ActivityInfo -> Maybe Duration
startToCloseTimeout :: Maybe Duration
  , ActivityInfo -> Maybe Duration
heartbeatTimeout :: Maybe Duration
  , ActivityInfo -> Maybe RetryPolicy
retryPolicy :: Maybe RetryPolicy
  , ActivityInfo -> Bool
isLocal :: Bool
  , ActivityInfo -> TaskToken
taskToken :: TaskToken
  }
  deriving stock (Int -> ActivityInfo -> ShowS
[ActivityInfo] -> ShowS
ActivityInfo -> String
(Int -> ActivityInfo -> ShowS)
-> (ActivityInfo -> String)
-> ([ActivityInfo] -> ShowS)
-> Show ActivityInfo
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ActivityInfo -> ShowS
showsPrec :: Int -> ActivityInfo -> ShowS
$cshow :: ActivityInfo -> String
show :: ActivityInfo -> String
$cshowList :: [ActivityInfo] -> ShowS
showList :: [ActivityInfo] -> ShowS
Show, ActivityInfo -> ActivityInfo -> Bool
(ActivityInfo -> ActivityInfo -> Bool)
-> (ActivityInfo -> ActivityInfo -> Bool) -> Eq ActivityInfo
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ActivityInfo -> ActivityInfo -> Bool
== :: ActivityInfo -> ActivityInfo -> Bool
$c/= :: ActivityInfo -> ActivityInfo -> Bool
/= :: ActivityInfo -> ActivityInfo -> Bool
Eq)