{-# LANGUAGE OverloadedStrings #-}
{-# OPTIONS_HADDOCK not-home #-}

-- | Internal to the arbiter packages. Not covered by the PVP.
--
-- 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
  , joinColumns

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

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

    -- * Job codecs
  , jobRowCodec
  , dlqRowCodec
  , archiveRowCodec

    -- * Admission view codecs
  , 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.Text qualified as T
import Data.Time (UTCTime)
import Data.UUID.Types (UUID)

import Arbiter.Core.Admission (splitPrefixedSuffix)
import Arbiter.Core.Concurrency.Spec (toConcurrencyKey)
import Arbiter.Core.Concurrency.Stats (ConcurrencyKeyView (..), ConcurrencyPolicyView (..))
import Arbiter.Core.CronSchedule (CronScheduleRow (..))
import Arbiter.Core.Job.Dedup (dedupFromParts)
import Arbiter.Core.Job.Types
  ( DedupKey (..)
  , JobRead
  , JobWrite
  , PayloadColumns (..)
  , PayloadKeys (..)
  , Stored
  , TraceContext (..)
  , dedupParts
  , defaultMaxAttempts
  , minMaxAttempts
  , toTraceContext
  )
import Arbiter.Core.Job.Types qualified as JT
import Arbiter.Core.Job.Types.Internal (JobRecord (Job))
import Arbiter.Core.Json (decodeOrEmpty)
import Arbiter.Core.Queues (QueueRow (..))
import Arbiter.Core.RateLimit.Spec (toRateLimitKey)
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
  CStored :: Col (Stored payload)
  CFloat8 :: Col Double
  CUuid :: Col UUID

-- | A named column with nullability. Carries the column name for
-- backends that use name-based decoding, such as 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 payload. Text -> Col payload -> NullCol (Maybe payload)
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]

-- | Column names as a comma-separated SQL list.
joinColumns :: [Text] -> Text
joinColumns :: [Text] -> Text
joinColumns = Text -> [Text] -> Text
T.intercalate Text
", "

-- | Parameter shape: 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 payload. ParamType payload -> payload -> 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 payload. ParamType payload -> payload -> SomeParam
SomeParam (Col a -> ParamType (Maybe a)
forall payload. Col payload -> ParamType (Maybe payload)
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 payload. ParamType payload -> payload -> SomeParam
SomeParam (Col a -> ParamType [a]
forall payload. Col payload -> ParamType [payload]
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 payload. ParamType payload -> payload -> SomeParam
SomeParam (Col a -> ParamType [Maybe a]
forall payload. Col payload -> ParamType [Maybe payload]
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]
  }
  deriving stock ((forall a b. (a -> b) -> Codec s a -> Codec s b)
-> (forall a b. a -> Codec s b -> Codec s a) -> Functor (Codec s)
forall a b. a -> Codec s b -> Codec s a
forall a b. (a -> b) -> Codec s a -> Codec s b
forall s a b. a -> Codec s b -> Codec s a
forall s a b. (a -> b) -> Codec s a -> Codec s b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
$cfmap :: forall s a b. (a -> b) -> Codec s a -> Codec s b
fmap :: forall a b. (a -> b) -> Codec s a -> Codec s b
$c<$ :: forall s a b. a -> Codec s b -> Codec s a
<$ :: forall a b. a -> Codec s b -> Codec s a
Functor)

-- | 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 s a
codec = Codec s a
codec {cWrite = map retarget (cWrite codec)}
  where
    retarget :: WriteCol s -> WriteCol t
retarget (WCol Text
name Col a
colType s -> a
get) = Text -> Col a -> (t -> a) -> WriteCol t
forall payload s.
Text -> Col payload -> (s -> payload) -> 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 payload s.
Text -> Col payload -> (s -> Maybe payload) -> 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 Applicative (Codec s) where
  pure :: forall a. a -> Codec s a
pure a
value = Codec {cDecode :: RowCodec a
cDecode = a -> RowCodec a
forall a. a -> Ap NullCol a
forall (f :: * -> *) a. Applicative f => a -> f a
pure a
value, cWrite :: [WriteCol s]
cWrite = []}
  Codec s (a -> b)
codecFn <*> :: forall a b. Codec s (a -> b) -> Codec s a -> Codec s b
<*> Codec s a
codecArg =
    Codec
      { cDecode :: RowCodec b
cDecode = Codec s (a -> b) -> RowCodec (a -> b)
forall s a. Codec s a -> RowCodec a
cDecode Codec s (a -> b)
codecFn RowCodec (a -> b) -> Ap NullCol 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
<*> Codec s a -> Ap NullCol a
forall s a. Codec s a -> RowCodec a
cDecode Codec s a
codecArg
      , cWrite :: [WriteCol s]
cWrite = Codec s (a -> b) -> [WriteCol s]
forall s a. Codec s a -> [WriteCol s]
cWrite Codec s (a -> b)
codecFn [WriteCol s] -> [WriteCol s] -> [WriteCol s]
forall a. Semigroup a => a -> a -> a
<> Codec s a -> [WriteCol s]
forall s a. Codec s a -> [WriteCol s]
cWrite Codec s a
codecArg
      }

-- | 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 = Codec {cDecode :: RowCodec a
cDecode = Text -> Col a -> RowCodec a
forall a. Text -> Col a -> RowCodec a
col Text
name Col a
colType, cWrite :: [WriteCol a]
cWrite = [Text -> Col a -> (a -> a) -> WriteCol a
forall payload s.
Text -> Col payload -> (s -> payload) -> 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 = Codec {cDecode :: RowCodec (Maybe a)
cDecode = Text -> Col a -> RowCodec (Maybe a)
forall a. Text -> Col a -> RowCodec (Maybe a)
ncol Text
name Col a
colType, cWrite :: [WriteCol (Maybe a)]
cWrite = [Text -> Col a -> (Maybe a -> Maybe a) -> WriteCol (Maybe a)
forall payload s.
Text -> Col payload -> (s -> Maybe payload) -> 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 = Codec {cDecode :: RowCodec a
cDecode = RowCodec a
decode, cWrite :: [WriteCol s]
cWrite = []}

-- | 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 = Codec {cDecode :: RowCodec ()
cDecode = () -> RowCodec ()
forall a. a -> Ap NullCol a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (), cWrite :: [WriteCol s]
cWrite = [Text -> Col a -> (s -> a) -> WriteCol s
forall payload s.
Text -> Col payload -> (s -> payload) -> 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
CStored -> 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
  -- ^ The job to insert.
  , forall payload. JobWriteSource payload -> Value
sourceEncoded :: Value
  -- ^ The encoded payload.
  , forall payload. JobWriteSource payload -> PayloadColumns
sourceColumns :: PayloadColumns
  -- ^ The columns the payload derives.
  , forall payload. JobWriteSource payload -> Maybe Int64
sourceParentId :: Maybe Int64
  -- ^ The parent job id, if any.
  , forall payload. JobWriteSource payload -> Maybe Value
sourceParentState :: Maybe Value
  -- ^ The initial rollup state.
  , forall payload. JobWriteSource payload -> Bool
sourceSuspended :: Bool
  -- ^ Whether the row is inserted suspended.
  }

-- | 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 over a 'JobWriteSource'.
jobCodec :: Text -> Codec (JobWriteSource payload) (JobRead (Stored stored))
jobCodec :: forall payload stored.
Text -> Codec (JobWriteSource payload) (JobRead (Stored stored))
jobCodec = Text
-> Text -> Codec (JobWriteSource payload) (JobRead (Stored stored))
forall payload stored.
Text
-> Text -> Codec (JobWriteSource payload) (JobRead (Stored stored))
jobCodecWith Text
"id"

-- | 'jobCodec' with an explicit primary-key column.
jobCodecWith :: Text -> Text -> Codec (JobWriteSource payload) (JobRead (Stored stored))
jobCodecWith :: forall payload stored.
Text
-> Text -> Codec (JobWriteSource payload) (JobRead (Stored stored))
jobCodecWith Text
idColumn Text
queueName =
  Int64
-> Stored stored
-> 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
-> JobRecord (Stored stored) Int64 Text UTCTime PayloadKeys
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
 -> Stored stored
 -> 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
 -> JobRecord (Stored stored) Int64 Text UTCTime PayloadKeys)
-> Codec (JobWriteSource payload) Int64
-> Codec
     (JobWriteSource payload)
     (Stored stored
      -> 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
      -> JobRecord (Stored stored) Int64 Text UTCTime PayloadKeys)
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)
  (Stored stored
   -> 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
   -> JobRecord (Stored stored) Int64 Text UTCTime PayloadKeys)
-> Codec (JobWriteSource payload) (Stored stored)
-> 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
      -> JobRecord (Stored stored) Int64 Text UTCTime PayloadKeys)
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 (Stored stored)
-> Codec (JobWriteSource payload) (Stored stored)
forall a s. RowCodec a -> Codec s a
ro (Text -> Col (Stored stored) -> RowCodec (Stored stored)
forall a. Text -> Col a -> RowCodec a
col Text
"payload" Col (Stored stored)
forall payload. Col (Stored payload)
CStored)
    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
   -> JobRecord (Stored stored) Int64 Text UTCTime PayloadKeys)
-> 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
      -> JobRecord (Stored stored) Int64 Text UTCTime PayloadKeys)
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
   -> JobRecord (Stored stored) Int64 Text UTCTime PayloadKeys)
-> 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
      -> JobRecord (Stored stored) Int64 Text UTCTime PayloadKeys)
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 (Job payload () () () () -> Maybe Text
forall payload key q insertedAt adm.
Job payload key q insertedAt adm -> Maybe Text
JT.groupKey (Job payload () () () () -> Maybe Text)
-> (JobWriteSource payload -> Job payload () () () ())
-> JobWriteSource payload
-> Maybe Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JobWriteSource payload -> Job 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
   -> JobRecord (Stored stored) Int64 Text UTCTime PayloadKeys)
