module Termbox.Bindings.Hs.Internal.InitError
  ( Tb_init_error
      ( Tb_init_error,
        TB_EFAILED_TO_OPEN_TTY,
        TB_EPIPE_TRAP_ERROR,
        TB_EUNSUPPORTED_TERMINAL
      ),
  )
where

import Control.Exception (Exception)
import Foreign.C.Types (CInt)
import Termbox.Bindings.C (_TB_EFAILED_TO_OPEN_TTY, _TB_EPIPE_TRAP_ERROR, _TB_EUNSUPPORTED_TERMINAL)

-- | A 'tb_init' error.
newtype Tb_init_error
  = Tb_init_error CInt
  deriving anyclass (Show Tb_init_error
Typeable Tb_init_error
(Typeable Tb_init_error, Show Tb_init_error) =>
(Tb_init_error -> SomeException)
-> (SomeException -> Maybe Tb_init_error)
-> (Tb_init_error -> String)
-> Exception Tb_init_error
SomeException -> Maybe Tb_init_error
Tb_init_error -> String
Tb_init_error -> SomeException
forall e.
(Typeable e, Show e) =>
(e -> SomeException)
-> (SomeException -> Maybe e) -> (e -> String) -> Exception e
$ctoException :: Tb_init_error -> SomeException
toException :: Tb_init_error -> SomeException
$cfromException :: SomeException -> Maybe Tb_init_error
fromException :: SomeException -> Maybe Tb_init_error
$cdisplayException :: Tb_init_error -> String
displayException :: Tb_init_error -> String
Exception)
  deriving stock (Tb_init_error -> Tb_init_error -> Bool
(Tb_init_error -> Tb_init_error -> Bool)
-> (Tb_init_error -> Tb_init_error -> Bool) -> Eq Tb_init_error
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Tb_init_error -> Tb_init_error -> Bool
== :: Tb_init_error -> Tb_init_error -> Bool
$c/= :: Tb_init_error -> Tb_init_error -> Bool
/= :: Tb_init_error -> Tb_init_error -> Bool
Eq)

instance Show Tb_init_error where
  show :: Tb_init_error -> String
show = \case
    Tb_init_error
TB_EFAILED_TO_OPEN_TTY -> String
"TB_EFAILED_TO_OPEN_TTY"
    Tb_init_error
TB_EPIPE_TRAP_ERROR -> String
"TB_EPIPE_TRAP_ERROR"
    Tb_init_error
TB_EUNSUPPORTED_TERMINAL -> String
"TB_EUNSUPPORTED_TERMINAL"

pattern TB_EFAILED_TO_OPEN_TTY :: Tb_init_error
pattern $mTB_EFAILED_TO_OPEN_TTY :: forall {r}. Tb_init_error -> ((# #) -> r) -> ((# #) -> r) -> r
$bTB_EFAILED_TO_OPEN_TTY :: Tb_init_error
TB_EFAILED_TO_OPEN_TTY <-
  ((== Tb_init_error _TB_EFAILED_TO_OPEN_TTY) -> True)
  where
    TB_EFAILED_TO_OPEN_TTY = CInt -> Tb_init_error
Tb_init_error CInt
_TB_EFAILED_TO_OPEN_TTY

pattern TB_EPIPE_TRAP_ERROR :: Tb_init_error
pattern $mTB_EPIPE_TRAP_ERROR :: forall {r}. Tb_init_error -> ((# #) -> r) -> ((# #) -> r) -> r
$bTB_EPIPE_TRAP_ERROR :: Tb_init_error
TB_EPIPE_TRAP_ERROR <-
  ((== Tb_init_error Termbox.Bindings.C._TB_EPIPE_TRAP_ERROR) -> True)
  where
    TB_EPIPE_TRAP_ERROR = CInt -> Tb_init_error
Tb_init_error CInt
_TB_EPIPE_TRAP_ERROR

pattern TB_EUNSUPPORTED_TERMINAL :: Tb_init_error
pattern $mTB_EUNSUPPORTED_TERMINAL :: forall {r}. Tb_init_error -> ((# #) -> r) -> ((# #) -> r) -> r
$bTB_EUNSUPPORTED_TERMINAL :: Tb_init_error
TB_EUNSUPPORTED_TERMINAL <-
  ((== Tb_init_error _TB_EUNSUPPORTED_TERMINAL) -> True)
  where
    TB_EUNSUPPORTED_TERMINAL = CInt -> Tb_init_error
Tb_init_error CInt
_TB_EUNSUPPORTED_TERMINAL

-- N.B. This requires Tb_init_error to remain abstract
{-# COMPLETE TB_EFAILED_TO_OPEN_TTY, TB_EPIPE_TRAP_ERROR, TB_EUNSUPPORTED_TERMINAL #-}