{-# LANGUAGE OverloadedStrings #-}

-- | Typed encoding and decoding for PostgreSQL queries.
--
--   * 'RowCodec' decodes result rows. It is a free applicative that each backend
--     (postgresql-simple, hasql, orville) interprets natively.
--
--   * 'Params' is the typed parameter list for query execution.
--
-- Both use the same 'Col' GADT.
module Arbiter.Core.Codec
  ( -- * Column types
    Col (..)
  , NullCol (..)

    -- * Row decoding
  , RowCodec
  , col
  , ncol
  , runCodec
  , codecColumns

    -- * Parameter encoding
  , ParamType (..)
  , SomeParam (..)
  , Params
  , pval
  , pnul
  , parr
  , pnarr

    -- * Bidirectional job write codec
  , Codec
  , cDecode
  , cColumns
  , cScalar
  , cArray
  , jobCodec
  , JobWriteSource (..)
  , writeColumnNames

    -- * Job codecs
  , jobRowCodec
  , dlqRowCodec
  , archiveRowCodec
  , rateLimitPolicyViewCodec
  , rateLimitBucketCodec
  , concurrencyPolicyViewCodec
  , concurrencyKeyViewCodec

    -- * Cron codecs
  , cronScheduleRowCodec

    -- * Worker codecs
  , workerRowWithHealthCodec

    -- * Queue codecs
  , queueRowCodec
  ) where

import Control.Applicative.Free.Final (Ap, liftAp, runAp, runAp_)
import Data.Aeson (Value)
import Data.Int (Int32, Int64)
import Data.Maybe (fromMaybe)
import Data.Text (Text)
import Data.Time (UTCTime)
import Data.UUID.Types (UUID)

import Arbiter.Core.Admission (splitPrefixedSuffix)
import Arbiter.Core.Concurrency.Spec (ConcurrencyKey (..))
import Arbiter.Core.Concurrency.Stats (ConcurrencyKeyView (..), ConcurrencyPolicyView (..))
import Arbiter.Core.CronSchedule (CronScheduleRow (..))
import Arbiter.Core.Job.Types
  ( DedupKey (..)
  , JobRead
  , JobWrite
  , PayloadColumns (..)
  , PayloadKeys (..)
  , TraceContext (..)
  , dedupParts
  , defaultMaxAttempts
  , toTraceContext
  )
import Arbiter.Core.Job.Types qualified as JT
import Arbiter.Core.Job.Types.Internal (JobRecord (Job))
import Arbiter.Core.Queues (QueueRow (..))
import Arbiter.Core.RateLimit.Spec (RateLimitKey (..))
import Arbiter.Core.RateLimit.Stats (RateLimitBucketView (..), RateLimitPolicyView (..))
import Arbiter.Core.Worker (WorkerHealth (Live), WorkerRow (..))

-- | Scalar PostgreSQL column type. The GADT tag recovers the Haskell type.
data Col a where
  CInt4 :: Col Int32
  CInt8 :: Col Int64
  CText :: Col Text
  CBool :: Col Bool
  CTimestamptz :: Col UTCTime
  CJsonb :: Col Value
  CFloat8 :: Col Double
  CUuid :: Col UUID

-- | A named column with nullability. Carries the column name for
-- backends that use name-based decoding (e.g. orville).
data NullCol a where
  NotNull :: Text -> Col a -> NullCol a
  Nullable :: Text -> Col a -> NullCol (Maybe a)

-- | Free applicative over 'NullCol'. Backends interpret this into
-- their native row parser by pattern-matching on each 'NullCol'.
type RowCodec = Ap NullCol

-- | A non-nullable column.
col :: Text -> Col a -> RowCodec a
col :: forall a. Text -> Col a -> RowCodec a
col Text
name Col a
colType = NullCol a -> Ap NullCol a
forall (f :: * -> *) a. f a -> Ap f a
liftAp (Text -> Col a -> NullCol a
forall a. Text -> Col a -> NullCol a
NotNull Text
name Col a
colType)

-- | A nullable column.
ncol :: Text -> Col a -> RowCodec (Maybe a)
ncol :: forall a. Text -> Col a -> RowCodec (Maybe a)
ncol Text
name Col a
colType = NullCol (Maybe a) -> Ap NullCol (Maybe a)
forall (f :: * -> *) a. f a -> Ap f a
liftAp (Text -> Col a -> NullCol (Maybe a)
forall a. Text -> Col a -> NullCol (Maybe a)
Nullable Text
name Col a
colType)

-- | Interpret a 'RowCodec' by providing a natural transformation
-- from 'NullCol' to some 'Applicative'.
runCodec :: (Applicative f) => (forall x. NullCol x -> f x) -> RowCodec a -> f a
runCodec :: forall (f :: * -> *) a.
Applicative f =>
(forall x. NullCol x -> f x) -> RowCodec a -> f a
runCodec = (forall x. NullCol x -> f x) -> Ap NullCol a -> f a
forall (g :: * -> *) (f :: * -> *) a.
Applicative g =>
(forall x. f x -> g x) -> Ap f a -> g a
runAp

-- | Extract the column names from a codec (in order).
codecColumns :: RowCodec a -> [Text]
codecColumns :: forall a. RowCodec a -> [Text]
codecColumns = (forall a. NullCol a -> [Text]) -> Ap NullCol a -> [Text]
forall m (f :: * -> *) b.
Monoid m =>
(forall a. f a -> m) -> Ap f b -> m
runAp_ NullCol a -> [Text]
forall a. NullCol a -> [Text]
colName
  where
    colName :: NullCol a -> [Text]
    colName :: forall a. NullCol a -> [Text]
colName (NotNull Text
name Col a
_) = [Text
name]
    colName (Nullable Text
name Col a
_) = [Text
name]

-- | How a parameter is shaped: scalar, nullable, or array.
data ParamType a where
  PScalar :: Col a -> ParamType a
  PNullable :: Col a -> ParamType (Maybe a)
  PArray :: Col a -> ParamType [a]
  PNullArray :: Col a -> ParamType [Maybe a]

-- | An existentially-typed parameter. A 'ParamType' paired with its value.
data SomeParam where
  SomeParam :: ParamType a -> a -> SomeParam

-- | Positional query parameters.
type Params = [SomeParam]

-- | A non-null scalar parameter.
pval :: Col a -> a -> SomeParam
pval :: forall a. Col a -> a -> SomeParam
pval Col a
colType a
value = ParamType a -> a -> SomeParam
forall a. ParamType a -> a -> SomeParam
SomeParam (Col a -> ParamType a
forall a. Col a -> ParamType a
PScalar Col a
colType) a
value

-- | A nullable scalar parameter.
pnul :: Col a -> Maybe a -> SomeParam
pnul :: forall a. Col a -> Maybe a -> SomeParam
pnul Col a
colType Maybe a
value = ParamType (Maybe a) -> Maybe a -> SomeParam
forall a. ParamType a -> a -> SomeParam
SomeParam (Col a -> ParamType (Maybe a)
forall a. Col a -> ParamType (Maybe a)
PNullable Col a
colType) Maybe a
value

-- | A non-null array parameter.
parr :: Col a -> [a] -> SomeParam
parr :: forall a. Col a -> [a] -> SomeParam
parr Col a
colType [a]
value = ParamType [a] -> [a] -> SomeParam
forall a. ParamType a -> a -> SomeParam
SomeParam (Col a -> ParamType [a]
forall a. Col a -> ParamType [a]
PArray Col a
colType) [a]
value

-- | An array parameter with nullable elements.
pnarr :: Col a -> [Maybe a] -> SomeParam
pnarr :: forall a. Col a -> [Maybe a] -> SomeParam
pnarr Col a
colType [Maybe a]
value = ParamType [Maybe a] -> [Maybe a] -> SomeParam
forall a. ParamType a -> a -> SomeParam
SomeParam (Col a -> ParamType [Maybe a]
forall a. Col a -> ParamType [Maybe a]
PNullArray Col a
colType) [Maybe a]
value

-- ---------------------------------------------------------------------------
-- Bidirectional (profunctor) codec
-- ---------------------------------------------------------------------------

-- | A profunctor codec. Writes source @s@ to INSERT columns and params, decodes value @a@ back.
data Codec s a = Codec
  { forall s a. Codec s a -> RowCodec a
cDecode :: RowCodec a
  -- ^ The read side.
  , forall s a. Codec s a -> [WriteCol s]
cWrite :: [WriteCol s]
  }

-- | One writable column: its name, 'Col', and accessor. Split by nullability.
data WriteCol s where
  WCol :: Text -> Col a -> (s -> a) -> WriteCol s
  WNCol :: Text -> Col a -> (s -> Maybe a) -> WriteCol s

-- | Writable (column name, PostgreSQL type) pairs, in order.
cColumns :: Codec s a -> [(Text, Text)]
cColumns :: forall s a. Codec s a -> [(Text, Text)]
cColumns Codec s a
codec = (WriteCol s -> (Text, Text)) -> [WriteCol s] -> [(Text, Text)]
forall a b. (a -> b) -> [a] -> [b]
map WriteCol s -> (Text, Text)
forall {s}. WriteCol s -> (Text, Text)
nameType (Codec s a -> [WriteCol s]
forall s a. Codec s a -> [WriteCol s]
cWrite Codec s a
codec)
  where
    nameType :: WriteCol s -> (Text, Text)
nameType (WCol Text
name Col a
colType s -> a
_) = (Text
name, Col a -> Text
forall a. Col a -> Text
pgType Col a
colType)
    nameType (WNCol Text
name Col a
colType s -> Maybe a
_) = (Text
name, Col a -> Text
forall a. Col a -> Text
pgType Col a
colType)

-- | Single-row parameters, one per column.
cScalar :: Codec s a -> s -> Params
cScalar :: forall s a. Codec s a -> s -> Params
cScalar Codec s a
codec s
source = (WriteCol s -> SomeParam) -> [WriteCol s] -> Params
forall a b. (a -> b) -> [a] -> [b]
map WriteCol s -> SomeParam
param (Codec s a -> [WriteCol s]
forall s a. Codec s a -> [WriteCol s]
cWrite Codec s a
codec)
  where
    param :: WriteCol s -> SomeParam
param (WCol Text
_ Col a
colType s -> a
get) = Col a -> a -> SomeParam
forall a. Col a -> a -> SomeParam
pval Col a
colType (s -> a
get s
source)
    param (WNCol Text
_ Col a
colType s -> Maybe a
get) = Col a -> Maybe a -> SomeParam
forall a. Col a -> Maybe a -> SomeParam
pnul Col a
colType (s -> Maybe a
get s
source)

-- | Batch parameters, one array per column.
cArray :: Codec s a -> [s] -> Params
cArray :: forall s a. Codec s a -> [s] -> Params
cArray Codec s a
codec [s]
rows = (WriteCol s -> SomeParam) -> [WriteCol s] -> Params
forall a b. (a -> b) -> [a] -> [b]
map WriteCol s -> SomeParam
param (Codec s a -> [WriteCol s]
forall s a. Codec s a -> [WriteCol s]
cWrite Codec s a
codec)
  where
    param :: WriteCol s -> SomeParam
param (WCol Text
_ Col a
colType s -> a
get) = Col a -> [a] -> SomeParam
forall a. Col a -> [a] -> SomeParam
parr Col a
colType ((s -> a) -> [s] -> [a]
forall a b. (a -> b) -> [a] -> [b]
map s -> a
get [s]
rows)
    param (WNCol Text
_ Col a
colType s -> Maybe a
get) = Col a -> [Maybe a] -> SomeParam
forall a. Col a -> [Maybe a] -> SomeParam
pnarr Col a
colType ((s -> Maybe a) -> [s] -> [Maybe a]
forall a b. (a -> b) -> [a] -> [b]
map s -> Maybe a
get [s]
rows)

-- | Retarget a codec's write source.
lmap :: (t -> s) -> Codec s a -> Codec t a
lmap :: forall t s a. (t -> s) -> Codec s a -> Codec t a
lmap t -> s
project (Codec RowCodec a
decode [WriteCol s]
writes) = RowCodec a -> [WriteCol t] -> Codec t a
forall s a. RowCodec a -> [WriteCol s] -> Codec s a
Codec RowCodec a
decode ((WriteCol s -> WriteCol t) -> [WriteCol s] -> [WriteCol t]
forall a b. (a -> b) -> [a] -> [b]
map WriteCol s -> WriteCol t
retarget [WriteCol s]
writes)
  where
    retarget :: WriteCol s -> WriteCol t
retarget (WCol Text
name Col a
colType s -> a
get) = Text -> Col a -> (t -> a) -> WriteCol t
forall a s. Text -> Col a -> (s -> a) -> WriteCol s
WCol Text
name Col a
colType (s -> a
get (s -> a) -> (t -> s) -> t -> a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. t -> s
project)
    retarget (WNCol Text
name Col a
colType s -> Maybe a
get) = Text -> Col a -> (t -> Maybe a) -> WriteCol t
forall a s. Text -> Col a -> (s -> Maybe a) -> WriteCol s
WNCol Text
name Col a
colType (s -> Maybe a
get (s -> Maybe a) -> (t -> s) -> t -> Maybe a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. t -> s
project)

instance Functor (Codec s) where
  fmap :: forall a b. (a -> b) -> Codec s a -> Codec s b
fmap a -> b
mapper (Codec RowCodec a
decode [WriteCol s]
writes) = RowCodec b -> [WriteCol s] -> Codec s b
forall s a. RowCodec a -> [WriteCol s] -> Codec s a
Codec ((a -> b) -> RowCodec a -> RowCodec b
forall a b. (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> b
mapper RowCodec a
decode) [WriteCol s]
writes

instance Applicative (Codec s) where
  pure :: forall a. a -> Codec s a
pure a
value = RowCodec a -> [WriteCol s] -> Codec s a
forall s a. RowCodec a -> [WriteCol s] -> Codec s a
Codec (a -> RowCodec a
forall a. a -> Ap NullCol a
forall (f :: * -> *) a. Applicative f => a -> f a
pure a
value) []
  Codec RowCodec (a -> b)
decodeFn [WriteCol s]
writesFn <*> :: forall a b. Codec s (a -> b) -> Codec s a -> Codec s b
<*> Codec RowCodec a
decodeArg [WriteCol s]
writesArg = RowCodec b -> [WriteCol s] -> Codec s b
forall s a. RowCodec a -> [WriteCol s] -> Codec s a
Codec (RowCodec (a -> b)
decodeFn RowCodec (a -> b) -> RowCodec a -> RowCodec b
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> RowCodec a
decodeArg) ([WriteCol s]
writesFn [WriteCol s] -> [WriteCol s] -> [WriteCol s]
forall a. Semigroup a => a -> a -> a
<> [WriteCol s]
writesArg)

-- | A read-write column bound to its own value.
rw :: Text -> Col a -> Codec a a
rw :: forall a. Text -> Col a -> Codec a a
rw Text
name Col a
colType = RowCodec a -> [WriteCol a] -> Codec a a
forall s a. RowCodec a -> [WriteCol s] -> Codec s a
Codec (Text -> Col a -> RowCodec a
forall a. Text -> Col a -> RowCodec a
col Text
name Col a
colType) [Text -> Col a -> (a -> a) -> WriteCol a
forall a s. Text -> Col a -> (s -> a) -> WriteCol s
WCol Text
name Col a
colType a -> a
forall a. a -> a
id]

-- | A nullable read-write column bound to its own value.
rwN :: Text -> Col a -> Codec (Maybe a) (Maybe a)
rwN :: forall a. Text -> Col a -> Codec (Maybe a) (Maybe a)
rwN Text
name Col a
colType = RowCodec (Maybe a)
-> [WriteCol (Maybe a)] -> Codec (Maybe a) (Maybe a)
forall s a. RowCodec a -> [WriteCol s] -> Codec s a
Codec (Text -> Col a -> RowCodec (Maybe a)
forall a. Text -> Col a -> RowCodec (Maybe a)
ncol Text
name Col a
colType) [Text -> Col a -> (Maybe a -> Maybe a) -> WriteCol (Maybe a)
forall a s. Text -> Col a -> (s -> Maybe a) -> WriteCol s
WNCol Text
name Col a
colType Maybe a -> Maybe a
forall a. a -> a
id]

-- | A column that is only decoded.
ro :: RowCodec a -> Codec s a
ro :: forall a s. RowCodec a -> Codec s a
ro RowCodec a
decode = RowCodec a -> [WriteCol s] -> Codec s a
forall s a. RowCodec a -> [WriteCol s] -> Codec s a
Codec RowCodec a
decode []

-- | A column that is only written. Attach with '<*'.
wo :: Text -> Col a -> (s -> a) -> Codec s ()
wo :: forall a s. Text -> Col a -> (s -> a) -> Codec s ()
wo Text
name Col a
colType s -> a
get = RowCodec () -> [WriteCol s] -> Codec s ()
forall s a. RowCodec a -> [WriteCol s] -> Codec s a
Codec (() -> RowCodec ()
forall a. a -> Ap NullCol a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ()) [Text -> Col a -> (s -> a) -> WriteCol s
forall a s. Text -> Col a -> (s -> a) -> WriteCol s
WCol Text
name Col a
colType s -> a
get]

-- | PostgreSQL type name for a scalar column, used for @unnest@ array casts.
pgType :: Col a -> Text
pgType :: forall a. Col a -> Text
pgType = \case
  Col a
CInt4 -> Text
"int"
  Col a
CInt8 -> Text
"bigint"
  Col a
CText -> Text
"text"
  Col a
CBool -> Text
"boolean"
  Col a
CTimestamptz -> Text
"timestamptz"
  Col a
CJsonb -> Text
"jsonb"
  Col a
CFloat8 -> Text
"float8"
  Col a
CUuid -> Text
"uuid"

-- ---------------------------------------------------------------------------
-- Job codecs
-- ---------------------------------------------------------------------------

-- | The insert side of a job row. The payload encoding is built once by the caller.
data JobWriteSource payload = JobWriteSource
  { forall payload. JobWriteSource payload -> JobWrite payload
sourceJob :: JobWrite payload
  , forall payload. JobWriteSource payload -> Value
sourceEncoded :: Value
  , forall payload. JobWriteSource payload -> PayloadColumns
sourceColumns :: PayloadColumns
  , forall payload. JobWriteSource payload -> Maybe Int64
sourceParentId :: Maybe Int64
  , forall payload. JobWriteSource payload -> Maybe Value
sourceParentState :: Maybe Value
  , forall payload. JobWriteSource payload -> Bool
sourceSuspended :: Bool
  }

-- | A job codec pinned to a @Value@ payload, for the decode and column-list
-- projections that ignore the write source.
type JobCodec a = Codec (JobWriteSource Value) a

-- | Main-table codec. The write source contains public enqueue fields,
-- payload columns, parent id, rollup state, and suspension state.
jobCodec :: Text -> Codec (JobWriteSource payload) (JobRead Value)
jobCodec :: forall payload.
Text -> Codec (JobWriteSource payload) (JobRead Value)
jobCodec = Text -> Text -> Codec (JobWriteSource payload) (JobRead Value)
forall payload.
Text -> Text -> Codec (JobWriteSource payload) (JobRead Value)
jobCodecWith Text
"id"

-- | 'jobCodec' with an explicit primary-key column.
jobCodecWith :: Text -> Text -> Codec (JobWriteSource payload) (JobRead Value)
jobCodecWith :: forall payload.
Text -> Text -> Codec (JobWriteSource payload) (JobRead Value)
jobCodecWith Text
idColumn Text
queueName =
  Int64
-> Value
-> Text
-> Maybe Text
-> UTCTime
-> Maybe UTCTime
-> Int32
-> Maybe Text
-> Int32
-> Maybe UTCTime
-> Maybe UTCTime
-> Maybe DedupKey
-> Maybe Int32
-> Maybe Int64
-> Maybe Value
-> Maybe TraceContext
-> Bool
-> Maybe UUID
-> Int64
-> Maybe Int32
-> PayloadKeys
-> JobRead Value
forall payload key q insertedAt adm.
key
-> payload
-> q
-> Maybe Text
-> insertedAt
-> Maybe UTCTime
-> Int32
-> Maybe Text
-> Int32
-> Maybe UTCTime
-> Maybe UTCTime
-> Maybe DedupKey
-> Maybe Int32
-> Maybe Int64
-> Maybe Value
-> Maybe TraceContext
-> Bool
-> Maybe UUID
-> Int64
-> Maybe Int32
-> adm
-> JobRecord payload key q insertedAt adm
Job
    (Int64
 -> Value
 -> Text
 -> Maybe Text
 -> UTCTime
 -> Maybe UTCTime
 -> Int32
 -> Maybe Text
 -> Int32
 -> Maybe UTCTime
 -> Maybe UTCTime
 -> Maybe DedupKey
 -> Maybe Int32
 -> Maybe Int64
 -> Maybe Value
 -> Maybe TraceContext
 -> Bool
 -> Maybe UUID
 -> Int64
 -> Maybe Int32
 -> PayloadKeys
 -> JobRead Value)
-> Codec (JobWriteSource payload) Int64
-> Codec
     (JobWriteSource payload)
     (Value
      -> Text
      -> Maybe Text
      -> UTCTime
      -> Maybe UTCTime
      -> Int32
      -> Maybe Text
      -> Int32
      -> Maybe UTCTime
      -> Maybe UTCTime
      -> Maybe DedupKey
      -> Maybe Int32
      -> Maybe Int64
      -> Maybe Value
      -> Maybe TraceContext
      -> Bool
      -> Maybe UUID
      -> Int64
      -> Maybe Int32
      -> PayloadKeys
      -> JobRead Value)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> RowCodec Int64 -> Codec (JobWriteSource payload) Int64
forall a s. RowCodec a -> Codec s a
ro (Text -> Col Int64 -> RowCodec Int64
forall a. Text -> Col a -> RowCodec a
col Text
idColumn Col Int64
CInt8)
    Codec
  (JobWriteSource payload)
  (Value
   -> Text
   -> Maybe Text
   -> UTCTime
   -> Maybe UTCTime
   -> Int32
   -> Maybe Text
   -> Int32
   -> Maybe UTCTime
   -> Maybe UTCTime
   -> Maybe DedupKey
   -> Maybe Int32
   -> Maybe Int64
   -> Maybe Value
   -> Maybe TraceContext
   -> Bool
   -> Maybe UUID
   -> Int64
   -> Maybe Int32
   -> PayloadKeys
   -> JobRead Value)
-> Codec (JobWriteSource payload) Value
-> Codec
     (JobWriteSource payload)
     (Text
      -> Maybe Text
      -> UTCTime
      -> Maybe UTCTime
      -> Int32
      -> Maybe Text
      -> Int32
      -> Maybe UTCTime
      -> Maybe UTCTime
      -> Maybe DedupKey
      -> Maybe Int32
      -> Maybe Int64
      -> Maybe Value
      -> Maybe TraceContext
      -> Bool
      -> Maybe UUID
      -> Int64
      -> Maybe Int32
      -> PayloadKeys
      -> JobRead Value)
forall a b.
Codec (JobWriteSource payload) (a -> b)
-> Codec (JobWriteSource payload) a
-> Codec (JobWriteSource payload) b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (JobWriteSource payload -> Value)
-> Codec Value Value -> Codec (JobWriteSource payload) Value
forall t s a. (t -> s) -> Codec s a -> Codec t a
lmap JobWriteSource payload -> Value
forall payload. JobWriteSource payload -> Value
sourceEncoded (Text -> Col Value -> Codec Value Value
forall a. Text -> Col a -> Codec a a
rw Text
"payload" Col Value
CJsonb)
    Codec
  (JobWriteSource payload)
  (Text
   -> Maybe Text
   -> UTCTime
   -> Maybe UTCTime
   -> Int32
   -> Maybe Text
   -> Int32
   -> Maybe UTCTime
   -> Maybe UTCTime
   -> Maybe DedupKey
   -> Maybe Int32
   -> Maybe Int64
   -> Maybe Value
   -> Maybe TraceContext
   -> Bool
   -> Maybe UUID
   -> Int64
   -> Maybe Int32
   -> PayloadKeys
   -> JobRead Value)
-> Codec (JobWriteSource payload) Text
-> Codec
     (JobWriteSource payload)
     (Maybe Text
      -> UTCTime
      -> Maybe UTCTime
      -> Int32
      -> Maybe Text
      -> Int32
      -> Maybe UTCTime
      -> Maybe UTCTime
      -> Maybe DedupKey
      -> Maybe Int32
      -> Maybe Int64
      -> Maybe Value
      -> Maybe TraceContext
      -> Bool
      -> Maybe UUID
      -> Int64
      -> Maybe Int32
      -> PayloadKeys
      -> JobRead Value)
forall a b.
Codec (JobWriteSource payload) (a -> b)
-> Codec (JobWriteSource payload) a
-> Codec (JobWriteSource payload) b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Codec (JobWriteSource payload) Text
forall a. a -> Codec (JobWriteSource payload) a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
queueName
    Codec
  (JobWriteSource payload)
  (Maybe Text
   -> UTCTime
   -> Maybe UTCTime
   -> Int32
   -> Maybe Text
   -> Int32
   -> Maybe UTCTime
   -> Maybe UTCTime
   -> Maybe DedupKey
   -> Maybe Int32
   -> Maybe Int64
   -> Maybe Value
   -> Maybe TraceContext
   -> Bool
   -> Maybe UUID
   -> Int64
   -> Maybe Int32
   -> PayloadKeys
   -> JobRead Value)
-> Codec (JobWriteSource payload) (Maybe Text)
-> Codec
     (JobWriteSource payload)
     (UTCTime
      -> Maybe UTCTime
      -> Int32
      -> Maybe Text
      -> Int32
      -> Maybe UTCTime
      -> Maybe UTCTime
      -> Maybe DedupKey
      -> Maybe Int32
      -> Maybe Int64
      -> Maybe Value
      -> Maybe TraceContext
      -> Bool
      -> Maybe UUID
      -> Int64
      -> Maybe Int32
      -> PayloadKeys
      -> JobRead Value)
forall a b.
Codec (JobWriteSource payload) (a -> b)
-> Codec (JobWriteSource payload) a
-> Codec (JobWriteSource payload) b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (JobWriteSource payload -> Maybe Text)
-> Codec (Maybe Text) (Maybe Text)
-> Codec (JobWriteSource payload) (Maybe Text)
forall t s a. (t -> s) -> Codec s a -> Codec t a
lmap (JobRecord payload () () () () -> Maybe Text
forall payload key q insertedAt adm.
JobRecord payload key q insertedAt adm -> Maybe Text
JT.groupKey (JobRecord payload () () () () -> Maybe Text)
-> (JobWriteSource payload -> JobRecord payload () () () ())
-> JobWriteSource payload
-> Maybe Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JobWriteSource payload -> JobRecord payload () () () ()
forall payload. JobWriteSource payload -> JobWrite payload
sourceJob) (Text -> Col Text -> Codec (Maybe Text) (Maybe Text)
forall a. Text -> Col a -> Codec (Maybe a) (Maybe a)
rwN Text
"group_key" Col Text
CText)
    Codec
  (JobWriteSource payload)
  (UTCTime
   -> Maybe UTCTime
   -> Int32
   -> Maybe Text
   -> Int32
   -> Maybe UTCTime
   -> Maybe UTCTime
   -> Maybe DedupKey
   -> Maybe Int32
   -> Maybe Int64
   -> Maybe Value
   -> Maybe TraceContext
   -> Bool
   -> Maybe UUID
   -> Int64
   -> Maybe Int32
   -> PayloadKeys
   -> JobRead Value)
-> Codec (JobWriteSource payload) UTCTime
-> Codec
     (JobWriteSource payload)
     (Maybe UTCTime
      -> Int32
      -> Maybe Text
      -> Int32
      -> Maybe UTCTime
      -> Maybe UTCTime
      -> Maybe DedupKey
      -> Maybe Int32
      -> Maybe Int64
      -> Maybe Value
      -> Maybe TraceContext
      -> Bool
      -> Maybe UUID
      -> Int64
      -> Maybe Int32
      -> PayloadKeys
      -> JobRead Value)
forall a b.
Codec (JobWriteSource payload) (a -> b)
-> Codec (JobWriteSource payload) a
-> Codec (JobWriteSource payload) b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> RowCodec UTCTime -> Codec (JobWriteSource payload) UTCTime
forall a s. RowCodec a -> Codec s a
ro (Text -> Col UTCTime -> RowCodec UTCTime
forall a. Text -> Col a -> RowCodec a
col Text
"inserted_at" Col UTCTime
CTimestamptz)
    Codec
  (JobWriteSource payload)
  (Maybe UTCTime
   -> Int32
   -> Maybe Text
   -> Int32
   -> Maybe UTCTime
   -> Maybe UTCTime
   -> Maybe DedupKey
   -> Maybe Int32
   -> Maybe Int64
   -> Maybe Value
   -> Maybe TraceContext
   -> Bool
   -> Maybe UUID
   -> Int64
   -> Maybe Int32
   -> PayloadKeys
   -> JobRead Value)
-> Codec (JobWriteSource payload) (Maybe UTCTime)
-> Codec
     (JobWriteSource payload)
     (Int32
      -> Maybe Text
      -> Int32
      -> Maybe UTCTime
      -> Maybe UTCTime
      -> Maybe DedupKey
      -> Maybe Int32
      -> Maybe Int64
      -> Maybe Value
      -> Maybe TraceContext
      -> Bool
      -> Maybe UUID
      -> Int64
      -> Maybe Int32
      -> PayloadKeys
      -> JobRead Value)
forall a b.
Codec (JobWriteSource payload) (a -> b)
-> Codec (JobWriteSource payload) a
-> Codec (JobWriteSource payload) b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> RowCodec (Maybe UTCTime)
-> Codec (JobWriteSource payload) (Maybe UTCTime)
forall a s. RowCodec a -> Codec s a
ro (Text -> Col UTCTime -> RowCodec (Maybe UTCTime)
forall a. Text -> Col a -> RowCodec (Maybe a)
ncol Text
"updated_at" Col UTCTime
CTimestamptz)
    Codec
  (JobWriteSource payload)
  (Int32
   -> Maybe Text
   -> Int32
   -> Maybe UTCTime
   -> Maybe UTCTime
   -> Maybe DedupKey
   -> Maybe Int32
   -> Maybe Int64
   -> Maybe Value
   -> Maybe TraceContext
   -> Bool
   -> Maybe UUID
   -> Int64
   -> Maybe Int32
   -> PayloadKeys
   -> JobRead Value)
-> Codec (JobWriteSource payload) Int32
-> Codec
     (JobWriteSource payload)
     (Maybe Text
      -> Int32
      -> Maybe UTCTime
      -> Maybe UTCTime
      -> Maybe DedupKey
      -> Maybe Int32
      -> Maybe Int64
      -> Maybe Value
      -> Maybe TraceContext
      -> Bool
      -> Maybe UUID
      -> Int64
      -> Maybe Int32
      -> PayloadKeys
      -> JobRead Value)
forall a b.
Codec (JobWriteSource payload) (a -> b)
-> Codec (JobWriteSource payload) a
-> Codec (JobWriteSource payload) b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (JobWriteSource payload -> Int32)
-> Codec Int32 Int32 -> Codec (JobWriteSource payload) Int32
forall t s a. (t -> s) -> Codec s a -> Codec t a
lmap (Int32 -> JobWriteSource payload -> Int32
forall a b. a -> b -> a
const Int32
0) (Text -> Col Int32 -> Codec Int32 Int32
forall a. Text -> Col a -> Codec a a
rw Text
"attempts" Col Int32
CInt4)
    Codec
  (JobWriteSource payload)
  (Maybe Text
   -> Int32
   -> Maybe UTCTime
   -> Maybe UTCTime
   -> Maybe DedupKey
   -> Maybe Int32
   -> Maybe Int64
   -> Maybe Value
   -> Maybe TraceContext
   -> Bool
   -> Maybe UUID
   -> Int64
   -> Maybe Int32
   -> PayloadKeys
   -> JobRead Value)
-> Codec (JobWriteSource payload) (Maybe Text)
-> Codec
     (JobWriteSource payload)
     (Int32
      -> Maybe UTCTime
      -> Maybe UTCTime
      -> Maybe DedupKey
      -> Maybe Int32
      -> Maybe Int64
      -> Maybe Value
      -> Maybe TraceContext
      -> Bool
      -> Maybe UUID
      -> Int64
      -> Maybe Int32
      -> PayloadKeys
      -> JobRead Value)
forall a b.
Codec (JobWriteSource payload) (a -> b)
-> Codec (JobWriteSource payload) a
-> Codec (JobWriteSource payload) b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (JobWriteSource payload -> Maybe Text)
-> Codec (Maybe Text) (Maybe Text)
-> Codec (JobWriteSource payload) (Maybe Text)
forall t s a. (t -> s) -> Codec s a -> Codec t a
lmap (Maybe Text -> JobWriteSource payload -> Maybe Text
forall a b. a -> b -> a
const Maybe Text
forall a. Maybe a
Nothing) (Text -> Col Text -> Codec (Maybe Text) (Maybe Text)
forall a. Text -> Col a -> Codec (Maybe a) (Maybe a)
rwN Text
"last_error" Col Text
CText)
    Codec
  (JobWriteSource payload)
  (Int32
   -> Maybe UTCTime
   -> Maybe UTCTime
   -> Maybe DedupKey
   -> Maybe Int32
   -> Maybe Int64
   -> Maybe Value
   -> Maybe TraceContext
   -> Bool
   -> Maybe UUID
   -> Int64
   -> Maybe Int32
   -> PayloadKeys
   -> JobRead Value)
-> Codec (JobWriteSource payload) Int32
-> Codec
     (JobWriteSource payload)
     (Maybe UTCTime
      -> Maybe UTCTime
      -> Maybe DedupKey
      -> Maybe Int32
      -> Maybe Int64
      -> Maybe Value
      -> Maybe TraceContext
      -> Bool
      -> Maybe UUID
      -> Int64
      -> Maybe Int32
      -> PayloadKeys
      -> JobRead Value)
forall a b.
Codec (JobWriteSource payload) (a -> b)
-> Codec (JobWriteSource payload) a
-> Codec (JobWriteSource payload) b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (JobWriteSource payload -> Int32)
-> Codec Int32 Int32 -> Codec (JobWriteSource payload) Int32
forall t s a. (t -> s) -> Codec s a -> Codec t a
lmap (JobRecord payload () () () () -> Int32
forall payload key q insertedAt adm.
JobRecord payload key q insertedAt adm -> Int32
JT.priority (JobRecord payload () () () () -> Int32)
-> (JobWriteSource payload -> JobRecord payload () () () ())
-> JobWriteSource payload
-> Int32
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JobWriteSource payload -> JobRecord payload () () () ()
forall payload. JobWriteSource payload -> JobWrite payload
sourceJob) (Text -> Col Int32 -> Codec Int32 Int32
forall a. Text -> Col a -> Codec a a
rw Text
"priority" Col Int32
CInt4)
    Codec
  (JobWriteSource payload)
  (Maybe UTCTime
   -> Maybe UTCTime
   -> Maybe DedupKey
   -> Maybe Int32
   -> Maybe Int64
   -> Maybe Value
   -> Maybe TraceContext
   -> Bool
   -> Maybe UUID
   -> Int64
   -> Maybe Int32
   -> PayloadKeys
   -> JobRead Value)
-> Codec (JobWriteSource payload) (Maybe UTCTime)
-> Codec
     (JobWriteSource payload)
     (Maybe UTCTime
      -> Maybe DedupKey
      -> Maybe Int32
      -> Maybe Int64
      -> Maybe Value
      -> Maybe TraceContext
      -> Bool
      -> Maybe UUID
      -> Int64
      -> Maybe Int32
      -> PayloadKeys
      -> JobRead Value)
forall a b.
Codec (JobWriteSource payload) (a -> b)
-> Codec (JobWriteSource payload) a
-> Codec (JobWriteSource payload) b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> RowCodec (Maybe UTCTime)
-> Codec (JobWriteSource payload) (Maybe UTCTime)
forall a s. RowCodec a -> Codec s a
ro (Text -> Col UTCTime -> RowCodec (Maybe UTCTime)
forall a. Text -> Col a -> RowCodec (Maybe a)
ncol Text
"last_attempted_at" Col UTCTime
CTimestamptz)
    Codec
  (JobWriteSource payload)
  (Maybe UTCTime
   -> Maybe DedupKey
   -> Maybe Int32
   -> Maybe Int64
   -> Maybe Value
   -> Maybe TraceContext
   -> Bool
   -> Maybe UUID
   -> Int64
   -> Maybe Int32
   -> PayloadKeys
   -> JobRead Value)
-> Codec (JobWriteSource payload) (Maybe UTCTime)
-> Codec
     (JobWriteSource payload)
     (Maybe DedupKey
      -> Maybe Int32
      -> Maybe Int64
      -> Maybe Value
      -> Maybe TraceContext
      -> Bool
      -> Maybe UUID
      -> Int64
      -> Maybe Int32
      -> PayloadKeys
      -> JobRead Value)
forall a b.
Codec (JobWriteSource payload) (a -> b)
-> Codec (JobWriteSource payload) a
-> Codec (JobWriteSource payload) b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (JobWriteSource payload -> Maybe UTCTime)
-> Codec (Maybe UTCTime) (Maybe UTCTime)
-> Codec (JobWriteSource payload) (Maybe UTCTime)
forall t s a. (t -> s) -> Codec s a -> Codec t a
lmap (JobRecord payload () () () () -> Maybe UTCTime
forall payload key q insertedAt adm.
JobRecord payload key q insertedAt adm -> Maybe UTCTime
JT.notVisibleUntil (JobRecord payload () () () () -> Maybe UTCTime)
-> (JobWriteSource payload -> JobRecord payload () () () ())
-> JobWriteSource payload
-> Maybe UTCTime
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JobWriteSource payload -> JobRecord payload () () () ()
forall payload. JobWriteSource payload -> JobWrite payload
sourceJob) (Text -> Col UTCTime -> Codec (Maybe UTCTime) (Maybe UTCTime)
forall a. Text -> Col a -> Codec (Maybe a) (Maybe a)
rwN Text
"not_visible_until" Col UTCTime
CTimestamptz)
    Codec
  (JobWriteSource payload)
  (Maybe DedupKey
   -> Maybe Int32
   -> Maybe Int64
   -> Maybe Value
   -> Maybe TraceContext
   -> Bool
   -> Maybe UUID
   -> Int64
   -> Maybe Int32
   -> PayloadKeys
   -> JobRead Value)
-> Codec (JobWriteSource payload) (Maybe DedupKey)
-> Codec
     (JobWriteSource payload)
     (Maybe Int32
      -> Maybe Int64
      -> Maybe Value
      -> Maybe TraceContext
      -> Bool
      -> Maybe UUID
      -> Int64
      -> Maybe Int32
      -> PayloadKeys
      -> JobRead Value)
forall a b.
Codec (JobWriteSource payload) (a -> b)
-> Codec (JobWriteSource payload) a
-> Codec (JobWriteSource payload) b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Codec (JobWriteSource payload) (Maybe DedupKey)
forall payload. Codec (JobWriteSource payload) (Maybe DedupKey)
dedupCodec
    Codec
  (JobWriteSource payload)
  (Maybe Int32
   -> Maybe Int64
   -> Maybe Value
   -> Maybe TraceContext
   -> Bool
   -> Maybe UUID
   -> Int64
   -> Maybe Int32
   -> PayloadKeys
   -> JobRead Value)
-> Codec (JobWriteSource payload) (Maybe Int32)
-> Codec
     (JobWriteSource payload)
     (Maybe Int64
      -> Maybe Value
      -> Maybe TraceContext
      -> Bool
      -> Maybe UUID
      -> Int64
      -> Maybe Int32
      -> PayloadKeys
      -> JobRead Value)
forall a b.
Codec (JobWriteSource payload) (a -> b)
-> Codec (JobWriteSource payload) a
-> Codec (JobWriteSource payload) b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (JobWriteSource payload -> Maybe Int32)
-> Codec (Maybe Int32) (Maybe Int32)
-> Codec (JobWriteSource payload) (Maybe Int32)
forall t s a. (t -> s) -> Codec s a -> Codec t a
lmap (Int32 -> Maybe Int32
forall a. a -> Maybe a
Just (Int32 -> Maybe Int32)
-> (JobWriteSource payload -> Int32)
-> JobWriteSource payload
-> Maybe Int32
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int32 -> Maybe Int32 -> Int32
forall a. a -> Maybe a -> a
fromMaybe Int32
defaultMaxAttempts (Maybe Int32 -> Int32)
-> (JobWriteSource payload -> Maybe Int32)
-> JobWriteSource payload
-> Int32
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JobRecord payload () () () () -> Maybe Int32
forall payload key q insertedAt adm.
JobRecord payload key q insertedAt adm -> Maybe Int32
JT.maxAttempts (JobRecord payload () () () () -> Maybe Int32)
-> (JobWriteSource payload -> JobRecord payload () () () ())
-> JobWriteSource payload
-> Maybe Int32
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JobWriteSource payload -> JobRecord payload () () () ()
forall payload. JobWriteSource payload -> JobWrite payload
sourceJob) (Text -> Col Int32 -> Codec (Maybe Int32) (Maybe Int32)
forall a. Text -> Col a -> Codec (Maybe a) (Maybe a)
rwN Text
"max_attempts" Col Int32
CInt4)
    Codec
  (JobWriteSource payload)
  (Maybe Int64
   -> Maybe Value
   -> Maybe TraceContext
   -> Bool
   -> Maybe UUID
   -> Int64
   -> Maybe Int32
   -> PayloadKeys
   -> JobRead Value)
-> Codec (JobWriteSource payload) (Maybe Int64)
-> Codec
     (JobWriteSource payload)
     (Maybe Value
      -> Maybe TraceContext
      -> Bool
      -> Maybe UUID
      -> Int64
      -> Maybe Int32
      -> PayloadKeys
      -> JobRead Value)
forall a b.
Codec (JobWriteSource payload) (a -> b)
-> Codec (JobWriteSource payload) a
-> Codec (JobWriteSource payload) b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (JobWriteSource payload -> Maybe Int64)
-> Codec (Maybe Int64) (Maybe Int64)
-> Codec (JobWriteSource payload) (Maybe Int64)
forall t s a. (t -> s) -> Codec s a -> Codec t a
lmap JobWriteSource payload -> Maybe Int64
forall payload. JobWriteSource payload -> Maybe Int64
sourceParentId (Text -> Col Int64 -> Codec (Maybe Int64) (Maybe Int64)
forall a. Text -> Col a -> Codec (Maybe a) (Maybe a)
rwN Text
"parent_id" Col Int64
CInt8)
    Codec
  (JobWriteSource payload)
  (Maybe Value
   -> Maybe TraceContext
   -> Bool
   -> Maybe UUID
   -> Int64
   -> Maybe Int32
   -> PayloadKeys
   -> JobRead Value)
-> Codec (JobWriteSource payload) (Maybe Value)
-> Codec
     (JobWriteSource payload)
     (Maybe TraceContext
      -> Bool
      -> Maybe UUID
      -> Int64
      -> Maybe Int32
      -> PayloadKeys
      -> JobRead Value)
forall a b.
Codec (JobWriteSource payload) (a -> b)
-> Codec (JobWriteSource payload) a
-> Codec (JobWriteSource payload) b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (JobWriteSource payload -> Maybe Value)
-> Codec (Maybe Value) (Maybe Value)
-> Codec (JobWriteSource payload) (Maybe Value)
forall t s a. (t -> s) -> Codec s a -> Codec t a
lmap JobWriteSource payload -> Maybe Value
forall payload. JobWriteSource payload -> Maybe Value
sourceParentState (Text -> Col Value -> Codec (Maybe Value) (Maybe Value)
forall a. Text -> Col a -> Codec (Maybe a) (Maybe a)
rwN Text
"parent_state" Col Value
CJsonb)
    Codec
  (JobWriteSource payload)
  (Maybe TraceContext
   -> Bool
   -> Maybe UUID
   -> Int64
   -> Maybe Int32
   -> PayloadKeys
   -> JobRead Value)
-> Codec (JobWriteSource payload) (Maybe TraceContext)
-> Codec
     (JobWriteSource payload)
     (Bool
      -> Maybe UUID
      -> Int64
      -> Maybe Int32
      -> PayloadKeys
      -> JobRead Value)
forall a b.
Codec (JobWriteSource payload) (a -> b)
-> Codec (JobWriteSource payload) a
-> Codec (JobWriteSource payload) b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Codec (JobWriteSource payload) (Maybe TraceContext)
forall payload. Codec (JobWriteSource payload) (Maybe TraceContext)
traceCodec
    Codec
  (JobWriteSource payload)
  (Bool
   -> Maybe UUID
   -> Int64
   -> Maybe Int32
   -> PayloadKeys
   -> JobRead Value)
-> Codec (JobWriteSource payload) Bool
-> Codec
     (JobWriteSource payload)
     (Maybe UUID
      -> Int64 -> Maybe Int32 -> PayloadKeys -> JobRead Value)
forall a b.
Codec (JobWriteSource payload) (a -> b)
-> Codec (JobWriteSource payload) a
-> Codec (JobWriteSource payload) b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (JobWriteSource payload -> Bool)
-> Codec Bool Bool -> Codec (JobWriteSource payload) Bool
forall t s a. (t -> s) -> Codec s a -> Codec t a
lmap JobWriteSource payload -> Bool
forall payload. JobWriteSource payload -> Bool
sourceSuspended (Text -> Col Bool -> Codec Bool Bool
forall a. Text -> Col a -> Codec a a
rw Text
"suspended" Col Bool
CBool)
    Codec
  (JobWriteSource payload)
  (Maybe UUID
   -> Int64 -> Maybe Int32 -> PayloadKeys -> JobRead Value)
-> Codec (JobWriteSource payload) (Maybe UUID)
-> Codec
     (JobWriteSource payload)
     (Int64 -> Maybe Int32 -> PayloadKeys -> JobRead Value)
forall a b.
Codec (JobWriteSource payload) (a -> b)
-> Codec (JobWriteSource payload) a
-> Codec (JobWriteSource payload) b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> RowCodec (Maybe UUID)
-> Codec (JobWriteSource payload) (Maybe UUID)
forall a s. RowCodec a -> Codec s a
ro (Text -> Col UUID -> RowCodec (Maybe UUID)
forall a. Text -> Col a -> RowCodec (Maybe a)
ncol Text
"claimed_by" Col UUID
CUuid)
    Codec
  (JobWriteSource payload)
  (Int64 -> Maybe Int32 -> PayloadKeys -> JobRead Value)
-> Codec (JobWriteSource payload) Int64
-> Codec
     (JobWriteSource payload)
     (Maybe Int32 -> PayloadKeys -> JobRead Value)
forall a b.
Codec (JobWriteSource payload) (a -> b)
-> Codec (JobWriteSource payload) a
-> Codec (JobWriteSource payload) b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> RowCodec Int64 -> Codec (JobWriteSource payload) Int64
forall a s. RowCodec a -> Codec s a
ro (Text -> Col Int64 -> RowCodec Int64
forall a. Text -> Col a -> RowCodec a
col Text
"claim_seq" Col Int64
CInt8)
    Codec
  (JobWriteSource payload)
  (Maybe Int32 -> PayloadKeys -> JobRead Value)
-> Codec (JobWriteSource payload) (Maybe Int32)
-> Codec (JobWriteSource payload) (PayloadKeys -> JobRead Value)
forall a b.
Codec (JobWriteSource payload) (a -> b)
-> Codec (JobWriteSource payload) a
-> Codec (JobWriteSource payload) b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (JobWriteSource payload -> Maybe Int32)
-> Codec (Maybe Int32) (Maybe Int32)
-> Codec (JobWriteSource payload) (Maybe Int32)
forall t s a. (t -> s) -> Codec s a -> Codec t a
lmap (JobRecord payload () () () () -> Maybe Int32
forall payload key q insertedAt adm.
JobRecord payload key q insertedAt adm -> Maybe Int32
JT.archiveFor (JobRecord payload () () () () -> Maybe Int32)
-> (JobWriteSource payload -> JobRecord payload () () () ())
-> JobWriteSource payload
-> Maybe Int32
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JobWriteSource payload -> JobRecord payload () () () ()
forall payload. JobWriteSource payload -> JobWrite payload
sourceJob) (Text -> Col Int32 -> Codec (Maybe Int32) (Maybe Int32)
forall a. Text -> Col a -> Codec (Maybe a) (Maybe a)
rwN Text
"archive_for" Col Int32
CInt4)
    Codec (JobWriteSource payload) (PayloadKeys -> JobRead Value)
-> Codec (JobWriteSource payload) PayloadKeys
-> Codec (JobWriteSource payload) (JobRead Value)
forall a b.
Codec (JobWriteSource payload) (a -> b)
-> Codec (JobWriteSource payload) a
-> Codec (JobWriteSource payload) b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (JobWriteSource payload -> PayloadColumns)
-> Codec PayloadColumns PayloadKeys
-> Codec (JobWriteSource payload) PayloadKeys
forall t s a. (t -> s) -> Codec s a -> Codec t a
lmap JobWriteSource payload -> PayloadColumns
forall payload. JobWriteSource payload -> PayloadColumns
sourceColumns Codec PayloadColumns PayloadKeys
payloadCodec

-- | Decoder for a main-table job row.
jobRowCodec :: Text -> RowCodec (JobRead Value)
jobRowCodec :: Text -> RowCodec (JobRead Value)
jobRowCodec Text
queueName = Codec (JobWriteSource Value) (JobRead Value)
-> RowCodec (JobRead Value)
forall s a. Codec s a -> RowCodec a
cDecode (Text -> Codec (JobWriteSource Value) (JobRead Value)
forall payload.
Text -> Codec (JobWriteSource payload) (JobRead Value)
jobCodec Text
queueName :: JobCodec (JobRead Value))

traceCodec :: Codec (JobWriteSource payload) (Maybe TraceContext)
traceCodec :: forall payload. Codec (JobWriteSource payload) (Maybe TraceContext)
traceCodec =
  Maybe Text -> Maybe Text -> Maybe TraceContext
toTraceContext
    (Maybe Text -> Maybe Text -> Maybe TraceContext)
-> Codec (JobWriteSource payload) (Maybe Text)
-> Codec
     (JobWriteSource payload) (Maybe Text -> Maybe TraceContext)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (JobWriteSource payload -> Maybe Text)
-> Codec (Maybe Text) (Maybe Text)
-> Codec (JobWriteSource payload) (Maybe Text)
forall t s a. (t -> s) -> Codec s a -> Codec t a
lmap ((TraceContext -> Text) -> Maybe TraceContext -> Maybe Text
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap TraceContext -> Text
JT.traceparent (Maybe TraceContext -> Maybe Text)
-> (JobWriteSource payload -> Maybe TraceContext)
-> JobWriteSource payload
-> Maybe Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JobRecord payload () () () () -> Maybe TraceContext
forall payload key q insertedAt adm.
JobRecord payload key q insertedAt adm -> Maybe TraceContext
JT.traceContext (JobRecord payload () () () () -> Maybe TraceContext)
-> (JobWriteSource payload -> JobRecord payload () () () ())
-> JobWriteSource payload
-> Maybe TraceContext
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JobWriteSource payload -> JobRecord payload () () () ()
forall payload. JobWriteSource payload -> JobWrite payload
sourceJob) (Text -> Col Text -> Codec (Maybe Text) (Maybe Text)
forall a. Text -> Col a -> Codec (Maybe a) (Maybe a)
rwN Text
"traceparent" Col Text
CText)
    Codec (JobWriteSource payload) (Maybe Text -> Maybe TraceContext)
-> Codec (JobWriteSource payload) (Maybe Text)
-> Codec (JobWriteSource payload) (Maybe TraceContext)
forall a b.
Codec (JobWriteSource payload) (a -> b)
-> Codec (JobWriteSource payload) a
-> Codec (JobWriteSource payload) b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (JobWriteSource payload -> Maybe Text)
-> Codec (Maybe Text) (Maybe Text)
-> Codec (JobWriteSource payload) (Maybe Text)
forall t s a. (t -> s) -> Codec s a -> Codec t a
lmap ((TraceContext -> Maybe Text
JT.tracestate (TraceContext -> Maybe Text) -> Maybe TraceContext -> Maybe Text
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<<) (Maybe TraceContext -> Maybe Text)
-> (JobWriteSource payload -> Maybe TraceContext)
-> JobWriteSource payload
-> Maybe Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JobRecord payload () () () () -> Maybe TraceContext
forall payload key q insertedAt adm.
JobRecord payload key q insertedAt adm -> Maybe TraceContext
JT.traceContext (JobRecord payload () () () () -> Maybe TraceContext)
-> (JobWriteSource payload -> JobRecord payload () () () ())
-> JobWriteSource payload
-> Maybe TraceContext
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JobWriteSource payload -> JobRecord payload () () () ()
forall payload. JobWriteSource payload -> JobWrite payload
sourceJob) (Text -> Col Text -> Codec (Maybe Text) (Maybe Text)
forall a. Text -> Col a -> Codec (Maybe a) (Maybe a)
rwN Text
"tracestate" Col Text
CText)

dedupCodec :: Codec (JobWriteSource payload) (Maybe DedupKey)
dedupCodec :: forall payload. Codec (JobWriteSource payload) (Maybe DedupKey)
dedupCodec =
  Maybe Text -> Maybe Text -> Maybe DedupKey
forall {a}.
(Eq a, IsString a) =>
Maybe Text -> Maybe a -> Maybe DedupKey
toDedupKey
    (Maybe Text -> Maybe Text -> Maybe DedupKey)
-> Codec (JobWriteSource payload) (Maybe Text)
-> Codec (JobWriteSource payload) (Maybe Text -> Maybe DedupKey)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (JobWriteSource payload -> Maybe Text)
-> Codec (Maybe Text) (Maybe Text)
-> Codec (JobWriteSource payload) (Maybe Text)
forall t s a. (t -> s) -> Codec s a -> Codec t a
lmap ((Maybe Text, Maybe Text) -> Maybe Text
forall a b. (a, b) -> a
fst ((Maybe Text, Maybe Text) -> Maybe Text)
-> (JobWriteSource payload -> (Maybe Text, Maybe Text))
-> JobWriteSource payload
-> Maybe Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Maybe DedupKey -> (Maybe Text, Maybe Text)
dedupParts (Maybe DedupKey -> (Maybe Text, Maybe Text))
-> (JobWriteSource payload -> Maybe DedupKey)
-> JobWriteSource payload
-> (Maybe Text, Maybe Text)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JobRecord payload () () () () -> Maybe DedupKey
forall payload key q insertedAt adm.
JobRecord payload key q insertedAt adm -> Maybe DedupKey
JT.dedupKey (JobRecord payload () () () () -> Maybe DedupKey)
-> (JobWriteSource payload -> JobRecord payload () () () ())
-> JobWriteSource payload
-> Maybe DedupKey
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JobWriteSource payload -> JobRecord payload () () () ()
forall payload. JobWriteSource payload -> JobWrite payload
sourceJob) (Text -> Col Text -> Codec (Maybe Text) (Maybe Text)
forall a. Text -> Col a -> Codec (Maybe a) (Maybe a)
rwN Text
"dedup_key" Col Text
CText)
    Codec (JobWriteSource payload) (Maybe Text -> Maybe DedupKey)
-> Codec (JobWriteSource payload) (Maybe Text)
-> Codec (JobWriteSource payload) (Maybe DedupKey)
forall a b.
Codec (JobWriteSource payload) (a -> b)
-> Codec (JobWriteSource payload) a
-> Codec (JobWriteSource payload) b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (JobWriteSource payload -> Maybe Text)
-> Codec (Maybe Text) (Maybe Text)
-> Codec (JobWriteSource payload) (Maybe Text)
forall t s a. (t -> s) -> Codec s a -> Codec t a
lmap ((Maybe Text, Maybe Text) -> Maybe Text
forall a b. (a, b) -> b
snd ((Maybe Text, Maybe Text) -> Maybe Text)
-> (JobWriteSource payload -> (Maybe Text, Maybe Text))
-> JobWriteSource payload
-> Maybe Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Maybe DedupKey -> (Maybe Text, Maybe Text)
dedupParts (Maybe DedupKey -> (Maybe Text, Maybe Text))
-> (JobWriteSource payload -> Maybe DedupKey)
-> JobWriteSource payload
-> (Maybe Text, Maybe Text)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JobRecord payload () () () () -> Maybe DedupKey
forall payload key q insertedAt adm.
JobRecord payload key q insertedAt adm -> Maybe DedupKey
JT.dedupKey (JobRecord payload () () () () -> Maybe DedupKey)
-> (JobWriteSource payload -> JobRecord payload () () () ())
-> JobWriteSource payload
-> Maybe DedupKey
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JobWriteSource payload -> JobRecord payload () () () ()
forall payload. JobWriteSource payload -> JobWrite payload
sourceJob) (Text -> Col Text -> Codec (Maybe Text) (Maybe Text)
forall a. Text -> Col a -> Codec (Maybe a) (Maybe a)
rwN Text
"dedup_strategy" Col Text
CText)
  where
    toDedupKey :: Maybe Text -> Maybe a -> Maybe DedupKey
toDedupKey Maybe Text
Nothing Maybe a
_ = Maybe DedupKey
forall a. Maybe a
Nothing
    toDedupKey (Just Text
key) (Just a
"replace") = DedupKey -> Maybe DedupKey
forall a. a -> Maybe a
Just (Text -> DedupKey
ReplaceDuplicate Text
key)
    toDedupKey (Just Text
key) Maybe a
_ = DedupKey -> Maybe DedupKey
forall a. a -> Maybe a
Just (Text -> DedupKey
IgnoreDuplicate Text
key)

payloadCodec :: Codec PayloadColumns PayloadKeys
payloadCodec :: Codec PayloadColumns PayloadKeys
payloadCodec =
  Maybe Text
-> Maybe RateLimitKey -> Maybe ConcurrencyKey -> PayloadKeys
PayloadKeys
    (Maybe Text
 -> Maybe RateLimitKey -> Maybe ConcurrencyKey -> PayloadKeys)
-> Codec PayloadColumns (Maybe Text)
-> Codec
     PayloadColumns
     (Maybe RateLimitKey -> Maybe ConcurrencyKey -> PayloadKeys)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (PayloadColumns -> Maybe Text)
-> Codec (Maybe Text) (Maybe Text)
-> Codec PayloadColumns (Maybe Text)
forall t s a. (t -> s) -> Codec s a -> Codec t a
lmap PayloadColumns -> Maybe Text
JT.pcKind (Text -> Col Text -> Codec (Maybe Text) (Maybe Text)
forall a. Text -> Col a -> Codec (Maybe a) (Maybe a)
rwN Text
"kind" Col Text
CText)
    Codec
  PayloadColumns
  (Maybe RateLimitKey -> Maybe ConcurrencyKey -> PayloadKeys)
-> Codec PayloadColumns (Maybe RateLimitKey)
-> Codec PayloadColumns (Maybe ConcurrencyKey -> PayloadKeys)
forall a b.
Codec PayloadColumns (a -> b)
-> Codec PayloadColumns a -> Codec PayloadColumns b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text
-> Text
-> (Text -> Text -> RateLimitKey)
-> (PayloadColumns -> Maybe Text)
-> (PayloadColumns -> Maybe Text)
-> Codec PayloadColumns (Maybe RateLimitKey)
forall k s.
Text
-> Text
-> (Text -> Text -> k)
-> (s -> Maybe Text)
-> (s -> Maybe Text)
-> Codec s (Maybe k)
prefixedKeyCodec Text
"rate_limit_key" Text
"rate_limit_prefix" Text -> Text -> RateLimitKey
RateLimitKey PayloadColumns -> Maybe Text
JT.pcRateLimitKey PayloadColumns -> Maybe Text
JT.pcRateLimitPrefix
    Codec PayloadColumns (Maybe ConcurrencyKey -> PayloadKeys)
-> Codec PayloadColumns (Maybe ConcurrencyKey)
-> Codec PayloadColumns PayloadKeys
forall a b.
Codec PayloadColumns (a -> b)
-> Codec PayloadColumns a -> Codec PayloadColumns b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text
-> Text
-> (Text -> Text -> ConcurrencyKey)
-> (PayloadColumns -> Maybe Text)
-> (PayloadColumns -> Maybe Text)
-> Codec PayloadColumns (Maybe ConcurrencyKey)
forall k s.
Text
-> Text
-> (Text -> Text -> k)
-> (s -> Maybe Text)
-> (s -> Maybe Text)
-> Codec s (Maybe k)
prefixedKeyCodec Text
"concurrency_key" Text
"concurrency_prefix" Text -> Text -> ConcurrencyKey
ConcurrencyKey PayloadColumns -> Maybe Text
JT.pcConcurrencyKey PayloadColumns -> Maybe Text
JT.pcConcurrencyPrefix
    Codec PayloadColumns PayloadKeys
-> Codec PayloadColumns () -> Codec PayloadColumns PayloadKeys
forall a b.
Codec PayloadColumns a
-> Codec PayloadColumns b -> Codec PayloadColumns a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Text
-> Col Double
-> (PayloadColumns -> Double)
-> Codec PayloadColumns ()
forall a s. Text -> Col a -> (s -> a) -> Codec s ()
wo Text
"rate_limit_cost" Col Double
CFloat8 PayloadColumns -> Double
JT.pcRateLimitCost

-- | Reconstruct a structured @prefix:suffix@ key from its stored full-key and
-- prefix columns. The suffix is the key with the @prefix:@ part dropped. @keyOf@
-- and @prefixOf@ project the two columns for writes.
prefixedKeyCodec :: Text -> Text -> (Text -> Text -> k) -> (s -> Maybe Text) -> (s -> Maybe Text) -> Codec s (Maybe k)
prefixedKeyCodec :: forall k s.
Text
-> Text
-> (Text -> Text -> k)
-> (s -> Maybe Text)
-> (s -> Maybe Text)
-> Codec s (Maybe k)
prefixedKeyCodec Text
keyCol Text
prefixCol Text -> Text -> k
ctor s -> Maybe Text
keyOf s -> Maybe Text
prefixOf =
  Maybe Text -> Maybe Text -> Maybe k
toKey
    (Maybe Text -> Maybe Text -> Maybe k)
-> Codec s (Maybe Text) -> Codec s (Maybe Text -> Maybe k)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (s -> Maybe Text)
-> Codec (Maybe Text) (Maybe Text) -> Codec s (Maybe Text)
forall t s a. (t -> s) -> Codec s a -> Codec t a
lmap s -> Maybe Text
keyOf (Text -> Col Text -> Codec (Maybe Text) (Maybe Text)
forall a. Text -> Col a -> Codec (Maybe a) (Maybe a)
rwN Text
keyCol Col Text
CText)
    Codec s (Maybe Text -> Maybe k)
-> Codec s (Maybe Text) -> Codec s (Maybe k)
forall a b. Codec s (a -> b) -> Codec s a -> Codec s b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (s -> Maybe Text)
-> Codec (Maybe Text) (Maybe Text) -> Codec s (Maybe Text)
forall t s a. (t -> s) -> Codec s a -> Codec t a
lmap s -> Maybe Text
prefixOf (Text -> Col Text -> Codec (Maybe Text) (Maybe Text)
forall a. Text -> Col a -> Codec (Maybe a) (Maybe a)
rwN Text
prefixCol Col Text
CText)
  where
    toKey :: Maybe Text -> Maybe Text -> Maybe k
toKey (Just Text
key) (Just Text
prefix) = k -> Maybe k
forall a. a -> Maybe a
Just (Text -> Text -> k
ctor Text
prefix (Text -> Text -> Text
splitPrefixedSuffix Text
prefix Text
key))
    toKey Maybe Text
_ Maybe Text
_ = Maybe k
forall a. Maybe a
Nothing

-- | Writable job columns with PostgreSQL types, in insert order.
jobWriteColumns :: [(Text, Text)]
jobWriteColumns :: [(Text, Text)]
jobWriteColumns = Codec (JobWriteSource Value) (JobRead Value) -> [(Text, Text)]
forall s a. Codec s a -> [(Text, Text)]
cColumns (Text -> Codec (JobWriteSource Value) (JobRead Value)
forall payload.
Text -> Codec (JobWriteSource payload) (JobRead Value)
jobCodec Text
"" :: JobCodec (JobRead Value))

-- | Writable job column names, in insert order.
writeColumnNames :: [Text]
writeColumnNames :: [Text]
writeColumnNames = ((Text, Text) -> Text) -> [(Text, Text)] -> [Text]
forall a b. (a -> b) -> [a] -> [b]
map (Text, Text) -> Text
forall a b. (a, b) -> a
fst [(Text, Text)]
jobWriteColumns

-- | Envelope codec for the DLQ/archive tables: @id@, a timestamp column, and the job snapshot (@job_id@ for @id@).
jobEnvelopeCodec :: Text -> Text -> RowCodec (Int64, UTCTime, JobRead Value)
jobEnvelopeCodec :: Text -> Text -> RowCodec (Int64, UTCTime, JobRead Value)
jobEnvelopeCodec Text
tsColumn Text
queueName =
  (,,)
    (Int64
 -> UTCTime -> JobRead Value -> (Int64, UTCTime, JobRead Value))
-> RowCodec Int64
-> Ap
     NullCol
     (UTCTime -> JobRead Value -> (Int64, UTCTime, JobRead Value))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text -> Col Int64 -> RowCodec Int64
forall a. Text -> Col a -> RowCodec a
col Text
"id" Col Int64
CInt8
    Ap
  NullCol
  (UTCTime -> JobRead Value -> (Int64, UTCTime, JobRead Value))
-> RowCodec UTCTime
-> Ap NullCol (JobRead Value -> (Int64, UTCTime, JobRead Value))
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col UTCTime -> RowCodec UTCTime
forall a. Text -> Col a -> RowCodec a
col Text
tsColumn Col UTCTime
CTimestamptz
    Ap NullCol (JobRead Value -> (Int64, UTCTime, JobRead Value))
-> RowCodec (JobRead Value)
-> RowCodec (Int64, UTCTime, JobRead Value)
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Codec (JobWriteSource Value) (JobRead Value)
-> RowCodec (JobRead Value)
forall s a. Codec s a -> RowCodec a
cDecode (Text -> Text -> Codec (JobWriteSource Value) (JobRead Value)
forall payload.
Text -> Text -> Codec (JobWriteSource payload) (JobRead Value)
jobCodecWith Text
"job_id" Text
queueName :: JobCodec (JobRead Value))

-- | DLQ envelope. The shared job snapshot plus its DLQ id and failure time.
dlqRowCodec :: Text -> RowCodec (Int64, UTCTime, JobRead Value)
dlqRowCodec :: Text -> RowCodec (Int64, UTCTime, JobRead Value)
dlqRowCodec = Text -> Text -> RowCodec (Int64, UTCTime, JobRead Value)
jobEnvelopeCodec Text
"failed_at"

-- | Archive envelope. The shared job snapshot plus the @result@ a completed root job stored.
archiveRowCodec :: Text -> RowCodec (Int64, UTCTime, JobRead Value, Maybe Value)
archiveRowCodec :: Text -> RowCodec (Int64, UTCTime, JobRead Value, Maybe Value)
archiveRowCodec Text
queueName =
  (\(Int64
envelopeId, UTCTime
completed, JobRead Value
job) Maybe Value
result -> (Int64
envelopeId, UTCTime
completed, JobRead Value
job, Maybe Value
result))
    ((Int64, UTCTime, JobRead Value)
 -> Maybe Value -> (Int64, UTCTime, JobRead Value, Maybe Value))
-> RowCodec (Int64, UTCTime, JobRead Value)
-> Ap
     NullCol
     (Maybe Value -> (Int64, UTCTime, JobRead Value, Maybe Value))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text -> Text -> RowCodec (Int64, UTCTime, JobRead Value)
jobEnvelopeCodec Text
"completed_at" Text
queueName
    Ap
  NullCol
  (Maybe Value -> (Int64, UTCTime, JobRead Value, Maybe Value))
-> Ap NullCol (Maybe Value)
-> RowCodec (Int64, UTCTime, JobRead Value, Maybe Value)
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col Value -> Ap NullCol (Maybe Value)
forall a. Text -> Col a -> RowCodec (Maybe a)
ncol Text
"result" Col Value
CJsonb

-- | A policy row with bucket aggregates and live throttled count.
rateLimitPolicyViewCodec :: RowCodec RateLimitPolicyView
rateLimitPolicyViewCodec :: RowCodec RateLimitPolicyView
rateLimitPolicyViewCodec =
  Text
-> Double
-> Double
-> Double
-> Maybe Double
-> Maybe Double
-> Maybe Double
-> Int64
-> Int64
-> Maybe Double
-> Maybe Double
-> RateLimitPolicyView
RateLimitPolicyView
    (Text
 -> Double
 -> Double
 -> Double
 -> Maybe Double
 -> Maybe Double
 -> Maybe Double
 -> Int64
 -> Int64
 -> Maybe Double
 -> Maybe Double
 -> RateLimitPolicyView)
-> Ap NullCol Text
-> Ap
     NullCol
     (Double
      -> Double
      -> Double
      -> Maybe Double
      -> Maybe Double
      -> Maybe Double
      -> Int64
      -> Int64
      -> Maybe Double
      -> Maybe Double
      -> RateLimitPolicyView)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text -> Col Text -> Ap NullCol Text
forall a. Text -> Col a -> RowCodec a
col Text
"prefix_id" Col Text
CText
    Ap
  NullCol
  (Double
   -> Double
   -> Double
   -> Maybe Double
   -> Maybe Double
   -> Maybe Double
   -> Int64
   -> Int64
   -> Maybe Double
   -> Maybe Double
   -> RateLimitPolicyView)
-> Ap NullCol Double
-> Ap
     NullCol
     (Double
      -> Double
      -> Maybe Double
      -> Maybe Double
      -> Maybe Double
      -> Int64
      -> Int64
      -> Maybe Double
      -> Maybe Double
      -> RateLimitPolicyView)
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col Double -> Ap NullCol Double
forall a. Text -> Col a -> RowCodec a
col Text
"default_max_tokens" Col Double
CFloat8
    Ap
  NullCol
  (Double
   -> Double
   -> Maybe Double
   -> Maybe Double
   -> Maybe Double
   -> Int64
   -> Int64
   -> Maybe Double
   -> Maybe Double
   -> RateLimitPolicyView)
-> Ap NullCol Double
-> Ap
     NullCol
     (Double
      -> Maybe Double
      -> Maybe Double
      -> Maybe Double
      -> Int64
      -> Int64
      -> Maybe Double
      -> Maybe Double
      -> RateLimitPolicyView)
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col Double -> Ap NullCol Double
forall a. Text -> Col a -> RowCodec a
col Text
"default_refill_amount" Col Double
CFloat8
    Ap
  NullCol
  (Double
   -> Maybe Double
   -> Maybe Double
   -> Maybe Double
   -> Int64
   -> Int64
   -> Maybe Double
   -> Maybe Double
   -> RateLimitPolicyView)
-> Ap NullCol Double
-> Ap
     NullCol
     (Maybe Double
      -> Maybe Double
      -> Maybe Double
      -> Int64
      -> Int64
      -> Maybe Double
      -> Maybe Double
      -> RateLimitPolicyView)
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col Double -> Ap NullCol Double
forall a. Text -> Col a -> RowCodec a
col Text
"default_interval" Col Double
CFloat8
    Ap
  NullCol
  (Maybe Double
   -> Maybe Double
   -> Maybe Double
   -> Int64
   -> Int64
   -> Maybe Double
   -> Maybe Double
   -> RateLimitPolicyView)
-> Ap NullCol (Maybe Double)
-> Ap
     NullCol
     (Maybe Double
      -> Maybe Double
      -> Int64
      -> Int64
      -> Maybe Double
      -> Maybe Double
      -> RateLimitPolicyView)
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col Double -> Ap NullCol (Maybe Double)
forall a. Text -> Col a -> RowCodec (Maybe a)
ncol Text
"override_max_tokens" Col Double
CFloat8
    Ap
  NullCol
  (Maybe Double
   -> Maybe Double
   -> Int64
   -> Int64
   -> Maybe Double
   -> Maybe Double
   -> RateLimitPolicyView)
-> Ap NullCol (Maybe Double)
-> Ap
     NullCol
     (Maybe Double
      -> Int64
      -> Int64
      -> Maybe Double
      -> Maybe Double
      -> RateLimitPolicyView)
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col Double -> Ap NullCol (Maybe Double)
forall a. Text -> Col a -> RowCodec (Maybe a)
ncol Text
"override_refill_amount" Col Double
CFloat8
    Ap
  NullCol
  (Maybe Double
   -> Int64
   -> Int64
   -> Maybe Double
   -> Maybe Double
   -> RateLimitPolicyView)
-> Ap NullCol (Maybe Double)
-> Ap
     NullCol
     (Int64
      -> Int64 -> Maybe Double -> Maybe Double -> RateLimitPolicyView)
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col Double -> Ap NullCol (Maybe Double)
forall a. Text -> Col a -> RowCodec (Maybe a)
ncol Text
"override_interval" Col Double
CFloat8
    Ap
  NullCol
  (Int64
   -> Int64 -> Maybe Double -> Maybe Double -> RateLimitPolicyView)
-> RowCodec Int64
-> Ap
     NullCol
     (Int64 -> Maybe Double -> Maybe Double -> RateLimitPolicyView)
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col Int64 -> RowCodec Int64
forall a. Text -> Col a -> RowCodec a
col Text
"bucket_count" Col Int64
CInt8
    Ap
  NullCol
  (Int64 -> Maybe Double -> Maybe Double -> RateLimitPolicyView)
-> RowCodec Int64
-> Ap NullCol (Maybe Double -> Maybe Double -> RateLimitPolicyView)
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col Int64 -> RowCodec Int64
forall a. Text -> Col a -> RowCodec a
col Text
"throttled_count" Col Int64
CInt8
    Ap NullCol (Maybe Double -> Maybe Double -> RateLimitPolicyView)
-> Ap NullCol (Maybe Double)
-> Ap NullCol (Maybe Double -> RateLimitPolicyView)
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col Double -> Ap NullCol (Maybe Double)
forall a. Text -> Col a -> RowCodec (Maybe a)
ncol Text
"min_tokens" Col Double
CFloat8
    Ap NullCol (Maybe Double -> RateLimitPolicyView)
-> Ap NullCol (Maybe Double) -> RowCodec RateLimitPolicyView
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col Double -> Ap NullCol (Maybe Double)
forall a. Text -> Col a -> RowCodec (Maybe a)
ncol Text
"avg_tokens" Col Double
CFloat8

-- | A token-bucket row as the admin API reports it.
rateLimitBucketCodec :: RowCodec RateLimitBucketView
rateLimitBucketCodec :: RowCodec RateLimitBucketView
rateLimitBucketCodec =
  Text
-> Text
-> Double
-> Double
-> Maybe Double
-> UTCTime
-> RateLimitBucketView
RateLimitBucketView
    (Text
 -> Text
 -> Double
 -> Double
 -> Maybe Double
 -> UTCTime
 -> RateLimitBucketView)
-> Ap NullCol Text
-> Ap
     NullCol
     (Text
      -> Double
      -> Double
      -> Maybe Double
      -> UTCTime
      -> RateLimitBucketView)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text -> Col Text -> Ap NullCol Text
forall a. Text -> Col a -> RowCodec a
col Text
"rate_limit_key" Col Text
CText
    Ap
  NullCol
  (Text
   -> Double
   -> Double
   -> Maybe Double
   -> UTCTime
   -> RateLimitBucketView)
-> Ap NullCol Text
-> Ap
     NullCol
     (Double
      -> Double -> Maybe Double -> UTCTime -> RateLimitBucketView)
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col Text -> Ap NullCol Text
forall a. Text -> Col a -> RowCodec a
col Text
"policy_prefix" Col Text
CText
    Ap
  NullCol
  (Double
   -> Double -> Maybe Double -> UTCTime -> RateLimitBucketView)
-> Ap NullCol Double
-> Ap
     NullCol (Double -> Maybe Double -> UTCTime -> RateLimitBucketView)
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col Double -> Ap NullCol Double
forall a. Text -> Col a -> RowCodec a
col Text
"tokens" Col Double
CFloat8
    Ap
  NullCol (Double -> Maybe Double -> UTCTime -> RateLimitBucketView)
-> Ap NullCol Double
-> Ap NullCol (Maybe Double -> UTCTime -> RateLimitBucketView)
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col Double -> Ap NullCol Double
forall a. Text -> Col a -> RowCodec a
col Text
"max_tokens" Col Double
CFloat8
    Ap NullCol (Maybe Double -> UTCTime -> RateLimitBucketView)
-> Ap NullCol (Maybe Double)
-> Ap NullCol (UTCTime -> RateLimitBucketView)
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col Double -> Ap NullCol (Maybe Double)
forall a. Text -> Col a -> RowCodec (Maybe a)
ncol Text
"fill_fraction" Col Double
CFloat8
    Ap NullCol (UTCTime -> RateLimitBucketView)
-> RowCodec UTCTime -> RowCodec RateLimitBucketView
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col UTCTime -> RowCodec UTCTime
forall a. Text -> Col a -> RowCodec a
col Text
"last_refill" Col UTCTime
CTimestamptz

-- | A pool policy row as the admin API reports it.
concurrencyPolicyViewCodec :: RowCodec ConcurrencyPolicyView
concurrencyPolicyViewCodec :: RowCodec ConcurrencyPolicyView
concurrencyPolicyViewCodec =
  Text
-> Int32
-> Maybe Int32
-> Int64
-> Int64
-> Maybe Int32
-> ConcurrencyPolicyView
ConcurrencyPolicyView
    (Text
 -> Int32
 -> Maybe Int32
 -> Int64
 -> Int64
 -> Maybe Int32
 -> ConcurrencyPolicyView)
-> Ap NullCol Text
-> Ap
     NullCol
     (Int32
      -> Maybe Int32
      -> Int64
      -> Int64
      -> Maybe Int32
      -> ConcurrencyPolicyView)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text -> Col Text -> Ap NullCol Text
forall a. Text -> Col a -> RowCodec a
col Text
"prefix_id" Col Text
CText
    Ap
  NullCol
  (Int32
   -> Maybe Int32
   -> Int64
   -> Int64
   -> Maybe Int32
   -> ConcurrencyPolicyView)
-> Ap NullCol Int32
-> Ap
     NullCol
     (Maybe Int32
      -> Int64 -> Int64 -> Maybe Int32 -> ConcurrencyPolicyView)
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col Int32 -> Ap NullCol Int32
forall a. Text -> Col a -> RowCodec a
col Text
"default_limit" Col Int32
CInt4
    Ap
  NullCol
  (Maybe Int32
   -> Int64 -> Int64 -> Maybe Int32 -> ConcurrencyPolicyView)
-> Ap NullCol (Maybe Int32)
-> Ap
     NullCol (Int64 -> Int64 -> Maybe Int32 -> ConcurrencyPolicyView)
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col Int32 -> Ap NullCol (Maybe Int32)
forall a. Text -> Col a -> RowCodec (Maybe a)
ncol Text
"override_limit" Col Int32
CInt4
    Ap NullCol (Int64 -> Int64 -> Maybe Int32 -> ConcurrencyPolicyView)
-> RowCodec Int64
-> Ap NullCol (Int64 -> Maybe Int32 -> ConcurrencyPolicyView)
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col Int64 -> RowCodec Int64
forall a. Text -> Col a -> RowCodec a
col Text
"key_count" Col Int64
CInt8
    Ap NullCol (Int64 -> Maybe Int32 -> ConcurrencyPolicyView)
-> RowCodec Int64
-> Ap NullCol (Maybe Int32 -> ConcurrencyPolicyView)
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col Int64 -> RowCodec Int64
forall a. Text -> Col a -> RowCodec a
col Text
"total_in_flight" Col Int64
CInt8
    Ap NullCol (Maybe Int32 -> ConcurrencyPolicyView)
-> Ap NullCol (Maybe Int32) -> RowCodec ConcurrencyPolicyView
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col Int32 -> Ap NullCol (Maybe Int32)
forall a. Text -> Col a -> RowCodec (Maybe a)
ncol Text
"max_in_flight" Col Int32
CInt4

-- | A per-key in-flight count as the admin API reports it.
concurrencyKeyViewCodec :: RowCodec ConcurrencyKeyView
concurrencyKeyViewCodec :: RowCodec ConcurrencyKeyView
concurrencyKeyViewCodec =
  Text
-> Text -> Int32 -> Int32 -> Maybe Double -> ConcurrencyKeyView
ConcurrencyKeyView
    (Text
 -> Text -> Int32 -> Int32 -> Maybe Double -> ConcurrencyKeyView)
-> Ap NullCol Text
-> Ap
     NullCol
     (Text -> Int32 -> Int32 -> Maybe Double -> ConcurrencyKeyView)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text -> Col Text -> Ap NullCol Text
forall a. Text -> Col a -> RowCodec a
col Text
"concurrency_key" Col Text
CText
    Ap
  NullCol
  (Text -> Int32 -> Int32 -> Maybe Double -> ConcurrencyKeyView)
-> Ap NullCol Text
-> Ap
     NullCol (Int32 -> Int32 -> Maybe Double -> ConcurrencyKeyView)
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col Text -> Ap NullCol Text
forall a. Text -> Col a -> RowCodec a
col Text
"concurrency_prefix" Col Text
CText
    Ap NullCol (Int32 -> Int32 -> Maybe Double -> ConcurrencyKeyView)
-> Ap NullCol Int32
-> Ap NullCol (Int32 -> Maybe Double -> ConcurrencyKeyView)
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col Int32 -> Ap NullCol Int32
forall a. Text -> Col a -> RowCodec a
col Text
"in_flight" Col Int32
CInt4
    Ap NullCol (Int32 -> Maybe Double -> ConcurrencyKeyView)
-> Ap NullCol Int32
-> Ap NullCol (Maybe Double -> ConcurrencyKeyView)
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col Int32 -> Ap NullCol Int32
forall a. Text -> Col a -> RowCodec a
col Text
"effective_limit" Col Int32
CInt4
    Ap NullCol (Maybe Double -> ConcurrencyKeyView)
-> Ap NullCol (Maybe Double) -> RowCodec ConcurrencyKeyView
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col Double -> Ap NullCol (Maybe Double)
forall a. Text -> Col a -> RowCodec (Maybe a)
ncol Text
"fill_fraction" Col Double
CFloat8

-- ---------------------------------------------------------------------------
-- Cron codecs
-- ---------------------------------------------------------------------------

-- | A @cron_schedules@ row.
cronScheduleRowCodec :: RowCodec CronScheduleRow
cronScheduleRowCodec :: RowCodec CronScheduleRow
cronScheduleRowCodec =
  Text
-> Text
-> Text
-> Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Bool
-> Maybe UTCTime
-> Maybe UTCTime
-> Maybe UTCTime
-> Maybe UTCTime
-> UTCTime
-> UTCTime
-> CronScheduleRow
CronScheduleRow
    (Text
 -> Text
 -> Text
 -> Text
 -> Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Bool
 -> Maybe UTCTime
 -> Maybe UTCTime
 -> Maybe UTCTime
 -> Maybe UTCTime
 -> UTCTime
 -> UTCTime
 -> CronScheduleRow)
-> Ap NullCol Text
-> Ap
     NullCol
     (Text
      -> Text
      -> Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Bool
      -> Maybe UTCTime
      -> Maybe UTCTime
      -> Maybe UTCTime
      -> Maybe UTCTime
      -> UTCTime
      -> UTCTime
      -> CronScheduleRow)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text -> Col Text -> Ap NullCol Text
forall a. Text -> Col a -> RowCodec a
col Text
"name" Col Text
CText
    Ap
  NullCol
  (Text
   -> Text
   -> Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Bool
   -> Maybe UTCTime
   -> Maybe UTCTime
   -> Maybe UTCTime
   -> Maybe UTCTime
   -> UTCTime
   -> UTCTime
   -> CronScheduleRow)
-> Ap NullCol Text
-> Ap
     NullCol
     (Text
      -> Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Bool
      -> Maybe UTCTime
      -> Maybe UTCTime
      -> Maybe UTCTime
      -> Maybe UTCTime
      -> UTCTime
      -> UTCTime
      -> CronScheduleRow)
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col Text -> Ap NullCol Text
forall a. Text -> Col a -> RowCodec a
col Text
"queue_name" Col Text
CText
    Ap
  NullCol
  (Text
   -> Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Bool
   -> Maybe UTCTime
   -> Maybe UTCTime
   -> Maybe UTCTime
   -> Maybe UTCTime
   -> UTCTime
   -> UTCTime
   -> CronScheduleRow)
-> Ap NullCol Text
-> Ap
     NullCol
     (Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Bool
      -> Maybe UTCTime
      -> Maybe UTCTime
      -> Maybe UTCTime
      -> Maybe UTCTime
      -> UTCTime
      -> UTCTime
      -> CronScheduleRow)
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col Text -> Ap NullCol Text
forall a. Text -> Col a -> RowCodec a
col Text
"default_expression" Col Text
CText
    Ap
  NullCol
  (Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Bool
   -> Maybe UTCTime
   -> Maybe UTCTime
   -> Maybe UTCTime
   -> Maybe UTCTime
   -> UTCTime
   -> UTCTime
   -> CronScheduleRow)
-> Ap NullCol Text
-> Ap
     NullCol
     (Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Bool
      -> Maybe UTCTime
      -> Maybe UTCTime
      -> Maybe UTCTime
      -> Maybe UTCTime
      -> UTCTime
      -> UTCTime
      -> CronScheduleRow)
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col Text -> Ap NullCol Text
forall a. Text -> Col a -> RowCodec a
col Text
"default_overlap" Col Text
CText
    Ap
  NullCol
  (Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Bool
   -> Maybe UTCTime
   -> Maybe UTCTime
   -> Maybe UTCTime
   -> Maybe UTCTime
   -> UTCTime
   -> UTCTime
   -> CronScheduleRow)
-> Ap NullCol (Maybe Text)
-> Ap
     NullCol
     (Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Bool
      -> Maybe UTCTime
      -> Maybe UTCTime
      -> Maybe UTCTime
      -> Maybe UTCTime
      -> UTCTime
      -> UTCTime
      -> CronScheduleRow)
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col Text -> Ap NullCol (Maybe Text)
forall a. Text -> Col a -> RowCodec (Maybe a)
ncol Text
"default_timezone" Col Text
CText
    Ap
  NullCol
  (Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Bool
   -> Maybe UTCTime
   -> Maybe UTCTime
   -> Maybe UTCTime
   -> Maybe UTCTime
   -> UTCTime
   -> UTCTime
   -> CronScheduleRow)
-> Ap NullCol (Maybe Text)
-> Ap
     NullCol
     (Maybe Text
      -> Maybe Text
      -> Bool
      -> Maybe UTCTime
      -> Maybe UTCTime
      -> Maybe UTCTime
      -> Maybe UTCTime
      -> UTCTime
      -> UTCTime
      -> CronScheduleRow)
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col Text -> Ap NullCol (Maybe Text)
forall a. Text -> Col a -> RowCodec (Maybe a)
ncol Text
"override_expression" Col Text
CText
    Ap
  NullCol
  (Maybe Text
   -> Maybe Text
   -> Bool
   -> Maybe UTCTime
   -> Maybe UTCTime
   -> Maybe UTCTime
   -> Maybe UTCTime
   -> UTCTime
   -> UTCTime
   -> CronScheduleRow)
-> Ap NullCol (Maybe Text)
-> Ap
     NullCol
     (Maybe Text
      -> Bool
      -> Maybe UTCTime
      -> Maybe UTCTime
      -> Maybe UTCTime
      -> Maybe UTCTime
      -> UTCTime
      -> UTCTime
      -> CronScheduleRow)
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col Text -> Ap NullCol (Maybe Text)
forall a. Text -> Col a -> RowCodec (Maybe a)
ncol Text
"override_overlap" Col Text
CText
    Ap
  NullCol
  (Maybe Text
   -> Bool
   -> Maybe UTCTime
   -> Maybe UTCTime
   -> Maybe UTCTime
   -> Maybe UTCTime
   -> UTCTime
   -> UTCTime
   -> CronScheduleRow)
-> Ap NullCol (Maybe Text)
-> Ap
     NullCol
     (Bool
      -> Maybe UTCTime
      -> Maybe UTCTime
      -> Maybe UTCTime
      -> Maybe UTCTime
      -> UTCTime
      -> UTCTime
      -> CronScheduleRow)
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col Text -> Ap NullCol (Maybe Text)
forall a. Text -> Col a -> RowCodec (Maybe a)
ncol Text
"override_timezone" Col Text
CText
    Ap
  NullCol
  (Bool
   -> Maybe UTCTime
   -> Maybe UTCTime
   -> Maybe UTCTime
   -> Maybe UTCTime
   -> UTCTime
   -> UTCTime
   -> CronScheduleRow)
-> Ap NullCol Bool
-> Ap
     NullCol
     (Maybe UTCTime
      -> Maybe UTCTime
      -> Maybe UTCTime
      -> Maybe UTCTime
      -> UTCTime
      -> UTCTime
      -> CronScheduleRow)
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col Bool -> Ap NullCol Bool
forall a. Text -> Col a -> RowCodec a
col Text
"enabled" Col Bool
CBool
    Ap
  NullCol
  (Maybe UTCTime
   -> Maybe UTCTime
   -> Maybe UTCTime
   -> Maybe UTCTime
   -> UTCTime
   -> UTCTime
   -> CronScheduleRow)
-> RowCodec (Maybe UTCTime)
-> Ap
     NullCol
     (Maybe UTCTime
      -> Maybe UTCTime
      -> Maybe UTCTime
      -> UTCTime
      -> UTCTime
      -> CronScheduleRow)
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col UTCTime -> RowCodec (Maybe UTCTime)
forall a. Text -> Col a -> RowCodec (Maybe a)
ncol Text
"last_fired_at" Col UTCTime
CTimestamptz
    Ap
  NullCol
  (Maybe UTCTime
   -> Maybe UTCTime
   -> Maybe UTCTime
   -> UTCTime
   -> UTCTime
   -> CronScheduleRow)
-> RowCodec (Maybe UTCTime)
-> Ap
     NullCol
     (Maybe UTCTime
      -> Maybe UTCTime -> UTCTime -> UTCTime -> CronScheduleRow)
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col UTCTime -> RowCodec (Maybe UTCTime)
forall a. Text -> Col a -> RowCodec (Maybe a)
ncol Text
"last_checked_at" Col UTCTime
CTimestamptz
    Ap
  NullCol
  (Maybe UTCTime
   -> Maybe UTCTime -> UTCTime -> UTCTime -> CronScheduleRow)
-> RowCodec (Maybe UTCTime)
-> Ap
     NullCol (Maybe UTCTime -> UTCTime -> UTCTime -> CronScheduleRow)
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col UTCTime -> RowCodec (Maybe UTCTime)
forall a. Text -> Col a -> RowCodec (Maybe a)
ncol Text
"run_requested_at" Col UTCTime
CTimestamptz
    Ap NullCol (Maybe UTCTime -> UTCTime -> UTCTime -> CronScheduleRow)
-> RowCodec (Maybe UTCTime)
-> Ap NullCol (UTCTime -> UTCTime -> CronScheduleRow)
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col UTCTime -> RowCodec (Maybe UTCTime)
forall a. Text -> Col a -> RowCodec (Maybe a)
ncol Text
"last_manual_run_at" Col UTCTime
CTimestamptz
    Ap NullCol (UTCTime -> UTCTime -> CronScheduleRow)
-> RowCodec UTCTime -> Ap NullCol (UTCTime -> CronScheduleRow)
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col UTCTime -> RowCodec UTCTime
forall a. Text -> Col a -> RowCodec a
col Text
"created_at" Col UTCTime
CTimestamptz
    Ap NullCol (UTCTime -> CronScheduleRow)
-> RowCodec UTCTime -> RowCodec CronScheduleRow
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col UTCTime -> RowCodec UTCTime
forall a. Text -> Col a -> RowCodec a
col Text
"updated_at" Col UTCTime
CTimestamptz

-- ---------------------------------------------------------------------------
-- Worker codecs
-- ---------------------------------------------------------------------------

-- | Worker columns plus the raw derived health token. The operation layer
-- validates the token before returning a 'WorkerRow'.
workerRowWithHealthCodec :: RowCodec (WorkerRow, Text)
workerRowWithHealthCodec :: RowCodec (WorkerRow, Text)
workerRowWithHealthCodec =
  UUID
-> Text
-> Maybe Text
-> Maybe Int32
-> UTCTime
-> UTCTime
-> Bool
-> Bool
-> Double
-> Maybe Value
-> Text
-> (WorkerRow, Text)
forall {b}.
UUID
-> Text
-> Maybe Text
-> Maybe Int32
-> UTCTime
-> UTCTime
-> Bool
-> Bool
-> Double
-> Maybe Value
-> b
-> (WorkerRow, b)
toRow
    (UUID
 -> Text
 -> Maybe Text
 -> Maybe Int32
 -> UTCTime
 -> UTCTime
 -> Bool
 -> Bool
 -> Double
 -> Maybe Value
 -> Text
 -> (WorkerRow, Text))
-> Ap NullCol UUID
-> Ap
     NullCol
     (Text
      -> Maybe Text
      -> Maybe Int32
      -> UTCTime
      -> UTCTime
      -> Bool
      -> Bool
      -> Double
      -> Maybe Value
      -> Text
      -> (WorkerRow, Text))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text -> Col UUID -> Ap NullCol UUID
forall a. Text -> Col a -> RowCodec a
col Text
"worker_id" Col UUID
CUuid
    Ap
  NullCol
  (Text
   -> Maybe Text
   -> Maybe Int32
   -> UTCTime
   -> UTCTime
   -> Bool
   -> Bool
   -> Double
   -> Maybe Value
   -> Text
   -> (WorkerRow, Text))
-> Ap NullCol Text
-> Ap
     NullCol
     (Maybe Text
      -> Maybe Int32
      -> UTCTime
      -> UTCTime
      -> Bool
      -> Bool
      -> Double
      -> Maybe Value
      -> Text
      -> (WorkerRow, Text))
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col Text -> Ap NullCol Text
forall a. Text -> Col a -> RowCodec a
col Text
"queue_name" Col Text
CText
    Ap
  NullCol
  (Maybe Text
   -> Maybe Int32
   -> UTCTime
   -> UTCTime
   -> Bool
   -> Bool
   -> Double
   -> Maybe Value
   -> Text
   -> (WorkerRow, Text))
-> Ap NullCol (Maybe Text)
-> Ap
     NullCol
     (Maybe Int32
      -> UTCTime
      -> UTCTime
      -> Bool
      -> Bool
      -> Double
      -> Maybe Value
      -> Text
      -> (WorkerRow, Text))
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col Text -> Ap NullCol (Maybe Text)
forall a. Text -> Col a -> RowCodec (Maybe a)
ncol Text
"host_name" Col Text
CText
    Ap
  NullCol
  (Maybe Int32
   -> UTCTime
   -> UTCTime
   -> Bool
   -> Bool
   -> Double
   -> Maybe Value
   -> Text
   -> (WorkerRow, Text))
-> Ap NullCol (Maybe Int32)
-> Ap
     NullCol
     (UTCTime
      -> UTCTime
      -> Bool
      -> Bool
      -> Double
      -> Maybe Value
      -> Text
      -> (WorkerRow, Text))
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col Int32 -> Ap NullCol (Maybe Int32)
forall a. Text -> Col a -> RowCodec (Maybe a)
ncol Text
"worker_count" Col Int32
CInt4
    Ap
  NullCol
  (UTCTime
   -> UTCTime
   -> Bool
   -> Bool
   -> Double
   -> Maybe Value
   -> Text
   -> (WorkerRow, Text))
-> RowCodec UTCTime
-> Ap
     NullCol
     (UTCTime
      -> Bool
      -> Bool
      -> Double
      -> Maybe Value
      -> Text
      -> (WorkerRow, Text))
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col UTCTime -> RowCodec UTCTime
forall a. Text -> Col a -> RowCodec a
col Text
"started_at" Col UTCTime
CTimestamptz
    Ap
  NullCol
  (UTCTime
   -> Bool
   -> Bool
   -> Double
   -> Maybe Value
   -> Text
   -> (WorkerRow, Text))
-> RowCodec UTCTime
-> Ap
     NullCol
     (Bool
      -> Bool -> Double -> Maybe Value -> Text -> (WorkerRow, Text))
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col UTCTime -> RowCodec UTCTime
forall a. Text -> Col a -> RowCodec a
col Text
"last_heartbeat" Col UTCTime
CTimestamptz
    Ap
  NullCol
  (Bool
   -> Bool -> Double -> Maybe Value -> Text -> (WorkerRow, Text))
-> Ap NullCol Bool
-> Ap
     NullCol
     (Bool -> Double -> Maybe Value -> Text -> (WorkerRow, Text))
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col Bool -> Ap NullCol Bool
forall a. Text -> Col a -> RowCodec a
col Text
"shutting_down" Col Bool
CBool
    Ap
  NullCol
  (Bool -> Double -> Maybe Value -> Text -> (WorkerRow, Text))
-> Ap NullCol Bool
-> Ap NullCol (Double -> Maybe Value -> Text -> (WorkerRow, Text))
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col Bool -> Ap NullCol Bool
forall a. Text -> Col a -> RowCodec a
col Text
"paused" Col Bool
CBool
    Ap NullCol (Double -> Maybe Value -> Text -> (WorkerRow, Text))
-> Ap NullCol Double
-> Ap NullCol (Maybe Value -> Text -> (WorkerRow, Text))
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col Double -> Ap NullCol Double
forall a. Text -> Col a -> RowCodec a
col Text
"stale_threshold_secs" Col Double
CFloat8
    Ap NullCol (Maybe Value -> Text -> (WorkerRow, Text))
-> Ap NullCol (Maybe Value)
-> Ap NullCol (Text -> (WorkerRow, Text))
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col Value -> Ap NullCol (Maybe Value)
forall a. Text -> Col a -> RowCodec (Maybe a)
ncol Text
"metadata" Col Value
CJsonb
    Ap NullCol (Text -> (WorkerRow, Text))
-> Ap NullCol Text -> RowCodec (WorkerRow, Text)
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col Text -> Ap NullCol Text
forall a. Text -> Col a -> RowCodec a
col Text
"health" Col Text
CText
  where
    toRow :: UUID
-> Text
-> Maybe Text
-> Maybe Int32
-> UTCTime
-> UTCTime
-> Bool
-> Bool
-> Double
-> Maybe Value
-> b
-> (WorkerRow, b)
toRow UUID
wid Text
queue Maybe Text
host Maybe Int32
count UTCTime
started UTCTime
heartbeat Bool
shuttingDown Bool
paused Double
stale Maybe Value
metadata b
rawHealth =
      ( UUID
-> Text
-> Maybe Text
-> Maybe Int32
-> UTCTime
-> UTCTime
-> Bool
-> Bool
-> Double
-> Maybe Value
-> WorkerHealth
-> WorkerRow
WorkerRow UUID
wid Text
queue Maybe Text
host Maybe Int32
count UTCTime
started UTCTime
heartbeat Bool
shuttingDown Bool
paused Double
stale Maybe Value
metadata WorkerHealth
Live
      , b
rawHealth
      )

-- ---------------------------------------------------------------------------
-- Queue codecs
-- ---------------------------------------------------------------------------

-- | An @arbiter_queues@ row.
queueRowCodec :: RowCodec QueueRow
queueRowCodec :: RowCodec QueueRow
queueRowCodec =
  Text
-> Bool
-> Maybe UTCTime
-> Maybe Value
-> UTCTime
-> UTCTime
-> QueueRow
QueueRow
    (Text
 -> Bool
 -> Maybe UTCTime
 -> Maybe Value
 -> UTCTime
 -> UTCTime
 -> QueueRow)
-> Ap NullCol Text
-> Ap
     NullCol
     (Bool
      -> Maybe UTCTime -> Maybe Value -> UTCTime -> UTCTime -> QueueRow)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text -> Col Text -> Ap NullCol Text
forall a. Text -> Col a -> RowCodec a
col Text
"queue_name" Col Text
CText
    Ap
  NullCol
  (Bool
   -> Maybe UTCTime -> Maybe Value -> UTCTime -> UTCTime -> QueueRow)
-> Ap NullCol Bool
-> Ap
     NullCol
     (Maybe UTCTime -> Maybe Value -> UTCTime -> UTCTime -> QueueRow)
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col Bool -> Ap NullCol Bool
forall a. Text -> Col a -> RowCodec a
col Text
"paused" Col Bool
CBool
    Ap
  NullCol
  (Maybe UTCTime -> Maybe Value -> UTCTime -> UTCTime -> QueueRow)
-> RowCodec (Maybe UTCTime)
-> Ap NullCol (Maybe Value -> UTCTime -> UTCTime -> QueueRow)
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col UTCTime -> RowCodec (Maybe UTCTime)
forall a. Text -> Col a -> RowCodec (Maybe a)
ncol Text
"paused_at" Col UTCTime
CTimestamptz
    Ap NullCol (Maybe Value -> UTCTime -> UTCTime -> QueueRow)
-> Ap NullCol (Maybe Value)
-> Ap NullCol (UTCTime -> UTCTime -> QueueRow)
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col Value -> Ap NullCol (Maybe Value)
forall a. Text -> Col a -> RowCodec (Maybe a)
ncol Text
"metadata" Col Value
CJsonb
    Ap NullCol (UTCTime -> UTCTime -> QueueRow)
-> RowCodec UTCTime -> Ap NullCol (UTCTime -> QueueRow)
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col UTCTime -> RowCodec UTCTime
forall a. Text -> Col a -> RowCodec a
col Text
"created_at" Col UTCTime
CTimestamptz
    Ap NullCol (UTCTime -> QueueRow)
-> RowCodec UTCTime -> RowCodec QueueRow
forall a b. Ap NullCol (a -> b) -> Ap NullCol a -> Ap NullCol b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Col UTCTime -> RowCodec UTCTime
forall a. Text -> Col a -> RowCodec a
col Text
"updated_at" Col UTCTime
CTimestamptz