-> 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
      -> JobRecord (Stored stored) Int64 Text UTCTime PayloadKeys)
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
   -> JobRecord (Stored stored) Int64 Text UTCTime PayloadKeys)
-> 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
      -> JobRecord (Stored stored) Int64 Text UTCTime PayloadKeys)
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
   -> JobRecord (Stored stored) Int64 Text UTCTime PayloadKeys)
-> 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
      -> JobRecord (Stored stored) Int64 Text UTCTime PayloadKeys)
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
   -> JobRecord (Stored stored) Int64 Text UTCTime PayloadKeys)
-> 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
      -> JobRecord (Stored stored) Int64 Text UTCTime PayloadKeys)
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
   -> JobRecord (Stored stored) Int64 Text UTCTime PayloadKeys)
-> 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
      -> JobRecord (Stored stored) Int64 Text UTCTime PayloadKeys)
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 (Job payload () () () () -> Int32
forall payload key q insertedAt adm.
Job payload key q insertedAt adm -> Int32
JT.priority (Job payload () () () () -> Int32)
-> (JobWriteSource payload -> Job payload () () () ())
-> JobWriteSource payload
-> Int32
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JobWriteSource payload -> Job 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
   -> JobRecord (Stored stored) Int64 Text UTCTime PayloadKeys)
