module Polysemy.Hasql.Queue.Data.Queued where

import Sqel.Comp (CompName (compName))
import Sqel.Data.Sel (MkTSel (mkTSel), SelPrefix (NoPrefix), TSel (TSel))

data Queued t a =
  Queued {
    forall t a. Queued t a -> t
queue_created :: t,
    forall t a. Queued t a -> a
queue_payload :: a
  }
  deriving stock (Queued t a -> Queued t a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
forall t a. (Eq t, Eq a) => Queued t a -> Queued t a -> Bool
/= :: Queued t a -> Queued t a -> Bool
$c/= :: forall t a. (Eq t, Eq a) => Queued t a -> Queued t a -> Bool
== :: Queued t a -> Queued t a -> Bool
$c== :: forall t a. (Eq t, Eq a) => Queued t a -> Queued t a -> Bool
Eq, Int -> Queued t a -> ShowS
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
forall t a. (Show t, Show a) => Int -> Queued t a -> ShowS
forall t a. (Show t, Show a) => [Queued t a] -> ShowS
forall t a. (Show t, Show a) => Queued t a -> String
showList :: [Queued t a] -> ShowS
$cshowList :: forall t a. (Show t, Show a) => [Queued t a] -> ShowS
show :: Queued t a -> String
$cshow :: forall t a. (Show t, Show a) => Queued t a -> String
showsPrec :: Int -> Queued t a -> ShowS
$cshowsPrec :: forall t a. (Show t, Show a) => Int -> Queued t a -> ShowS
Show, forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall t a x. Rep (Queued t a) x -> Queued t a
forall t a x. Queued t a -> Rep (Queued t a) x
$cto :: forall t a x. Rep (Queued t a) x -> Queued t a
$cfrom :: forall t a x. Queued t a -> Rep (Queued t a) x
Generic)

instance (
    CompName d ('TSel prefix inner),
    name ~ AppendSymbol "Queued" inner,
    sel ~ 'TSel 'NoPrefix name,
    MkTSel sel
  ) => CompName (Queued t d) sel where
  compName :: TSelW sel
compName = forall (sel :: TSel). MkTSel sel => TSelW sel
mkTSel