module Database.PostgreSQL.Opium.Error (Error (..), ErrorPosition (..)) where

import Control.Exception (Exception)
import Data.ByteString (ByteString)
import Data.Text (Text)
import Database.PostgreSQL.LibPQ (ExecStatus, Oid, Row)

data ErrorPosition = ErrorPosition
  { errorPositionRow :: Row
  , errorPositionColumn :: Text
  } deriving (Eq, Show)

data Error
  = ErrorNoResult
  | ErrorInvalidResult ExecStatus Text
  | ErrorMissingColumn Text
  | ErrorInvalidOid Text Oid
  | ErrorUnexpectedNull ErrorPosition
  | ErrorInvalidField ErrorPosition Oid ByteString String
  deriving (Eq, Show)

instance Exception Error where