-> 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
      -> JobRecord (Stored stored) Int64 Text UTCTime PayloadKeys)
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
   -> JobRecord (Stored stored) Int64 Text UTCTime PayloadKeys)
-> 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
      -> JobRecord (Stored stored) Int64 Text UTCTime PayloadKeys)
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 (Job payload () () () () -> Maybe UTCTime
forall payload key q insertedAt adm.
Job payload key q insertedAt adm -> Maybe UTCTime
JT.notVisibleUntil (Job payload () () () () -> Maybe UTCTime)
-> (JobWriteSource payload -> Job payload () () () ())
-> JobWriteSource payload
-> Maybe UTCTime
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JobWriteSource payload -> Job 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
   -> JobRecord (Stored stored) Int64 Text UTCTime PayloadKeys)
-> Codec (JobWriteSource payload) (Maybe DedupKey)
-> Codec
     (JobWriteSource payload)
     (Maybe Int32
      -> Maybe Int64
      -> Maybe Value
      -> Maybe TraceContext
      -> Bool
      -> Maybe UUID
      -> Int64
      -> Maybe Int32
      -> PayloadKeys
      -> JobRecord (Stored stored) Int64 Text UTCTime PayloadKeys)
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
   -> JobRecord (Stored stored) Int64 Text UTCTime PayloadKeys)
