packages feed

sqel-0.0.1.0: lib/Sqel/Data/TableSchema.hs

module Sqel.Data.TableSchema where

import Exon (exon)
import Hasql.Decoders (Row)
import Hasql.Encoders (Params)
import Lens.Micro ((^.))

import Sqel.Data.PgType (PgTable)
import Sqel.Data.Sql (ToSql (toSql))
import Sqel.Data.SqlFragment (Create (Create), Select (Select))

data TableSchema a =
  TableSchema {
    pg :: PgTable a,
    decoder :: Row a,
    encoder :: Params a
  }
  deriving stock (Generic)

instance Show (TableSchema a) where
  showsPrec d TableSchema {pg} =
    showParen (d > 10) [exon|TableSchema #{showsPrec 11 pg}|]

instance ToSql (Select (TableSchema a)) where
  toSql (Select ts) =
    toSql (Select (ts ^. #pg))

instance ToSql (Create (TableSchema a)) where
  toSql (Create ts) =
    toSql (Create (ts ^. #pg))