{-# LANGUAGE DeriveGeneric, DeriveAnyClass #-}
module Language.Coformat.Formatter.Failure where
import qualified Data.Text as T
import Control.Monad.Except.CoHas
import GHC.Generics
data ExpectedFailure = FormatterSegfaulted T.Text
deriving (Eq, Show)
data UnexpectedFailure = FormatterFailure
{ errorCode :: Int
, errorOutput :: T.Text
} deriving (Eq, Show)
data Failure = ExpectedFailure ExpectedFailure
| UnexpectedFailure UnexpectedFailure
deriving (Eq, Show, Generic, CoHas ExpectedFailure, CoHas UnexpectedFailure)
failuresAreUnexpected :: Failure -> UnexpectedFailure
failuresAreUnexpected (UnexpectedFailure err) = err
failuresAreUnexpected (ExpectedFailure (FormatterSegfaulted out)) = FormatterFailure 0 out