-> Codec (JobWriteSource payload) (Maybe Int32)
-> Codec
     (JobWriteSource payload)
     (Maybe Int64
      -> Maybe Value
      -> Maybe TraceContext
      -> Bool
      -> Maybe UUID
      -> Int64
      -> Maybe Int32
      -> PayloadKeys
      -> JobRecord (Stored stored) Int64 Text UTCTime PayloadKeys)
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 -> Int32 -> Int32
forall a. Ord a => a -> a -> a
max Int32
minMaxAttempts (Int32 -> Int32)
-> (JobWriteSource payload -> Int32)
-> JobWriteSource payload
-> 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
. Job payload () () () () -> Maybe Int32
forall payload key q insertedAt adm.
Job payload key q insertedAt adm -> Maybe Int32
JT.maxAttempts (Job payload () () () () -> Maybe Int32)
-> (JobWriteSource payload -> Job payload () () () ())
-> JobWriteSource payload
-> Maybe Int32
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JobWriteSource payload -> Job 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
   -> JobRecord (Stored stored) Int64 Text UTCTime PayloadKeys)
-> Codec (JobWriteSource payload) (Maybe Int64)
-> Codec
     (JobWriteSource payload)
     (Maybe Value
      -> Maybe TraceContext
      -> Bool
      -> Maybe UUID
      -> Int64
      -> Maybe Int32
      -> PayloadKeys
      -> JobRecord (Stored stored) Int64 Text UTCTime PayloadKeys)
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
   -> JobRecord (Stored stored) Int64 Text UTCTime PayloadKeys)
-> Codec (JobWriteSource payload) (Maybe Value)
-> Codec
     (JobWriteSource payload)
     (Maybe TraceContext
      -> Bool
      -> Maybe UUID
      -> Int64
      -> Maybe Int32
      -> PayloadKeys
      -> JobRecord (Stored stored) Int64 Text UTCTime PayloadKeys)
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
   -> JobRecord (Stored stored) Int64 Text UTCTime PayloadKeys)
-> Codec (JobWriteSource payload) (Maybe TraceContext)
-> Codec
     (JobWriteSource payload)
     (Bool
      -> Maybe UUID
      -> Int64
      -> Maybe Int32
      -> PayloadKeys
      -> JobRecord (Stored stored) Int64 Text UTCTime PayloadKeys)
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
   -> JobRecord (Stored stored) Int64 Text UTCTime PayloadKeys)
-> Codec (JobWriteSource payload) Bool
-> Codec
     (JobWriteSource payload)
     (Maybe UUID
      -> Int64
      -> Maybe Int32
      -> PayloadKeys
      -> JobRecord (Stored stored) Int64 Text UTCTime PayloadKeys)
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
   -> JobRecord (Stored stored) Int64 Text UTCTime PayloadKeys)
-> Codec (JobWriteSource payload) (Maybe UUID)
-> Codec
     (JobWriteSource payload)
     (Int64
      -> Maybe Int32
      -> PayloadKeys
      -> JobRecord (Stored stored) Int64 Text UTCTime PayloadKeys)
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
   -> JobRecord (Stored stored) Int64 Text UTCTime PayloadKeys)
-> Codec (JobWriteSource payload) Int64
-> Codec
     (JobWriteSource payload)
     (Maybe Int32
      -> PayloadKeys
      -> JobRecord (Stored stored) Int64 Text UTCTime PayloadKeys)
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
   -> JobRecord (Stored stored) Int64 Text UTCTime PayloadKeys)
-> Codec (JobWriteSource payload) (Maybe Int32)
-> Codec
     (JobWriteSource payload)
     (PayloadKeys
      -> JobRecord (Stored stored) Int64 Text UTCTime PayloadKeys)
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 (Job payload () () () () -> Maybe Int32
forall payload key q insertedAt adm.
Job payload key q insertedAt adm -> Maybe Int32
JT.archiveFor (Job payload () () () () -> Maybe Int32)
-> (JobWriteSource payload -> Job payload () () () ())
-> JobWriteSource payload
-> Maybe Int32
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JobWriteSource payload -> Job 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
   -> JobRecord (Stored stored) Int64 Text UTCTime PayloadKeys)
