@@ -160,7 +160,9 @@ module Squeal.PostgreSQL.Binary
160 , Only (..)
160 , Only (..)
163import ByteString.StrictBuilder
164import ByteString.StrictBuilder
164import Data.Aeson hiding (Null)
166import Data.Aeson hiding (Null)
165import Data.Int
167import Data.Int
166import Data.Kind
168import Data.Kind
@@ -178,7 +180,7 @@ import Network.IP.Addr
178import qualified Data.ByteString.Lazy as Lazy
180import qualified Data.ByteString.Lazy as Lazy
179import qualified Data.ByteString as Strict hiding (pack, unpack)
181import qualified Data.ByteString as Strict hiding (pack, unpack)
180import qualified Data.Text.Lazy as Lazy
182import qualified Data.Text.Lazy as Lazy
181−import qualified Data.Text as Strict
183+import qualified Data.Text as Strict hiding (empty)
182import qualified Data.Vector as Vector
184import qualified Data.Vector as Vector
183import qualified GHC.Generics as GHC
185import qualified GHC.Generics as GHC
184import qualified PostgreSQL.Binary.Decoding as Decoding
186import qualified PostgreSQL.Binary.Decoding as Decoding
@@ -439,10 +441,20 @@ instance
439 fromValue p =
441 fromValue p =
441 composite
443 composite
444+ :: forall proxy pgs. SListI pgs
442− :: proxy ('PGcomposite pgs)
445+ => proxy ('PGcomposite pgs)
443 -> Strict.ByteString
446 -> Strict.ByteString
444− -> NP (K (Maybe Strict.ByteString)) pgs
447+ -> Either Strict.Text (NP (K (Maybe Strict.ByteString)) pgs)
445− composite = undefined
448+ composite _ = Decoding.valueParser $ do
453+ len <- sized 4 Decoding.int
455+ then return (K Nothing)
456+ else K . Just <$> bytesOfSize len
457+ htraverse' each (hpure Proxy :: NP Proxy pgs)
447 -- composite
459 -- composite
448 -- :: SListI zs
460 -- :: SListI zs
@@ -474,7 +486,7 @@ instance
474 -- htraverse' each fields
486 -- htraverse' each fields
477− Decoding.fn (fromRow @fields @y . composite p)
489+ Decoding.fn (fromRow @fields @y <=< composite p)
479-- | A `FromColumnValue` constraint lifts the `FromValue` parser
491-- | A `FromColumnValue` constraint lifts the `FromValue` parser
480-- to a decoding of a @(Symbol, NullityType)@ to a `Type`,
492-- to a decoding of a @(Symbol, NullityType)@ to a `Type`,