-> Codec (JobWriteSource payload) PayloadKeys
-> Codec
     (JobWriteSource payload)
     (JobRecord (Stored stored) Int64 Text UTCTime PayloadKeys)
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, PayloadColumns))
-> Codec (Value, PayloadColumns) PayloadKeys
-> Codec (JobWriteSource payload) PayloadKeys
forall t s a. (t -> s) -> Codec s a -> Codec t a
lmap (\JobWriteSource payload
source -> (JobWriteSource payload -> Value
forall payload. JobWriteSource payload -> Value
sourceEncoded JobWriteSource payload
source, JobWriteSource payload -> PayloadColumns
forall payload. JobWriteSource payload -> PayloadColumns
sourceColumns JobWriteSource payload
source)) Codec (Value, PayloadColumns) PayloadKeys
payloadWriteCodec

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

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
. Job payload () () () () -> Maybe TraceContext
forall payload key q insertedAt adm.
Job payload key q insertedAt adm -> Maybe TraceContext
JT.traceContext (Job payload () () () () -> Maybe TraceContext)
-> (JobWriteSource payload -> Job payload () () () ())
-> JobWriteSource payload
-> Maybe TraceContext
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JobWriteSource payload -> Job 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
. Job payload () () () () -> Maybe TraceContext
forall payload key q insertedAt adm.
Job payload key q insertedAt adm -> Maybe TraceContext
JT.traceContext (Job payload () () () () -> Maybe TraceContext)
-> (JobWriteSource payload -> Job payload () () () ())
-> JobWriteSource payload
-> Maybe TraceContext
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JobWriteSource payload -> Job 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
dedupFromParts
    (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
. Job payload () () () () -> Maybe DedupKey
forall payload key q insertedAt adm.
Job payload key q insertedAt adm -> Maybe DedupKey
JT.dedupKey (Job payload () () () () -> Maybe DedupKey)
-> (JobWriteSource payload -> Job payload () () () ())
-> JobWriteSource payload
-> Maybe DedupKey
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JobWriteSource payload -> Job 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
. Job payload () () () () -> Maybe DedupKey
forall payload key q insertedAt adm.
Job payload key q insertedAt adm -> Maybe DedupKey
JT.dedupKey (Job payload () () () () -> Maybe DedupKey)
-> (JobWriteSource payload -> Job payload () () () ())
-> JobWriteSource payload
-> Maybe DedupKey
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JobWriteSource payload -> Job 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)

-- | An encoded payload and the columns derived from it, as every job write stores them.
payloadWriteCodec :: Codec (Value, PayloadColumns) PayloadKeys
payloadWriteCodec :: Codec (Value, PayloadColumns) PayloadKeys
payloadWriteCodec = Text
-> Col Value
-> ((Value, PayloadColumns) -> Value)
-> Codec (Value, PayloadColumns) ()
forall a s. Text -> Col a -> (s -> a) -> Codec s ()
wo Text
"payload" Col Value
CJsonb (Value, PayloadColumns) -> Value
forall a b. (a, b) -> a
fst Codec (Value, PayloadColumns) ()
-> Codec (Value, PayloadColumns) PayloadKeys
-> Codec (Value, PayloadColumns) PayloadKeys
forall a b.
Codec (Value, PayloadColumns) a
-> Codec (Value, PayloadColumns) b
-> Codec (Value, PayloadColumns) b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> ((Value, PayloadColumns) -> PayloadColumns)
-> Codec PayloadColumns PayloadKeys
-> Codec (Value, PayloadColumns) PayloadKeys
forall t s a. (t -> s) -> Codec s a -> Codec t a
lmap (Value, PayloadColumns) -> PayloadColumns
forall a b. (a, b) -> b
snd Codec PayloadColumns PayloadKeys
payloadCodec

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
toRateLimitKey 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
toConcurrencyKey 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 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 (Codec (JobWriteSource Value) (JobRead (Stored Value))
-> [(Text, Text)]
forall s a. Codec s a -> [(Text, Text)]
cColumns (Text -> Codec (JobWriteSource Value) (JobRead (Stored Value))
forall payload stored.
Text -> Codec (JobWriteSource payload) (JobRead (Stored stored))
jobCodec Text
"" :: JobCodec (JobRead (Stored Value))))

-- | Envelope codec for the DLQ/archive tables: @id@, a timestamp column, and the job snapshot (@job_id@ for @id@).
jobEnvelopeCodec :: forall payload. Text -> Text -> RowCodec (Int64, UTCTime, JobRead (Stored payload))
jobEnvelopeCodec :: forall payload.
Text -> Text -> RowCodec (Int64, UTCTime, JobRead (Stored payload))
jobEnvelopeCodec Text
tsColumn Text
queueName =
  (,,)
    (Int64
 -> UTCTime
 -> JobRead (Stored payload)
 -> (Int64, UTCTime, JobRead (Stored payload)))
-> RowCodec Int64
-> Ap
     NullCol
     (UTCTime
      -> JobRead (Stored payload)
      -> (Int64, UTCTime, JobRead (Stored payload)))
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 (Stored payload)
   -> (Int64, UTCTime, JobRead (Stored payload)))
-> RowCodec UTCTime
-> Ap
     NullCol
     (JobRead (Stored payload)
      -> (Int64, UTCTime, JobRead (Stored payload)))
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 (Stored payload)
   -> (Int64, UTCTime, JobRead (Stored payload)))
-> Ap NullCol (JobRead (Stored payload))
-> Ap NullCol (Int64, UTCTime, JobRead (Stored payload))
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 (Stored payload))
-> Ap NullCol (JobRead (Stored payload))
forall s a. Codec s a -> RowCodec a
cDecode (Text
-> Text -> Codec (JobWriteSource Value) (JobRead (Stored payload))
forall payload stored.
Text
-> Text -> Codec (JobWriteSource payload) (JobRead (Stored stored))
jobCodecWith Text
"job_id" Text
queueName :: JobCodec (JobRead (Stored payload)))

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

-- | Archive envelope. The shared job snapshot plus the @result@ a completed root job stored.
archiveRowCodec :: Text -> RowCodec (Int64, UTCTime, JobRead (Stored payload), Maybe Value)
archiveRowCodec :: forall payload.
Text
-> RowCodec (Int64, UTCTime, JobRead (Stored payload), Maybe Value)
archiveRowCodec Text
queueName =
  (\(Int64
envelopeId, UTCTime
completed, JobRead (Stored payload)
job) Maybe Value
result -> (Int64
envelopeId, UTCTime
completed, JobRead (Stored payload)
job, Maybe Value
result))
    ((Int64, UTCTime, JobRead (Stored payload))
 -> Maybe Value
 -> (Int64, UTCTime, JobRead (Stored payload), Maybe Value))
-> Ap NullCol (Int64, UTCTime, JobRead (Stored payload))
-> Ap
     NullCol
     (Maybe Value
      -> (Int64, UTCTime, JobRead (Stored payload), Maybe Value))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text
-> Text -> Ap NullCol (Int64, UTCTime, JobRead (Stored payload))
forall payload.
Text -> Text -> RowCodec (Int64, UTCTime, JobRead (Stored payload))
jobEnvelopeCodec Text
"completed_at" Text
queueName
    Ap
  NullCol
  (Maybe Value
   -> (Int64, UTCTime, JobRead (Stored payload), Maybe Value))
-> Ap NullCol (Maybe Value)
-> Ap
     NullCol (Int64, UTCTime, JobRead (Stored payload), 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
-> [Text]
-> Maybe Double
-> Maybe Double
-> RateLimitPolicyView
RateLimitPolicyView
    (Text
 -> Double
 -> Double
 -> Double
 -> Maybe Double
 -> Maybe Double
 -> Maybe Double
 -> Int64
 -> Int64
 -> [Text]
 -> Maybe Double
 -> Maybe Double
 -> RateLimitPolicyView)
-> Ap NullCol Text
-> Ap
     NullCol
     (Double
      -> Double
      -> Double
      -> Maybe Double
      -> Maybe Double
      -> Maybe Double
      -> Int64
      -> Int64
      -> [Text]
      -> 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
   -> [Text]
   -> Maybe Double
   -> Maybe Double
   -> RateLimitPolicyView)
-> Ap NullCol Double
-> Ap
     NullCol
     (Double
      -> Double
      -> Maybe Double
      -> Maybe Double
      -> Maybe Double
      -> Int64
      -> Int64
      -> [Text]
      -> 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
   -> [Text]
   -> Maybe Double
   -> Maybe Double
   -> RateLimitPolicyView)
-> Ap NullCol Double
-> Ap
     NullCol
     (Double
      -> Maybe Double
      -> Maybe Double
      -> Maybe Double
      -> Int64
      -> Int64
      -> [Text]
      -> 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
   -> [Text]
   -> Maybe Double
   -> Maybe Double
   -> RateLimitPolicyView)
-> Ap NullCol Double
-> Ap
     NullCol
     (Maybe Double
      -> Maybe Double
      -> Maybe Double
      -> Int64
      -> Int64
      -> [Text]
      -> 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
   -> [Text]
   -> Maybe Double
   -> Maybe Double
   -> RateLimitPolicyView)
-> Ap NullCol (Maybe Double)
-> Ap
     NullCol
     (Maybe Double
      -> Maybe Double
      -> Int64
      -> Int64
      -> [Text]
      -> 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
   -> [Text]
   -> Maybe Double
   -> Maybe Double
   -> RateLimitPolicyView)
-> Ap NullCol (Maybe Double)
-> Ap
     NullCol
     (Maybe Double
      -> Int64
      -> Int64
      -> [Text]
      -> 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
   -> [Text]
   -> Maybe Double
   -> Maybe Double
   -> RateLimitPolicyView)
-> Ap NullCol (Maybe Double)
-> Ap
     NullCol
     (Int64
      -> Int64
      -> [Text]
      -> 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
   -> [Text]
   -> Maybe Double
   -> Maybe Double
   -> RateLimitPolicyView)
-> RowCodec Int64
-> Ap
     NullCol
     (Int64
      -> [Text] -> 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
   -> [Text] -> Maybe Double -> Maybe Double -> RateLimitPolicyView)
-> RowCodec Int64
-> Ap
     NullCol
     ([Text] -> 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
  ([Text] -> Maybe Double -> Maybe Double -> RateLimitPolicyView)
-> Ap NullCol [Text]
-> 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
<*> (Value -> [Text]
forall a. (FromJSON a, Monoid a) => Value -> a
decodeOrEmpty (Value -> [Text]) -> Ap NullCol Value -> Ap NullCol [Text]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text -> Col Value -> Ap NullCol Value
forall a. Text -> Col a -> RowCodec a
col Text
"throttled_queues" Col Value
CJsonb)
    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 concurrency 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 =
      ( WorkerRow
          { workerId :: UUID
workerId = UUID
wid
          , queueName :: Text
queueName = Text
queue
          , hostName :: Maybe Text
hostName = Maybe Text
host
          , workerCount :: Maybe Int32
workerCount = Maybe Int32
count
          , startedAt :: UTCTime
startedAt = UTCTime
started
          , lastHeartbeat :: UTCTime
lastHeartbeat = UTCTime
heartbeat
          , shuttingDown :: Bool
shuttingDown = Bool
shuttingDown
          , paused :: Bool
paused = Bool
paused
          , staleThresholdSecs :: Double
staleThresholdSecs = Double
stale
          , metadata :: Maybe Value
metadata = Maybe Value
metadata
          , health :: WorkerHealth
health = 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
-> Maybe NominalDiffTime
-> QueueRow
QueueRow
    (Text
 -> Bool
 -> Maybe UTCTime
 -> Maybe Value
 -> UTCTime
 -> UTCTime
 -> Maybe NominalDiffTime
 -> QueueRow)
-> Ap NullCol Text
-> Ap
     NullCol
     (Bool
      -> Maybe UTCTime
      -> Maybe Value
      -> UTCTime
      -> UTCTime
      -> Maybe NominalDiffTime
      -> 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
   -> Maybe NominalDiffTime
   -> QueueRow)
-> Ap NullCol Bool
-> Ap
     NullCol
     (Maybe UTCTime
      -> Maybe Value
      -> UTCTime
      -> UTCTime
      -> Maybe NominalDiffTime
      -> 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
   -> Maybe NominalDiffTime
   -> QueueRow)
-> RowCodec (Maybe UTCTime)
-> Ap
     NullCol
     (Maybe Value
      -> UTCTime -> UTCTime -> Maybe NominalDiffTime -> 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 -> Maybe NominalDiffTime -> QueueRow)
-> Ap NullCol (Maybe Value)
-> Ap
     NullCol (UTCTime -> UTCTime -> Maybe NominalDiffTime -> 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 -> Maybe NominalDiffTime -> QueueRow)
-> RowCodec UTCTime
-> Ap NullCol (UTCTime -> Maybe NominalDiffTime -> 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 -> Maybe NominalDiffTime -> QueueRow)
-> RowCodec UTCTime
-> Ap NullCol (Maybe NominalDiffTime -> 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
    Ap NullCol (Maybe NominalDiffTime -> QueueRow)
-> Ap NullCol (Maybe NominalDiffTime) -> 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
<*> ((Int64 -> NominalDiffTime) -> Maybe Int64 -> Maybe NominalDiffTime
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Int64 -> NominalDiffTime
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Maybe Int64 -> Maybe NominalDiffTime)
-> Ap NullCol (Maybe Int64) -> Ap NullCol (Maybe NominalDiffTime)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text -> Col Int64 -> Ap NullCol (Maybe Int64)
forall a. Text -> Col a -> RowCodec (Maybe a)
ncol Text
"dlq_retention_secs" Col Int64
CInt8)